Naive Bayes和R的多类分类

时间:2016-03-31 03:46:06

标签: r machine-learning text-classification naivebayes

所以我试图根据Naive Bayes的文本对文档进行分类。每个文档可能属于1到n个类别(在博客文章中将其视为标记)。

我目前的方法是为R提供一个看起来像这样的csv

+-------------------------+---------+-------+-------+
|    TEXT TO CLASSIFY     | Tag 1   | Tag 2 | Tag 3 |
+-------------------------+---------+-------+-------+
| Some text goes here     | Yes     | No    | No    |
+-------------------------+---------+-------+-------+
| Some other text here    | No      | Yes   | Yes   |
+-------------------------+---------+-------+-------+
| More text goes here     | Yes     | No    | Yes   |
+-------------------------+---------+-------+-------+

当然,期望的行为是让输入看起来像

Some new text to classify

输出如

+------+------+-------+
| Tag 1| Tag 2| Tag 3 |
+------+------+-------+
| 0.12 | 0.75 | 0.65  |
+------+------+-------+

然后根据某个阈值,确定给定文本是否属于标签1,2,3。

现在的问题是,在我发现的教程中,看起来输入应该更像

+--------------------------+---------+
|    TEXT TO CLASSIFY      | Class   |
+--------------------------+---------+
| Some other text here     | No      |
+--------------------------+---------+
| Some other text here     | Yes     |
+--------------------------+---------+
| Some other text here     | Yes     |
+--------------------------+---------+

也就是说,每个班级每个文本的行数...然后使用是,我可以训练朴素的贝叶斯,然后使用one-vs-all来确定哪些文本属于哪个标签。问题是,我能以更优雅的方式做到这一点(也就是说,训练数据看起来就像我提到的第一个例子)?

我找到的一个例子是http://blog.thedigitalgroup.com/rajendras/2015/05/28/supervised-learning-for-text-classification/

1 个答案:

答案 0 :(得分:1)

概念上有两种方法。

  1. 您将标记组合为组合标记。然后你会得到联合概率。主要缺点是组合爆炸,这意味着您还需要更多的训练数据
  2. 您为每个标记构建单独的NB模型。
  3. 与概率建模一样,您是否认为您的标签是独立的是一个问题。根据Naive Bayes的精神,独立性假设是非常自然的。在那种情况下2.将是要走的路。如果独立性假设不合理并且您害怕组合爆炸,则可以使用标准贝叶斯网络。如果您保留某些假设,您的表现将不会受到影响。

    但是,您也可以采用混合方法。

    1. 您可以使用Hierarchical Naive Bayes模型。如果标签中有一些逻辑结构,您可以为类引入父变量。如果两个标签一起出现,基本上你有一个值tag1 / tag2。
    2. 基本思想可以扩展到你没有观察到的潜在变量。这可以使用EM方案进行训练。这会略微影响您的训练表现,因为您需要运行训练,多次迭代,但是,可能会给您最好的结果。
    3. http://link.springer.com/article/10.1007%2Fs10994-006-6136-2#/page-1