使用scikit-learn的多标签朴素贝叶斯分类

时间:2018-01-10 01:47:06

标签: machine-learning scikit-learn

我的分类问题大致描述如下:在工作中我们有问题跟踪软件,用于我们的大部分内部沟通。例如,当您需要其他团队的帮助时,您会在此软件中提出问题。每个问题都可以分配一个或多个标签。

例如,可能会为第一次安装笔记本电脑的新员工提出问题,该笔记本电脑设置为John Smith"并贴上标签"笔记本电脑问题"和#34;新员工入职。"因此,对于给定的问题,可以有多个标签。

我正在尝试构建一个带有问题标题的分类器,并提供建议标签列表。我的主管要求我使用Naive Bayes算法执行此操作,这就是我正在尝试的。我正在使用scikit-learn。

首先,准确地说这是一个"多标签" scikit-learn文档(http://scikit-learn.org/stable/modules/multiclass.html)中描述的分类任务?这就是我的想法,但我并不完全理解" Multioutput-multiclass classification"所以我无法排除这种情况。同样,我预测每个样本的一个或多个类。

其次,Naive-Bayes(至少在scikit-learn中)看起来并不支持多标签。由于我(使用Naive-Bayes)卡住了(现在),我想我可以使用下面的方法来滚动我自己的多标签分类器。这看起来像是一种合理的方法吗?

  • 为每个类训练一个Naive-Bayes二元分类器(为每个样本转换训练数据,以便如果样本在其各个类中具有该类,则标签仅为1,否则为0)。
  • 然后,当我需要对样本进行预测时,我会使用每个二元分类器进行预测,而我的整体预测将是二进制分类器预测一个的标记。

最后,您能想到更好的方法吗?我的计划的巨大缺点是因为有大约2,000个标签,我需要创建2,000个分类器。这可能不是完全禁止的,但它并不完全理想。 Naive-bayes确实支持多类分类,所以我想知道是否有某种方法可以在单个分类器上进行破解(通过查看每个类生成的概率,如果它们存在)。

1 个答案:

答案 0 :(得分:2)

您建议的方法是有效的;它实际上是针对多标签分类问题而推广的一对一方法,它也被称为二元相关方法。由于您已在使用scikit-learn,因此您需要的功能已在sklearn.multiclass.OneVsRestClassifier module中实施。

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