使用 Scikit Learn 和概率而不是简单标签的多标签分类

Posted

技术标签:

【中文标题】使用 Scikit Learn 和概率而不是简单标签的多标签分类【英文标题】:Multilabel Classification with Scikit Learn and Probabilities Instead of Simple Labels 【发布时间】:2018-04-10 14:50:33 【问题描述】:

我想对一组 3d 图像 (MRI) 进行分类。有 4 个类别(即疾病等级 A、B、C、D),其中 4 个等级之间的区别并非微不足道,因此我对训练数据的标签不是每个图像一个类别。这是一组 4 个概率,每个类一个,例如

0.7   0.1  0.05  0.15
0.35  0.2  0.45  0.0
...

...基本上意味着

第一张图片属于 A 类的概率为 70%,B 类的概率为 10%,C 类的概率为 5%,D 类的概率为 15% 等等,我相信你明白了。

我不明白如何用这些标签拟合模型,因为 scikit-learn 分类器期望每个训练数据只有 1 个标签。只使用概率最高的类会导致糟糕的结果。

我可以使用 scikit-learn 多标签分类(以及如何)训练我的模型吗?

请注意:

特征提取不是问题。 预测不是问题。

【问题讨论】:

您的意图是预测图像在四个类别中的任何一个类别中的分类,还是“搜索”其他地方定义的概率?你的输入数据是什么——图像数据本身,还是图像上的一些元信息?概率(数据上的标签)来自哪里? 我试图制定一般的设置,希望这会更容易。但如果这真的有帮助,我可以提供以下具体化:输入数据是大脑的 3D 扫描 - 但我的问题是不是如何计算相关特征(你称之为元信息)。目的是预测 3d MRI 属于(疾病)类别 A、B、C 和 D 的(四个)概率。这 4 个类别之间的区别并非微不足道,因此我的标签只是概率(由医生分类)。这四个概率的总和为 1.0。 每个图像是否有唯一且正确/最佳的标签分配给这些图像?在我看来,在计算四个类别的概率并将它们用作标签时,您实际上是在做分类器的工作。如果您可以使用 A、B、C、D 类作为标签,predict_proba 方法将为任何给定的新输入返回每个类的概率。 您可能应该将这些概率作为附加特征与最高类别标签一起发送,然后查看 predict_proba 的结果(如果它有任何变化)。无论如何,正如它现在定义的那样,这个问题不适合堆栈溢出。请将此添加到stats.stackexchange.com 您想用作标签的概率是如何得出的?您还说预测不是问题。也许您不需要机器学习算法而是搜索算法? 【参考方案1】:

我可以用多标签分类框架以某种方式处理这个问题吗?

对于predict_proba,要返回每个类别 A、B、C、D 的概率,分类器需要使用每个图像一个标签进行训练。

如果是:如何?

使用图像类作为训练集中的标签 (Y)。那就是您的输入数据集将如下所示:

F1  F2  F3  F4  Y

1   0   1   0   A
0   1   1   1   B
1   0   0   0   C
0   0   0   1   D
(...)

其中F# 是每张图像的特征,Y 是医生分类的类别。

如果不是:还有其他方法吗?

对于每个图像有多个标签的情况,即多个潜在类别或它们各自的概率,多标签模型可能是更合适的选择,如 Multiclass and multilabel algorithms 中所述。

【讨论】:

不,事实并非如此。 OP 明确表示他曾尝试过这种方法,但结果很糟糕。他想要一些他可以通过所有预测标签的概率的东西。然后得到概率作为结果。 我重新提出了这个问题,它不应该再“太宽泛”了。请考虑重新激活它吗? @VivekKumar 为了让 predict_proba 返回四个类 A、B、C、D 的类概率,分类器需要使用每个图像的 一个 类标签进行训练。这就是它固有的工作原理。在有多个标签或多个离散值的情况下,多标签分类器方法不再适用。这就是我所有的回答状态。 我完全理解。我要说的是,OP知道这一点并尝试过。他为分类器提供了单个标签并获取了 predict_proba() 输出,但结果并不好。他想要的是以某种方式以先前概率的形式考虑训练标签的依赖关系。希望这说明清楚。 我完全同意@VivekKumar 同时我对这个话题做了进一步的研究并且可以回答这个问题——如果它还没有搁置。基本思想:标签不是独立的,因此我只是用类的组合替换了类——效果很好。

以上是关于使用 Scikit Learn 和概率而不是简单标签的多标签分类的主要内容,如果未能解决你的问题,请参考以下文章

scikit-learn/svm - 在“predict_proba”之后获取概率和相关标签

如何在 scikit-learn 中使用交叉验证获得预测概率

如何规范 scikit learn 的 kde?

在 scikit-learn 中处理不平衡测试集的最佳方法

Python Scikit-learn 感知器输出概率

scikit-learn GMM 产生正对数概率