基于R语言的文本挖掘——朴素贝叶斯分类器
Posted R语言中文社区
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于R语言的文本挖掘——朴素贝叶斯分类器相关的知识,希望对你有一定的参考价值。
文本分类的核心是18世纪的条件概率理论在20世纪的广泛运用。条件概率就是在已知一个事件的发生的前提下,另一个事件发生的概率。不难想象,数据并不是总体或待建模系统的唯一可用的信息资源。贝叶斯方法提供了一套将这些外部信息融入数据分析过程的原理和方法。这个过程先给出待分析数据集的概率分布。这个分布在给出时没有考虑样本数据,称之为先验分布。新的数据集将先验分布修正后得到后验分布。这个修正的桥梁就是贝叶斯定理。
贝叶斯定理为解决归纳--推理分类问题的统计方法提供了理论背景。首先解释贝叶斯定理的基本概念,在用这个定理解释朴素贝叶斯分类的过程。
设X是一个类标号未知的数据样本,H为某种假设:数据样本X属于某特定的类C。那么在给定观测数据样本X时,假设H成立的后验概率P(H|X)如何确定?相反,不管样本中的数据是什么,P(H)是任何样本的先验概率,而后验概率
P(H|X)比先验概率P(H)基于更多的信息。贝叶斯定理提供了一种由概率P(H)、
P(X)、P(X|H)计算后验概率的方法——贝叶斯公式:
P(H|X) = [ P(X|H) * P(H) ] / P(X)
下面介绍朴素贝叶斯分类的基本思想。假设有m个样本S = {S1 , S2 , S3 ,…, Sm },每个样本Si都表示一个n维向量 { x1 , x2 , x3 , … , xn }。xi的值分别对应样本属性A1, A2, A3, … , An。还有k个类C1,C2,C3,…,Ck,每个样属于其中一个类。另外给出一个样本X(它所属的类是未知的),可以用条件概率max(P(Ci|X))来预测X的所属的类,i = 1,2,3,…,k。由贝叶斯公式计算可得:
P(Ci|X) = [ P(X|Ci) * P(Ci) ] / P(X)
上式中对所有的类而言,P(X)都是常量,所以仅需要计算出P(X|Ci) * P(Ci) 的最大值,而类Ci的概率为:
P(Ci) = 类Ci的训练样本数量 / m
对于大量的数据集而言,概率P(X|Ci)的计算是极其复杂的,所以我们提出一种假设:各个属性之间是条件独立的。由这个假设出发,我们可以得到:
P(X|Ci) = P(x1|Ci) * P(x2|Ci) * … *P(xn|Ci)
上式中xt是样本X的属性值,概率P(xt|Ci)通过训练数据集估算。而正是基于这一假设,所以称之为“朴素”。
下面将基于R语言实现朴素贝叶斯分类器。这里的50个样本主要来自58同城上和黑名单手机号,利用RCurl包和XML包爬取的百度快照(篇幅限制这两个包的使用延后介绍),利用jiebaR包和tm包进行分词得到词频-文档矩阵,下面是R代码:
运行结果:
准确率:86.7%
这是一个简易的分类器,主要是演示贝叶斯分类器的思想和代码实现,还有很多改进的地方,比如,在设置先验概率时认为黑名单和58同城发布的概率相等,而实际情况是这两个概率并不相等,可以通过修改先验概率P值来改进效果;其次,这个模型的训练数据只有70个样本,样本量太少,因此训练集中会有很多词项遗漏,而分类器对此类词的处理方法是给他们赋一个很小的概率c,这也会影响最后的分类效果;
以上是关于基于R语言的文本挖掘——朴素贝叶斯分类器的主要内容,如果未能解决你的问题,请参考以下文章