我已尝试使用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)
答案 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]])