使用 Sklearn 进行多标签分类
Posted
技术标签:
【中文标题】使用 Sklearn 进行多标签分类【英文标题】:Multi Label classification with Sklearn 【发布时间】:2016-05-09 10:14:42 【问题描述】:我曾尝试将 OneVsRest 与来自 Sklearn 的逻辑回归一起使用,但它为某些样本提供了空标签(即不预测任何输出),即使我没有任何未标记的训练数据。
知道是什么原因造成的或如何解决这个问题吗?
clf = OneVsRestClassifier(LogisticRegression(multi_class='ovr',max_iter=1000,solver='lbfgs'))
clf.fit(X,Y)
self.classifier=clf
self.classifier.predict(test_data)
【问题讨论】:
【参考方案1】:每当您执行多标签分类时,根据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]])
【讨论】:
这正是我为单个标签训练格式为 (4,) 的数据所做的。然而,这对一些被标记为无的测试数据没有帮助。 好的,你有什么办法可以给我们一个这样的示例,其中一个样本最终会出现None
预测?也许算法本身或其实现允许在 sklearn 中不确定并返回None
。试着给我们举个例子,同时我会检查一些理论。
您也可以检查predict_proba(X)
方法而不是predict
,看看它是否也返回None
我不确定如何在这里举个例子,因为有预测标签的和没有预测标签的相似。但是,我尝试了您的想法来检查所有没有标签的预测是否为 predict_proba(X)。它们具有所有标签的概率,因此分类器为样本的每个标签提供概率,但最终没有预测任何内容。
数据集是文本文档的集合,其特征是 BOW,并且有多个类标记。以上是关于使用 Sklearn 进行多标签分类的主要内容,如果未能解决你的问题,请参考以下文章
Sklearn Linear SVM 无法在多标签分类中进行训练
如何为多标签分类器/一对休息分类器腌制 sklearn 管道?