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

2024-05-15 01:36:56 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

更具体地说,对于M个输入和N个输出,当N>;2时,权重矩阵(coefs_u)为MxN。当N=2时,权重矩阵为Mx1。有没有办法强迫它分为两个独立的班级?如果我只想用两个类进行多标签分类呢?在

提前谢谢!在


Tags: 数据gt类型数量分类器二进制矩阵权重
1条回答
网友
1楼 · 发布于 2024-05-15 01:36:56

嗨,谢谢你的回复。我真的找到了一个解决办法:

如果标签是一个热编码的,那么具有两个类的分类器有两个输出。在

如果标签只是索引(带有整数的向量),那么只有一个输出,以防有两个类。如果有更多的类,那么它与一个热编码的类相同。在

您可以检查此片段以查看区别:

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

相关问题 更多 >

    热门问题