使用Sklearn进行多标签分类



我尝试使用来自 Sklearn 的带有逻辑回归的 OneVsRest,但它为某些样本提供了空标签(即不预测任何结果),即使我没有任何未标记的训练数据。

知道可能导致此问题的原因或如何解决此问题吗?

clf = OneVsRestClassifier(LogisticRegression(multi_class='ovr',max_iter=1000,solver='lbfgs'))
clf.fit(X,Y)
self.classifier=clf

self.classifier.predict(test_data)

无论何时执行多标签分类,根据OneVsRestClassifier,目标必须是"标签序列序列"。

此外,根据您对此标签的编码方式,您可能会收到以下警告:"弃用警告:从版本 0.17 开始,对序列序列多标签表示的直接支持将不可用。使用 sklearn.preprocessing.MultiLabelBinarizer 转换为标签指示符表示。

因此,对标签进行编码的巧妙方法:

from sklearn import preprocessing
mlb = preprocessing.MultiLabelBinarizer()
Y = mlb.fit_transform([(1, 2), (1,2), (1,2),(4,)]) 
# this means sample one belongs to classes {1,2} and so on. 
# Take into account the format if only one class is needed, (4,) not (4) 

所以Y原来是:

array([[1, 1, 0],
       [1, 1, 0],
       [1, 1, 0],
       [0, 0, 1]])

相关内容

  • 没有找到相关文章