因此,我尝试根据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     |
+--------------------------+---------+


也就是说,每个类每个文本有一个ROW ...然后使用是的,我可以训练朴素贝叶斯,然后使用“一对多”来确定哪些文本属于哪个标签。问题是,我可以用一种更优雅的方式来做到这一点吗(也就是说,训练数据看起来就像我提到的第一个示例一样)?

我发现的示例之一是http://blog.thedigitalgroup.com/rajendras/2015/05/28/supervised-learning-for-text-classification/

最佳答案

从概念上讲,有两种方法。


您将标签合并为合并的标签。然后,您将获得联合概率。主要缺点是组合爆炸,这意味着您还需要更多的训练数据
您为每个标签构建一个单独的NB模型。


与概率建模一样,问题始终是您是否假设标签是独立的。本着朴素贝叶斯的精神,独立性假设是很自然的。在这种情况下,2.将会是必经之路。如果独立性假设不合理,并且您担心组合爆炸,则可以使用标准的贝叶斯网络。如果您遵循某些假设,您的性能将不会受到影响。

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


您可以使用分层朴素贝叶斯模型。如果标签中有某种逻辑结构,则可以为这些类引入一个父变量。通常,如果两个标签同时出现,则您的值为tag1 / tag2。
基本思想可以扩展到您不是观察者的潜在变量。可以使用EM方案进行训练。这会稍微影响您的训练效果,因为您需要运行训练,但是多次迭代可能会为您带来最佳效果。


http://link.springer.com/article/10.1007%2Fs10994-006-6136-2#/page-1

关于r - 朴素贝叶斯和R的多类分类,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36323759/

10-12 17:24