partial_fit Sklearn的MLPClassifier

我一直在尝试使用Sklearn的神经网络MLPClassifier。我有一个大小为1000个实例的数据集(带有二进制输出),并且我想对其应用一个具有1个隐藏层的基本神经网络。

问题是我的数据实例不能同时全部可用。在任何时间点,我只能访问1个数据实例。我以为可以使用MLPClassifier的partial_fit方法来解决这个问题,所以我用一个具有1000个输入的虚构数据集模拟了这个问题,并一次遍历一个输入,对每个实例进行partial_fit,但是当我运行代码时,神经网络什么也没学并且预测的输出全为零。

我对导致问题的原因一无所知。任何想法都将不胜感激。

from __future__ import division 
import numpy as np
from sklearn.datasets import make_classification
from sklearn.neural_network import MLPClassifier

#Creating an imaginary dataset
input, output = make_classification(1000, 30, n_informative=10, n_classes=2)
input= input / input.max(axis=0)
N = input.shape[0]
train_input = input[0:N/2,:]
train_target = output[0:N/2]

test_input= input[N/2:N,:]
test_target = output[N/2:N]

#Creating and training the Neural Net
clf = MLPClassifier(activation='tanh', algorithm='sgd', learning_rate='constant',
 alpha=1e-4, hidden_layer_sizes=(15,), random_state=1, batch_size=1,verbose= True,
 max_iter=1, warm_start=True)
classes=[0,1]
for j in xrange(0,100):
for i in xrange(0,train_input.shape[0]):
    input_inst = [train_input[i,:]]
    input_inst = np.asarray(input_inst)
    target_inst= [train_target[i]]
    target_inst = np.asarray(target_inst)
    clf=clf.partial_fit(input_inst,target_inst,classes)

#Testing the Neural Net
y_pred = clf.predict(test_input)
print y_pred
好奇

问题说明

问题出self.label_binarizer_.fit(y)在895行中multilayer_perceptron.py

在这种情况下clf.partial_fit(input_inst,target_inst,classes)无论何时调用,都将调用self.label_binarizer_.fit(y)wherey仅具有一个与一个类对应的样本。因此,如果最后一个样本的类别为0,则您clf会将所有内容归类为0。

作为临时修复,您可以multilayer_perceptron.py在895行进行编辑。它位于类似于此的目录中python2.7/site-packages/sklearn/neural_network/

在895行,更改

self.label_binarizer_.fit(y)

if not incremental:
    self.label_binarizer_.fit(y)

else:
    self.label_binarizer_.fit(self.classes_)

这样,如果您使用partial_fit,则self.label_binarizer_适合类而不是单个样本。

此外,您发布的代码可以更改为以下代码以使其正常工作,

from __future__ import division 
import numpy as np
from sklearn.datasets import make_classification
from sklearn.neural_network import MLPClassifier

#Creating an imaginary dataset
input, output = make_classification(1000, 30, n_informative=10, n_classes=2)
input= input / input.max(axis=0)
N = input.shape[0]
train_input = input[0:N/2,:]
train_target = output[0:N/2]

test_input= input[N/2:N,:]
test_target = output[N/2:N]

#Creating and training the Neural Net 
# 1. Disable verbose (verbose is annoying with partial_fit)

clf = MLPClassifier(activation='tanh', algorithm='sgd', learning_rate='constant',
 alpha=1e-4, hidden_layer_sizes=(15,), random_state=1, batch_size=1,verbose= False,
 max_iter=1, warm_start=True)

# 2. Set what the classes are
clf.classes_ = [0,1]

for j in xrange(0,100):
    for i in xrange(0,train_input.shape[0]):
       input_inst = train_input[[i]]
       target_inst= train_target[[i]]

       clf=clf.partial_fit(input_inst,target_inst)

    # 3. Monitor progress
    print "Score on training set: %0.8f" % clf.score(train_input, train_target)
#Testing the Neural Net
y_pred = clf.predict(test_input)
print y_pred

# 4. Compute score on testing set
print clf.score(test_input, test_target)

该代码有4个主要更改。这应该给您关于培训和测试集的良好预测!

干杯。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

sklearn中带有partial_fit的GridSearchCV / RandomizedSearchCV

为什么sklearn LatentDirichletAllocation的fit和partial_fit返回不同的结果?

使用 MLPCLassifier,多次使用 partial_fit 比使用 fit() 产生最差的准确度,尽管数据已打乱

SkLearn SGDRegressor中partial_fit中的批次大小和纪元数

MLPRegressor与partial_fit()

SKlearn导入MLPClassifier失败

fit / partial_fit之后如何操纵skflow模型的权重?

AttributeError:“管道”对象没有属性“ partial_fit”

在监督分类中,使用 partial_fit() 的 MLP 比使用 fit() 表现更差

如何将MultinomialNB与MultiOutputClassifier和partial_fit一起使用?

为什么“SGDClassifier”中的“partial_fit”会逐渐降低模型精度

scikit-learn中的哪些估算器支持`partial_fit` API?

提前停止和sklearn neuro_network.MLPClassifier

从sklearn的MLPClassifier检索最终隐藏的激活层输出

MLPClassifier在sklearn.neural_network(Python)中给出的权重

sklearn 的 MLPClassifier() 的隐藏层与 keras/tensorflow 的密集层相同吗?

scitkit SGDClassifier partial_fit不会逐步学习。返回“类应包含所有有效标签”

Sklearn Fit模型多次

如何从sklearn MLPClassifier训练的神经网络中使用Syncfusion PMML进行预测?

early_stopping设置为False,但是迭代在Sklearn MLPClassifier中的max_iter之前停止

使用L2正则化将sklearn MLPClassifier移植到Keras

MLPClassifier 的 predict_proba() 函数从 sklearn 输出总的可能性不等于 1

python sklearn中的fit方法

Fit() 方法,python 中的 sklearn

sklearn的MLPClassifier的输入和输出层中有多少个节点用于MNIST数字分类任务

哪个SKLearn接口定义了.fit,.predict等

我尝试使用 Sklearn 将 x_train 和 y_train 拟合到 Perceptron 和 MLPClassifier 时出现未知标签类型错误

BaggingClassifier中的MLPClassifier

MLPClassifier参数设置