用朴素贝叶斯分类算法做中文文本分类

一. 朴素贝叶斯分类算法的原理

朴素贝叶斯分类器基于属性条件独立假设:对于已知类别,假设所有属性相互独立,也就是说,假设每个属性独立地对分类结果产生影响。
设待分类的样本属性集为 T T ,其中包含 n n 个属性,分别为 t1,t2,t3...tn t 1 , t 2 , t 3 . . . t n ,类别集合为 γ γ ,当前待判断类别为 c c ,基于属性条件独立性假设,可得:

P(c|T)=P(c)P(T|c)P(T)=P(c)P(T)i=1nP(ti|c) P ( c | T ) = P ( c ) P ( T | c ) P ( T ) = P ( c ) P ( T ) ∏ i = 1 n P ( t i | c )

因为我们的目标是在当前的属性集 T T 下,找到一个尽可能正确的类别,也就是说,使得后验概率 P(c|T) P ( c | T ) 尽可能大。又因为对于所有类别来说 P(T) P ( T ) 相同,所以朴素贝叶斯分类器 hnb h n b 的计算公式如下:
hnb(T)=argmaxcγP(c)i=1nP(ti|c) h n b ( T ) = a r g m a x c ∈ γ P ( c ) ∏ i = 1 n P ( t i | c )

可以看到上面的公式 ni=1P(ti|c) ∏ i = 1 n P ( t i | c ) 0P(ti|c)1 0 ≤ P ( t i | c ) ≤ 1 ,连乘运算很容易得到一个双精度都难以表示的极小的数值,不利于计算。因此一般情况下对上面的公式两边取对数,得到如下公式:
log(hnb(T))=argmaxcγ(log(P(c))+i=1nlog(P(ti|c))) l o g ( h n b ( T ) ) = a r g m a x c ∈ γ ( l o g ( P ( c ) ) + ∑ i = 1 n l o g ( P ( t i | c ) ) )

另外 P(c) P ( c ) P(ti|c) P ( t i | c ) 的计算公式如下:
P(c)=|Dc||D| P ( c ) = | D c | | D |

P(ti|c)=|Dc,ti||Dc| P ( t i | c ) = | D c , t i | | D c |

其中,|D|表示训练语料库中包含的文档总数, |Dc| | D c | 表示训练语料库中类别 c c 包含的文档总数, |Dc,ti| | D c , t i | 表示训练语料库的类别 c c 中含有的特征词 ti t i 的文档总数,这些统计量都可以通过训练语料库分词后统计得到。

二. 中文分词

分词就是把一个句子或一篇文章切分成若干单独的词。这里实现的时候是通过Ansj中文分词工具包实现的。参考链接:https://github.com/NLPchina/ansj_seg

三. 去停用词

在文本分类中,停用词指类别特征很弱但出现次数很多的词。因为这些词会降低分类的效率甚至会降低分类的准确率,所以在对文本进行预处理时一般会把它们去掉。
这里用到的停用词表可以到网盘上下载:http://pan.baidu.com/s/1dEANJ8l

四. 实验数据

本次实验采用的实验数据是sogou文本分类语料库,下载链接为:http://www.sogou.com/labs/dl/c.html,完整版,这个链好像不在了。我把数据分享到网盘了,http://pan.baidu.com/s/1dE6WZYT

五. 实验代码

实验代码较长,不贴上来了,丢了链接:https://github.com/whai362/NaiveBayesianClassifier
用的时候要修改几个数据的绝对路径
1. 创建三个文件夹“data”,“preprocess_data”,“stop_words”
2. 把sogou文本分类语料库的数据拷贝到“data”下,如图所示:
用朴素贝叶斯分类算法做中文文本分类_第1张图片
3. 把停用词表拷贝到“stop_words”下
4. 修改工程文件中“src”下的“DataPreProcess.java”文件,修改下面三个目录常量,如图:
用朴素贝叶斯分类算法做中文文本分类_第2张图片

六. 实验结果

正在训练第1组训练集
正在测试第1组测试集
第1次实验的准确率为0.8083543722745008
正在训练第2组训练集
正在测试第2组测试集
第2次实验的准确率为0.8329125545099839
正在训练第3组训练集
正在测试第3组测试集
第3次实验的准确率为0.8519623594216204
正在训练第4组训练集
正在测试第4组测试集
第4次实验的准确率为0.8248795042460408
正在训练第5组训练集
正在测试第5组测试集
第5次实验的准确率为0.8253385356896947
正在训练第6组训练集
正在测试第6组测试集
第6次实验的准确率为0.7886160201973835
正在训练第7组训练集
正在测试第7组测试集
第7次实验的准确率为0.8214367684186367
正在训练第8组训练集
正在测试第8组测试集
第8次实验的准确率为0.82419095708056
正在训练第9组训练集
正在测试第9组测试集
第9次实验的准确率为0.7895340830846913
正在训练第10组训练集
正在测试第10组测试集
第10次实验的准确率为0.7830383819811537
acc: 0.8150263536904265

你可能感兴趣的:(机器学习)