【发布时间】:2018-06-19 03:17:21
【问题描述】:
我有一个分类问题,大致描述如下:在工作中,我们有问题跟踪软件,用于我们的大部分内部沟通。例如,当您需要其他团队的帮助时,您可以在此软件中提出问题。每个问题都可以分配一个或多个标签。
例如,可能会为第一次设置笔记本电脑的新员工提交问题,标题为“John Smith 的笔记本电脑设置”,并标记为“笔记本电脑问题”和“新员工入职”。所以一个给定的问题可以有多个标签。
我正在尝试构建一个分类器,该分类器采用问题的标题并提供建议的标签列表。我的主管要求我使用朴素贝叶斯算法来做到这一点,所以这就是我正在尝试的。我正在使用 scikit-learn。
首先,准确地说这是 scikit-learn 文档 (http://scikit-learn.org/stable/modules/multiclass.html) 中描述的“多标签”分类任务吗?这就是我的想法,但我不太了解“多输出-多类分类”的描述,所以我无法排除这种情况。同样,我为每个样本预测一个或多个类别。
其次,看起来朴素贝叶斯(至少在 scikit-learn 中)实际上并不支持多标签。由于我(目前)被困在使用朴素贝叶斯,我想我可以使用下面的方法来滚动我自己的多标签分类器。这看起来是一种合理的方法吗?
- 为每个类训练一个 Naive-Bayes 二元分类器(为每个样本转换训练数据,以便如果样本在其各个类中具有该类,则标签仅为 1,否则为 0)。
- 然后,当我需要对样本进行预测时,我会使用每个二元分类器得到一个预测,而我的总体预测将是二元分类器预测的标签。
最后,你能想出更好的方法吗?我的计划最大的缺点是因为有大约 2,000 个标签,我需要创建 2,000 个分类器。这可能并不完全禁止,但并不完全理想。 Naive-bayes 确实支持多类分类,所以我想知道是否有某种方法可以在单个分类器上对其进行破解(通过查看为每个类生成的概率(如果存在)。
【问题讨论】:
-
你应该使用多标签分类。在多输出多类任务中,分类器必须从不同的输出任务中进行预测,所以我认为这与您的情况不符。无论如何,目前 scikit 不支持它。
标签: machine-learning scikit-learn