python --利用朴素贝叶斯进行文本分类
一,分类目标
寻找文本的某些特征,然后根据这些特征将文本归为某个类。
使用监督式机器学习方法对文本进行分类:首先假设已经有分好类的N篇文档:(d1,c1)、(d2,c2)、(d3,c3)……(dn,cn)
di表示第i篇文档,ci表示第i个类别。目标是:寻找一个分类器,这个分类器能够:当丢给它一篇新文档d,它就输出d (最有可能)属于哪个类别。
二、朴素贝叶斯分类器
朴素贝叶斯分类器是一个概率分类器。假设现有的类别C={c1,c2,……cm}。给定一篇文档d,文档d最有可能属于哪个类呢?这个问题用数学公式表示如下:
$P(Y,X) = P(Y|X)P(X)=P(X|Y)P(Y) $
其中P ( Y ) P(Y)P(Y)叫做先验概率,P ( Y ∣ X ) P(Y|X)P(Y∣X)叫做后验概率,P ( Y , X ) P(Y,X)P(Y,X)叫做联合概率。
在机器学习的视角下,我们把X XX理解成**“具有某特征”,把Y YY理解成“类别标签”(一般机器学习问题中都是X=>特征, Y=>结果对吧)。在最简单的二分类问题(是与否判定)下,我们将Y YY理解成“属于某类**”的标签。
三、jieba切词
jieba分词属于概率语言模型分词。概率语言模型分词的任务是:在全切分所得的所有结果中求某个切分方案S,使得P(S)最大。
jieba支持三种分词模式:
全模式,把句子中所有的可以成词的词语都扫描出来, 速度非常快,但是不能解决歧义;
精确模式,试图将句子最精确地切开,适合文本分析;
搜索引擎模式,在精确模式的基础上,对长词再次切分,提高召回率,适合用于搜索引擎分词。
jeiba分词过程:
生成全切分词图:根据trie树对句子进行全切分,并且生成一个邻接链表表示的词图(DAG),查词典形成切分词图的主体过程如下所示:
for(int i=0;i<len;){
boolean match = dict.getMatch(sentence, i,
wordMatch);//到词典中查询
if (match) {
// 已经匹配上
for (String word:wordMatch.values)
{
//把查询到的词作为边加入切分词图中
j = i+word.length();
g.addEdge(new CnToken(i, j, 10, word)<