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