2类MLP分类器被强制为1输出(二进制分类器)

时间:2017-06-16 17:05:26

标签: python scikit-learn

我在python中使用MLP分类器和不同类型的数据集。

当有两个以上的类时,我在分类器中有相同数量的输出。当我有2个类时,分类器被强制为1输出(二进制)。这会弄乱权重矩阵以及权重的解释。

更具体地,对于M个输入和N个输出,当N> 2时,权重矩阵(coefs_)是M×N。当N = 2时,权重矩阵是Mx1。有没有办法强制它分为两个单独的类?如果我只想用两个类进行多标记分类怎么办?

提前致谢!

1 个答案:

答案 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("")