基本原理
本文基于《机器学习实战》第四章:基于概率论的分类方法–朴素贝叶斯。
目标: 给定一条文本(text):“my dog has flea”,判断此文本是侮辱性的(Abusive)还是非侮辱性的(Non-Abusive)。
书中使用朴素贝叶斯进行分类:
01 先用已知样本训练贝叶斯分类器。
假定现在只有 c 0 c_0 c0和 c 1 c_1 c1两类text,且每类text都包含 f 0 f_0 f0… f n f_n fn种特征,则很容易统计出每个类对应的各个特征的概率,即 p ( f i ∣ c 0 ) p(f_i|c_0) p(fi∣c0)的值。下列表格以 c 0 c_0 c0类为例:
特征 | f 0 f_0 f0 | f 1 f_1 f1 | f 2 f_2 f2 | … | f n f_n fn |
---|---|---|---|---|---|
概率 | $p_(f_0 | c_0)$ | $p(f_1 | c_0)$ | $p(f_2 |
朴素贝叶斯理论假定每个特征之间是相互独立的,则:
p
(
t
e
x
t
∣
c
i
)
=
p
(
f
0
∣
c
i
)
p
(
f
1
∣
c
i
)
.
.
.
p
(
f
n
∣
c
i
)
i
∈
0
,
1
{ p(text|c_i)} = p(f_0|c_i)p(f_1|c_i)...p(f_n|c_i) \quad i \in{0,1}
p(text∣ci)=p(f0∣ci)p(f1∣ci)...p(fn∣ci)i∈0,1
p ( c i ) = 0.5 p(c_i) = 0.5 p(ci)=0.5
02 用未知数据测试
特征 | f 1 f_1 f1 | f 4 f_4 f4 | f 5 f_5 f5 |
---|---|---|---|
数量 | 1 | 1 | 1 |
已知需要测试的文本只包含三种特征,分别为: f 1 f_1 f1、 f 4 f_4 f4、 f 5 f_5 f5,且每个特征的数量都为1。
判断:该文本属于哪一类,即判断
p
(
c
0
∣
t
e
x
t
)
p(c_0|text)
p(c0∣text)与
p
(
c
1
∣
t
e
x
t
)
p(c_1|text)
p(c1∣text)的大小?
p
(
c
i
∣
t
e
x
t
)
=
a
r
g
m
a
x
p
(
t
e
x
t
∣
c
i
)
p
(
c
i
)
=
a
r
g
m
a
x
p
(
f
1
,
f
4
,
f
5
)
∣
c
i
)
p
(
c
i
)
=
a
r
g
m
a
x
p
(
f
1
∣
c
i
)
p
(
f
4
∣
c
i
)
p
(
f
5
∣
c
i
)
p
(
c
i
)
\begin{aligned} p(c_{i}|text)& = argmax \quad { p(text|c_i)p(c_i) } \\ & = argmax \quad { p(f_1,f_4,f_5)|c_i)p(c_i) } \\ & = argmax \quad {p(f_1|c_i)p(f_4|c_i)p(f_5|c_i)p(c_i)} \end{aligned}
p(ci∣text)=argmaxp(text∣ci)p(ci)=argmaxp(f1,f4,f5)∣ci)p(ci)=argmaxp(f1∣ci)p(f4∣ci)p(f5∣ci)p(ci)
如果:
p
(
c
0
∣
t
e
x
t
)
>
p
(
c
1
∣
t
e
x
t
)
p(c_0|text) > p(c_1|text)
p(c0∣text)>p(c1∣text),则属于
c
0
c_0
c0类;否则,属于
c
1
c_1
c1类。
贝叶斯分类需要求以下值:
1 在中 c i c_i ci类中,各个特征对应的概率,即 p ( f i ∣ c j ) p(f_i|c_j) p(fi∣cj);
2 c i c_i ci类的概率,即 p ( c i ) p(c_i) p(ci);
基本方法
01 创建文本列表
已知一些实验文本样本(sample),并且知道这些样本对应的标签(Label),其中label中0表示侮辱性文字,1表示非侮辱性文字。
<sample, label>
text1:<“my dalmation is so cute, I love him”, 0>
text2:<“stop posting stupid worthless garbage”, 1>
text3:<“mr licks ate my steak how to stop him”, 0>
……
接下来基于上述的实验样本,创建一个不包含重复单词的文本列表,称之为VocabList,其实就是所有特征单词的集合。即这个VocabList包含上述所有文本中的单词,且不重复。
VocabList = [ ‘cute’, ‘love’, ‘help’, ‘garbage’ , ‘quit’, ‘I’, ‘problems’, ‘is’, ‘park’, ……, ‘my’]
02 构建词向量,将文本变为数字
构建词向量基于第一步的text和VocabList,为方便说明,使用下面的简单例子进行阐述。
< text > = <“my cat is so cute”, 0>(0表示非侮辱性言论)
VocabList = [ ‘cute’, ‘love’, ‘help’, ‘garbage’ , ‘quit’, ‘I’, ‘problems’, ‘is’, ‘park’, ‘my’](为说明方便,VocabList 只设置了10个单词。)
方法:
1.先构建一个与VocabList 大小相同的向量
W
=
[
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
]
W= [0,0,0,0,0,0,0,0,0,0]
W=[0,0,0,0,0,0,0,0,0,0]。
2.从text中逐个取出单词,然后在VocabList遍历该单词,假设该单词出现在VocabList 的第5个位置,则向量W的第5个位置置1;如果没找到该单词,什么都不干。
按照上述方法,text构建的向量 W = [ 1 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 0 , 1 ] W= [1,0,0,0,0,0,0,1,0,1] W=[1,0,0,0,0,0,0,1,0,1],而这个向量中的0或者1,就是表示某个单词的有无,同一个单词重复了n次,那么向量里面对应的值就为n。
03 基于词向量,计算概率
已知各个特征之间是相互独立的,这是朴素贝叶斯的假设。
概率计算公式变为:
W
=
[
f
0
,
f
1
,
f
2
,
f
3
,
f
4
,
f
5
,
f
6
,
f
7
,
f
8
,
f
9
]
W= [f_0,f_1,f_2,f_3,f_4,f_5,f_6,f_7,f_8,f_9]
W=[f0,f1,f2,f3,f4,f5,f6,f7,f8,f9]
p ( c i ∣ W ) = p ( W ∣ c i ) p ( c i ) p ( W ) p(c_{i}|W) = \frac { p(W|c_i)p(c_i) }{p(W)} \qquad p(ci∣W)=p(W)p(W∣ci)p(ci)
p ( c i ∣ W ) = p ( f 0 , f 1 . . . f 9 ∣ c i ) p ( c i ) p ( W ) p(c_{i}|W) = \frac { p(f_0,f_1...f_9|c_i)p(c_i) }{p(W)} \qquad p(ci∣W)=p(W)p(f0,f1...f9∣ci)p(ci)
因为各特征之间是相互独立的,所以
p
(
W
∣
c
i
)
=
p
(
f
0
∣
c
i
)
(
f
1
∣
c
i
)
(
f
2
∣
c
i
)
.
.
.
(
f
9
∣
c
i
)
p(W|c_i) = p(f_0|c_i)(f_1|c_i)(f_2|c_i)...(f_9|c_i)
p(W∣ci)=p(f0∣ci)(f1∣ci)(f2∣ci)...(f9∣ci)。比较各
p
(
c
i
∣
W
)
p(c_{i}|W)
p(ci∣W)之间的大小只需要比较
p
(
W
∣
c
i
)
p
(
c
i
)
{ p(W|c_i)p(c_i) }
p(W∣ci)p(ci)乘积的大小,因为分母
p
(
W
)
p(W)
p(W)都是一样的。
p
(
W
∣
c
i
)
=
p
(
f
0
∣
c
i
)
(
f
1
∣
c
i
)
(
f
2
∣
c
i
)
.
.
.
(
f
9
∣
c
i
)
p(W|c_i) = p(f_0|c_i)(f_1|c_i)(f_2|c_i)...(f_9|c_i)
p(W∣ci)=p(f0∣ci)(f1∣ci)(f2∣ci)...(f9∣ci)
其中
p
(
f
0
∣
c
i
)
p(f_0|c_i)
p(f0∣ci)的意思是
f
0
f_0
f0所对应的单词在
c
i
c_i
ci类文档中的概率是多少?
p
(
f
i
∣
c
0
)
=
c
0
类
中
特
征
f
i
的
个
数
c
0
类
中
所
有
样
本
的
个
数
p(f_i|c_0) = \frac {c_0类中特征f_i的个数}{c_0类中所有样本的个数} \qquad
p(fi∣c0)=c0类中所有样本的个数c0类中特征fi的个数
还以下面两个词组为例:
< text > = <“my cat is so cute”, 0>(0表示非侮辱性言论)
VocabList = [ ‘cute’, ‘love’, ‘help’, ‘garbage’ , ‘quit’, ‘I’, ‘problems’, ‘is’, ‘park’, ‘my’]
text构建的词向量是: W = [ 1 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 0 , 1 ] W= [1,0,0,0,0,0,0,1,0,1] W=[1,0,0,0,0,0,0,1,0,1];
这个text属于非侮辱性言论,则text中的单词且又出现在VocabList 中则为 c 0 c_0 c0类,这里是’my’和’cute’。
单词cute是VocabList 中的一个特征,那么这个单词的概率是:
p
(
c
u
t
e
∣
c
0
)
=
1
2
p(cute|c_0) = \frac {1}{2} \qquad
p(cute∣c0)=21
这里只是为了简要说明,单词量很少,显得概率不合理。