嗨,谢谢你的回应。我实际上找到了一个解决方案:
如果标签是单热编码,那么具有两个类的分类器有两个输出。
如果标签只是索引(带有整数的向量),则只有一个输出以防有两个类。如果有更多的类,则它与单热编码相同。
您可以检查这个片段看到了区别:
import numpy as np
from sklearn.neural_network import MLPClassifier
import pandas as pd
noinputs=10
nosamples=300
for noclasses in range(2,4):
X_train=np.random.rand(nosamples,noinputs)
Y_train=np.random.random_integers(0,noclasses-1,(nosamples))
Y_train_onehot=pd.get_dummies(Y_train)
clf_vector=MLPClassifier(hidden_layer_sizes=[],max_iter=2)
clf_onehot=MLPClassifier(hidden_layer_sizes=[],max_iter=2)
clf_vector.fit(X_train, Y_train)
clf_onehot.fit(X_train, Y_train_onehot)
print("Number of classes: "+str(noclasses))
print("Vector labels: Shape of weight matrix: "+str(np.array(clf_vector.coefs_).shape))
print("One-hot encoded labels: Shape of weight matrix: "+str(np.array(clf_onehot.coefs_).shape))
print("")
你能提供包括一些示例数据和您使用的sklearn确切类完整的例子吗?我怀疑你正在使用[MLPClassifier](http://scikit-learn.org/stable/modules/generated/sklearn.neural_network.MLPClassifier.html)? –
您可能想使用逻辑激活功能。在这种情况下,具有2个输出神经元相当于只有一个(因为softmax函数,第二个输出神经元的输出将被约束为1-第一个)。在这种情况下,二元分类与多分类分类是一致的。 – JARS
感谢您的意见球员,我整理出来。 @JARS,感谢提示,我知道softmax vs logistic差异,MLPClassifier中有趣的是你不能改变输出层激活函数,据我所知。 –