使用Sklearn进行多标签分类

时间:2016-02-01 03:06:59

标签: machine-learning scikit-learn classification logistic-regression multilabel-classification

我已尝试使用Sklearn的OneVsRest和Logistic回归,但它为某些样本提供了空标签(即不会预测任何样本),即使我没有任何未标记的训练数据。

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

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


self.classifier.predict(test_data)

1 个答案:

答案 0 :(得分:1)

每当您执行MultiLabel分类时,根据OneVsRestClassifier,目标需要“一系列标签序列”

此外,根据您对此标签的编码方式,您可能会收到以下警告:“DeprecationWarning:对序列序列的直接支持多标签表示将不可用于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]])