【问题标题】:multilabel Naive Bayes classification using scikit-learn使用 scikit-learn 的多标签朴素贝叶斯分类
【发布时间】: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


【解决方案1】:

您提出的方法是有效的;它实际上是针对多标签分类问题的一种泛化方法,也称为二元相关方法。由于您已经在使用scikit-learn,因此您想要的功能已经在sklearn.multiclass.OneVsRestClassifiermodule 中实现。

唯一的要求是将标签格式化为适当的形状数组[n_samples, n_classes],但这对于scikit-learn 的标签编码器来说也是微不足道的。

【讨论】:

    猜你喜欢
    • 2017-06-21
    • 2015-09-16
    • 2013-12-10
    • 2016-04-12
    • 2018-11-06
    • 2013-06-24
    • 2021-02-09
    • 2013-12-24
    • 2014-05-08
    相关资源
    最近更新 更多