我尝试使用来自 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]])