使用 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 进行多标签文本分类

使用 Sklearn 进行多标签分类

Sklearn Linear SVM 无法在多标签分类中进行训练

如何为多标签分类器/一对休息分类器腌制 sklearn 管道?

Sklearn:使用 CalibratedClassifierCV 校准多标签分类

如何使用 sklearn.metrics 计算多标签分类任务的微观/宏观度量?