《机器学习实战》学习总结(三)朴素贝叶斯在文本分类的应用

概述

本文采用的是词集模型。

词集模型:将每个单词出现与否作为一个特征,即忽略了单词出现的次数,从而将句子转化为单词向量后,该向量中只有01;对应的是词袋模型,将考虑单词出现的次数,从而得到的单词向量,除了01还有大于1的整数。

相关概念:

文档:是训练集合,包含了多个句子

句子:对应一个词向量,向量的长度与词汇表的长度相同,元素为1代表对应位置词汇表中的单词出现,否则不出现

单词(词条):句子中的一个词,对应词向量中的一个元素

词汇表:包含了文档中所有可能出现的单词,但不重复。


从训练文本中计算条件概率p(x|c)和先验概率p(c)

说明:c即文本分类的取值,如正常邮件和垃圾邮件;x即某个单词

1、利用文档构建词汇表,假设长度为nn即文档不重复单词的个数

如下文档(假设每行为一个句子的单词的切分),构成的词汇表为【one, two, three, four,five, six,seven

单词

单词

单词

单词

Lable

one

two

three

four

0

two

three

four

five

0

three

four

five

six

1

four

five

six

seven

1

上面假设了每个句子一样长,实际上不一定相同,但并不影响这个理解过程

2、根据构建的词汇表将文档转化为训练矩阵m*n,其中m为句子的个数,n为词向量的长度

上述文档转化后的词向量为:

1 1 1 1 00 0

0 1 1 1 10 0

0 0 1 1 11 0

0 0 0 1 11 1

3、计算概率(假设为二分类)

如下为标量:

    p(c=0)=0.5   label0的句子的个数/句子的总数m

    p(c=1)=0.5   label1的句子的个数/句子的总数m

    p(wi|c=0) 词向量中第i个单词在Label=0的句子中出现的概率:从训练矩阵中将Label=0的行向量都取    出来,将所有行的第i列加起来作为分子,将所有元素都加起来(其实就是一堆1相加)作为分母,相除可得

p(one|c=0)=1/8 p(two|c=0)=1/4 p(three|c=0)=1/4    p(four|c=0)=1/4     p(five|c=0)=1/8 p(six|c=0)=0  p(seven|c=0)=0 

    p(wi|c=1)  词向量中第i个单词在Label=1的句子中出现的概率:从训练矩阵中将Label=1的行向量都取出来,将所有行的第i列加起来作为分子,将所有元素都加起来(其实就是一堆1相加)作为分母,相除可得

p(one|c=1)=0 p(two|c=1)=0 p(three|c=1)=1/8   p(four|c=1)=1/4     p(five|c=1)=1/4 p(six|c=1)=1/4  p(seven|c=1)=1/8

如下为向量:

p0V=p(w1|c=0),p(w2|c=0),p(w3|c=0),…,p(wn|c=0)=[1/8  1/4  1/4 1/4  1/8  0  0 ]

P1V=p(w1|c=1),p(w2|c=1),p(w3|c=1),…,p(wn|c=1)=[0  0  1/8 1/4  1/4  1/4 1/8 ]


对一个句子进行分类

先将该句子转化为词向量V

该句子为0类的概率:SumV.dot(p0V)),即将V中每个元素与p0V中对应的每个元素相乘并求和

该句子为1类的概率:SumV.dot(p1V)),即将V中每个元素与p1V中对应的每个元素相乘并求和

比较两个概率值,哪个大则属于哪一类

 

假设有如下句子[one five tree two seven],转换为句子向量为[11 1 0 1 0 1]

(说明:这个模型是不考虑单词之间的关系的以及先后顺序的)

Pc=0=1/8*1+1/4*1+1/4*1*1/4*0+1/8*1+0*0+1*0=6/8

P(c=1) =  0 *1+ 0*1+  1/8*1+1/4*0 + 1/4*1+  1/4*0+ 1/8*1=4/8

所以该句子为0



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