我在python中使用MLP分类器和不同类型的数据集。
当有两个以上的类时,我在分类器中有相同数量的输出。当我有2个类时,分类器被强制为1输出(二进制)。这会弄乱权重矩阵以及权重的解释。
更具体地,对于M个输入和N个输出,当N> 2时,权重矩阵(coefs_)是M×N。当N = 2时,权重矩阵是Mx1。有没有办法强制它分为两个单独的类?如果我只想用两个类进行多标记分类怎么办?
提前致谢!
答案 0 :(得分:0)
嗨,谢谢你的回应。我实际上找到了一个解决方案:
如果标签是单热编码的,则具有两个类的分类器具有两个输出。
如果标签只是索引(带整数的向量),则只有一个输出,以防有两个类。如果有更多的类,那么它与one-hot编码相同。
您可以查看此代码段以查看差异:
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("")