朴素贝叶斯分类法 Navie Bayes:
1、相关基础概念
首先,先来看看几个基础定义:
-
联合概率:表示两个事件共同发生的概率。比如A与B的联合概率表示为P(A,B)(或者P(A∩B))
-
边缘概率(又称先验概率):边缘概率与联合概率相对应的,是某个事件发生的概率,而与其它事件无关。比如A的边缘概率表示为P(A),B的边缘概率表示为P(B)
边缘概率的求解:考虑所有条件下发生该事件的概率之和。(离散型随机变量直接加和,连续性随机变量对所有条件进行积分) -
条件概率(又称后验概率):事件A在另外一个事件B已经发生条件下的发生概率。条件概率表示为P(A|B),读作“在B条件下A的概率”
-
独立同分布:是指一组随机变量中每个变量的概率分布都相同(同分布的概念),且这些随机变量互相独立(独立的概念)。
同分布举例:一个骰子,每次抛骰子得到任意点数的概率都是六分之一,每一个点数(也就是每个变量)都服从六分之一的分布;
独立性举例:一个骰子,每次抛骰子得到几就是几,这是独立的,每次之间都没有关系;如果要得到两次之和大于7,那么第一次和第二次抛就不独立,因为第二次抛的结果和第一次相关。
2、贝叶斯公式
贝叶斯公式由联合概率得到的:
(1)
P
(
X
,
Y
)
=
P
(
Y
)
P
(
X
∣
Y
)
=
P
(
X
)
P
(
Y
∣
X
)
P(X,Y) = P(Y)P(X|Y)=P(X)P(Y|X) \tag1
P(X,Y)=P(Y)P(X∣Y)=P(X)P(Y∣X)(1)
后两项公式经过变形可以得到贝叶斯公式:
(2)
P
(
Y
∣
X
)
=
P
(
X
∣
Y
)
P
(
Y
)
P
(
X
)
P(Y|X)=\frac{P(X|Y)P(Y)}{P(X)} \tag2
P(Y∣X)=P(X)P(X∣Y)P(Y)(2)
在机器学习中,利用贝叶斯分类,可以把
y
y
y 看做类别,把
x
x
x 看做这个类别的特征,那么公式可以写成:
(3)
P
(
类
别
∣
特
征
)
=
P
(
类
别
)
P
(
特
征
∣
类
别
)
P
(
特
征
)
P(类别|特征)=\frac{P(类别)P(特征|类别)}{P(特征)} \tag3
P(类别∣特征)=P(特征)P(类别)P(特征∣类别)(3)
给一个新样本,根据已知的特征,我们能预测出来这个样本属于这个类别的概率。
3、朴素贝叶斯
朴素贝叶斯就在于“朴素”二字,朴素的含义就是独立性假设,假设每一个类别的特征都是独立的。
举一个朴素贝叶斯的例子进行说明:
下表是观察到的结果,现在有一个男孩子,他的特征是,不帅,性格不好,身高矮,不上进,那么女孩子会不会嫁给他?我们智人一看就知道,肯定不嫁,但是把数据给计算机,它是怎么来计算?
下面就来看一看计算机是如何使用朴素贝叶斯方法判定女孩子会不会嫁?
对于计算机来说,它会判断女孩子嫁和不嫁的概率,概率更大一些的那个就是最终答案。
计算机已知属性(不帅,性格不好,身高矮,不上进)来求解属于每个类别(嫁、不嫁)的概率,使用贝叶斯公式:
p
(
嫁
∣
不
帅
、
性
格
不
好
、
身
高
矮
、
不
上
进
)
=
p
(
不
帅
、
性
格
不
好
、
身
高
矮
、
不
上
进
∣
嫁
)
∗
p
(
嫁
)
p
(
不
帅
、
性
格
不
好
、
身
高
矮
、
不
上
进
)
p(嫁|不帅、性格不好、身高矮、不上进) = \frac{p(不帅、性格不好、身高矮、不上进|嫁)*p(嫁)}{p(不帅、性格不好、身高矮、不上进)}
p(嫁∣不帅、性格不好、身高矮、不上进)=p(不帅、性格不好、身高矮、不上进)p(不帅、性格不好、身高矮、不上进∣嫁)∗p(嫁)
p
(
不
嫁
∣
不
帅
、
性
格
不
好
、
身
高
矮
、
不
上
进
)
=
p
(
不
帅
、
性
格
不
好
、
身
高
矮
、
不
上
进
∣
不
嫁
)
∗
p
(
不
嫁
)
p
(
不
帅
、
性
格
不
好
、
身
高
矮
、
不
上
进
)
p(不嫁|不帅、性格不好、身高矮、不上进) = \frac{p(不帅、性格不好、身高矮、不上进|不嫁)*p(不嫁)}{p(不帅、性格不好、身高矮、不上进)}
p(不嫁∣不帅、性格不好、身高矮、不上进)=p(不帅、性格不好、身高矮、不上进)p(不帅、性格不好、身高矮、不上进∣不嫁)∗p(不嫁)
我们先看第一个公式,只要求出来p(不帅、性格不好、身高矮、不上进|嫁)、p(嫁)、p(不帅、性格不好、身高矮、不上进)这三个概率,比一下,就知道了左边的概率,
p(不帅、性格不好、身高矮、不上进|嫁)的概率该怎么统计呢?
1、第一个问题,我们这个例子有4个特征,其中帅包括{帅,不帅},性格包括{不好,好},身高包括{高,矮},上进包括{不上进,上进},这些特征之间都是有相互关联的,那么四个特征的联合概率分布总共是4维空间,总个数为2*2*2*2=8个,每个特征,我们再加两个中间level,不然不方便后面比较,每个特征变成:帅包括{帅,一般帅,一般,不帅},性格包括{不好,一般,一般好,好},身高包括{高,一般高,一般,矮},上进包括{不上进,一般,上进},这样子,特征总个数就是4*4*4*3=192个。
特征空间里有192个特征,计算机还可以计算,而且现实生活中,不只是这么简单,每一个特征的取值非常之多,特征会是指数级数量,计算机通过统计来估计概率值,变得几乎不可能。
2、第二个问题,统计p(不帅、性格不好、身高矮、不上进|嫁)的概率,我们就需要在嫁的条件下,在特征空间中去找四种特征全满足分别是不帅,性格不好,身高矮,不上进的人的个数,这样的话,要想预测准确,就得多收集数据,才能统计到同时符合这四个特征的人,否则由于数据的稀疏性,很容易统计到0的情况。 这样是不合适的。
所以就有了朴素一词,朴素的意思就是独立的意思,朴素贝叶斯算法是假设各个特征之间相互独立,这样把问题简单化,机器学习就是把复杂问题简单化,简单问题我们认真做^ _ ^
假设各个特征之间独立,那么上面的公式就可以写成:
p
(
嫁
∣
不
帅
、
性
格
不
好
、
身
高
矮
、
不
上
进
)
=
p
(
不
帅
∣
嫁
)
∗
p
(
性
格
不
好
∣
嫁
)
∗
p
(
身
高
矮
∣
嫁
)
∗
p
(
不
上
进
∣
嫁
)
∗
p
(
嫁
)
p
(
不
帅
)
∗
p
(
性
格
不
好
)
∗
p
(
身
高
矮
)
∗
p
(
不
上
进
)
p(嫁|不帅、性格不好、身高矮、不上进) = \frac{p(不帅|嫁)*p(性格不好|嫁)*p(身高矮|嫁)*p(不上进|嫁)*p(嫁)}{p(不帅)*p(性格不好)*p(身高矮)*p(不上进)}
p(嫁∣不帅、性格不好、身高矮、不上进)=p(不帅)∗p(性格不好)∗p(身高矮)∗p(不上进)p(不帅∣嫁)∗p(性格不好∣嫁)∗p(身高矮∣嫁)∗p(不上进∣嫁)∗p(嫁)
p ( 不 嫁 ∣ 不 帅 、 性 格 不 好 、 身 高 矮 、 不 上 进 ) = p ( 不 帅 ∣ 不 嫁 ) ∗ p ( 性 格 不 好 ∣ 不 嫁 ) ∗ p ( 身 高 矮 ∣ 不 嫁 ) ∗ p ( 不 上 进 ∣ 不 嫁 ) ∗ p ( 不 嫁 ) p ( 不 帅 ) ∗ p ( 性 格 不 好 ) ∗ p ( 身 高 矮 ) ∗ p ( 不 上 进 ) p(不嫁|不帅、性格不好、身高矮、不上进) = \frac{p(不帅|不嫁)*p(性格不好|不嫁)*p(身高矮|不嫁)*p(不上进|不嫁)*p(不嫁)}{p(不帅)*p(性格不好)*p(身高矮)*p(不上进)} p(不嫁∣不帅、性格不好、身高矮、不上进)=p(不帅)∗p(性格不好)∗p(身高矮)∗p(不上进)p(不帅∣不嫁)∗p(性格不好∣不嫁)∗p(身高矮∣不嫁)∗p(不上进∣不嫁)∗p(不嫁)
通过上面的公式,我们计算嫁和不嫁的概率,可以看出分母都是一样的,我们只要计算分子就可以了,分子中的概率有两类,一类是先验概率 P ( 嫁 ) 、 P ( 不 嫁 ) P(嫁)、P(不嫁) P(嫁)、P(不嫁),另一类是条件概率 p ( 不 帅 ∣ 嫁 ) . . . p(不帅|嫁)... p(不帅∣嫁)...,很多的条件概率,只要计算这两类概率就可以了。
- 先验概率计算方法,以
P
(
嫁
)
P(嫁)
P(嫁)为例子
P ( 嫁 ) = N ( 选 择 嫁 的 样 本 量 ) N ( 总 样 本 量 ) = 6 12 P(嫁)=\frac{N(选择嫁的样本量)}{N(总样本量)}=\frac{6}{12} P(嫁)=N(总样本量)N(选择嫁的样本量)=126 - 条件概率计算方法,以
p
(
不
帅
∣
嫁
)
p(不帅|嫁)
p(不帅∣嫁)为例子
p ( 不 帅 ∣ 嫁 ) = N ( 选 择 嫁 的 样 本 里 , 特 征 是 不 帅 的 样 本 量 ) N ( 选 择 嫁 的 样 本 量 ) = 1 6 p(不帅|嫁)=\frac{N(选择嫁的样本里,特征是不帅的样本量)}{N(选择嫁的样本量)}=\frac{1}{6} p(不帅∣嫁)=N(选择嫁的样本量)N(选择嫁的样本里,特征是不帅的样本量)=61
其他的条件概率也用同样方法计算,就可以算出来后验概率,看哪个大,哪个就是最终的结果
========================================= 举例子结束=================================================
3.1 朴素贝叶斯基本公式:
朴素贝叶斯是由数据学习联合概率分布
P
(
X
,
Y
)
P(X,Y)
P(X,Y),首先学习先验概率
P
(
Y
)
P(Y)
P(Y),
(5)
P
(
Y
=
C
k
)
,
k
=
1
,
2
,
3...
,
K
P(Y=C_k), \qquad k=1,2,3...,K\tag5
P(Y=Ck),k=1,2,3...,K(5)
再学习条件概率
P
(
X
∣
Y
)
P(X|Y)
P(X∣Y),
(6)
P
(
X
=
x
∣
Y
=
y
)
=
P
(
X
1
=
x
1
,
.
.
.
,
X
l
=
x
l
∣
Y
=
C
k
)
,
k
=
1
,
2
,
3...
,
K
P(X=x|Y=y)=P(X_1=x_1, ...,X_l=x_l|Y=C_k), \quad k=1,2,3...,K\tag6
P(X=x∣Y=y)=P(X1=x1,...,Xl=xl∣Y=Ck),k=1,2,3...,K(6)
条件概率分布
P
(
X
=
x
∣
Y
=
y
)
P(X=x|Y=y)
P(X=x∣Y=y)有指数级数量的参数,假设
x
x
x可取的特征个数有
S
j
S_j
Sj个,
j
=
1
,
2
,
.
.
.
,
l
j=1,2,...,l
j=1,2,...,l,
Y
Y
Y可取值有
K
K
K个,那么参数个数为
K
∏
j
=
1
l
S
j
K\prod\limits_{j=1}^lS_j
Kj=1∏lSj个。
由贝叶斯公式(2)得到后验概率
P
(
Y
∣
X
)
P(Y|X)
P(Y∣X)。朴素贝叶斯是典型的生成模型;当然,隐形马尔可夫模型也是典型的生成模型。那么上面是否嫁人的例子就有2*4*4*4*3=384个参数。因此朴素贝叶斯做了独立性假设:
(7)
P
(
X
=
x
∣
Y
=
y
)
=
P
(
X
1
=
x
1
,
.
.
.
,
X
l
=
x
l
∣
Y
=
C
k
)
=
∏
j
=
1
l
P
(
X
j
=
x
j
∣
Y
=
C
k
)
\begin{aligned} P(X=x|Y=y) & =P(X_1=x_1, ...,X_l=x_l|Y=C_k) \\ &=\prod\limits_{j=1}^lP(X_j=x_j|Y=C_k) \end{aligned}\tag7
P(X=x∣Y=y)=P(X1=x1,...,Xl=xl∣Y=Ck)=j=1∏lP(Xj=xj∣Y=Ck)(7)
独立性假设使得贝叶斯法变得简单,但有时会牺牲一定的分类准确率。
综上,朴素贝叶斯分类器的表示形式:
(8)
y
=
f
(
x
)
=
a
r
g
max
c
k
P
(
Y
=
C
k
∣
X
=
x
)
=
a
r
g
max
c
k
P
(
Y
=
C
K
)
∏
j
P
(
X
j
=
x
j
∣
Y
=
C
k
)
∑
k
P
(
Y
=
C
K
)
∏
j
P
(
X
j
=
x
j
∣
Y
=
C
k
)
y=f(x)=arg \max \limits_{c_k} P(Y=C_k|X=x)=arg \max \limits_{c_k} \frac{P(Y=C_K)\ \prod\limits_{j}P(X_j=x_j|Y=C_k)}{\sum \limits_kP(Y=C_K)\ \prod\limits_{j}P(X_j=x_j|Y=C_k)} \tag8
y=f(x)=argckmaxP(Y=Ck∣X=x)=argckmaxk∑P(Y=CK) j∏P(Xj=xj∣Y=Ck)P(Y=CK) j∏P(Xj=xj∣Y=Ck)(8)
当特征为为X时,计算所有类别的条件概率,选取条件概率最大的类别作为待分类的类别。由于上公式的分母对每个类别都是一样的,因此计算时可以不考虑分母,即
(5) y = f ( x ) = a r g max c k P ( Y = C k ∣ X = x ) = a r g max c k P ( Y = C K ) ∏ j P ( X j = x j ∣ Y = C k ) y=f(x)=arg \max \limits_{c_k} P(Y=C_k|X=x)=arg \max \limits_{c_k}\ P(Y=C_K)\prod\limits_{j}P(X_j=x_j|Y=C_k) \tag5 y=f(x)=argckmaxP(Y=Ck∣X=x)=argckmax P(Y=CK)j∏P(Xj=xj∣Y=Ck)(5)
朴素贝叶斯的朴素体现在其对各个条件的独立性假设上,加上独立假设后,大大减少了参数假设空间。
3.2 朴素贝叶斯损失函数:
朴素贝叶斯将预测样本分到后验概率最大的类中,这等价于期望风险最小化,选择0-1损失函数:
L
(
Y
,
f
(
X
)
)
=
{
1
,
Y
≠
f
(
X
)
0
,
Y
=
f
(
X
)
L(Y,f(X))= \begin{cases} 1 , & Y \neq f(X) \\ 0, & Y = f(X) \end{cases}
L(Y,f(X))={1,0,Y̸=f(X)Y=f(X)
根据期望风险最小化,得到的就是后验概率最大化,这就是朴素贝叶斯采用的原理。
3.3 朴素贝叶斯求解
朴素贝叶斯算法中,算法学习的就是先验概率 P ( Y = C K ) P(Y=C_K) P(Y=CK)和条件概率 P ( X j = x j ∣ Y = C k ) P(X_j=x_j|Y=C_k) P(Xj=xj∣Y=Ck),使用极大似然估计可得:
- 先验概率
P ( Y = C K ) = ∑ i = 1 n I ( y ( i ) = C k ) N P(Y=C_K)=\frac{\sum \limits_{i=1}^{n}I(y^{(i)}=C_k)}{N} P(Y=CK)=Ni=1∑nI(y(i)=Ck) - 条件概率
P ( X j = x j ∣ Y = C k ) = ∑ i = 1 n I ( x j ( i ) = a j l , y ( i ) = C k ) ∑ i = 1 n I ( y ( i ) = C k ) P(X_j=x_j|Y=C_k)=\frac{\sum \limits_{i=1}^{n}I(x_j^{(i)}=a_{jl}, y^{(i)}=C_k)}{\sum \limits_{i=1}^{n}I(y^{(i)}=C_k)} P(Xj=xj∣Y=Ck)=i=1∑nI(y(i)=Ck)i=1∑nI(xj(i)=ajl,y(i)=Ck)
以上两个公式中: j = 1 , 2 , . . . n ; l = 1 , 2 , . . . S j ; k = 1 , 2 , . . . K j=1,2,...n;\quad l=1,2,...S_j; \quad k=1,2,...K j=1,2,...n;l=1,2,...Sj;k=1,2,...K
x j ( i ) x_j^{(i)} xj(i)表示第 i i i个样本的第 j j j个特征; a j l a_{jl} ajl表示第 j j j个特征可能取的第 l l l个数值, I I I为指示函数,其实这个公式写起来复杂,实际意思很简单,聪明如你,可以参考举例子那个公式。
4、朴素贝叶斯优点和缺点
优点:
- 朴素贝叶斯模型发源于古典数学理论,有着坚实的数学基础,以及稳定的分类效率;
- 对小规模的数据表现很好;
- 能处理多分类任务,适合增量式训练;
- 对缺失数据不太敏感,算法也比较简单,常用于文本分类
缺点:
- 需要计算先验概率;
- 分类决策存在错误率;
- 对输入数据的表达形式很敏感
5、朴素贝叶斯类型
(1) 高斯分布朴素贝叶斯 Gaussian naive Bayes
对于那些样本的特征向量是连续型的,我们可以假定每一类的数据都是服从高斯分布的,这时候分类问题可以使用高斯分布的朴素贝叶斯贝叶斯分类器。
假设在训练数据集中,有一个特征
x
x
x,计算该特征在每一个类别中的平均值
μ
\mu
μ 和标准差
σ
\sigma
σ;用
μ
k
\mu_k
μk 和
σ
k
\sigma_k
σk 表示每一个类别
C
k
C_k
Ck 的平均值和标准差;那么对于我们观测到的训练数据的一个特征
v
v
v ,那么他的特征值在每一个类别
C
k
C_k
Ck 的条件概率是
p
(
x
=
v
∣
C
k
)
p(x=v|C_k)
p(x=v∣Ck),根据高斯分布的概率密度函数可以得到他的概率公式:
p
(
x
=
v
∣
C
k
)
=
1
2
π
σ
k
2
e
−
1
2
(
v
−
μ
k
σ
k
)
2
p(x=v|C_k)=\frac{1}{\sqrt{2\pi\sigma_k^2}}e^{-\frac{1}{2}(\frac{v-\mu_k}{\sigma_k})^2}
p(x=v∣Ck)=2πσk21e−21(σkv−μk)2
计算出来了条件概率,然后再计算类别概率
p
(
C
k
)
=
n
k
n
p(C_k)=\frac{n_k}{n}
p(Ck)=nnk,因为分母边缘概率
p
(
x
=
v
)
p(x=v)
p(x=v) 都是一样的,可以不用计算,因此就可以求出来该特征属于每一个类别的概率
p
(
C
k
∣
x
=
v
)
p(C_k|x=v)
p(Ck∣x=v),最大值即为预测的结果。
可以参考wiki具体的一个例子:根据身高,体重,脚掌宽度预测性别。
(2)多项式分布朴素贝叶斯 Multinomial naive Bayes
在多项式模型中,每一个样本(一个特征向量),它表示了某一个事件出现的频数。并且这些特征的具体取值都是离散的,且服从多项式分布的。主要用于文本分类中,例如文本分类中,一个样本有100个词,这个样本的特征向量就是每一个词出现的频数,当然比如词库有n个词【n也可以是所有样本词类别的并集个数】,这个特征向量的维度就是n,没出现的单词频数就是0。
假设一个特征向量
x
=
(
x
1
,
x
2
,
⋯
 
,
x
n
)
x=(x_1,x_2,\cdots,x_n)
x=(x1,x2,⋯,xn) 其中
x
i
x_i
xi 表示事件
i
i
i 在这个特征向量里出现的次数,那么条件概率(也称作似然函数)可以表示为:
p
(
x
∣
C
k
)
=
(
∑
i
x
i
)
!
∏
i
x
i
!
∏
i
p
k
i
x
i
p(x|C_k)=\frac{(\sum_i x_i)!}{\prod_ix_i!}\prod_ip_{ki}^{x_i}
p(x∣Ck)=∏ixi!(∑ixi)!i∏pkixi
那么,再计算出先验概率,就可以计算出后验概率了。
多项式分布的朴素贝叶斯后验概率取log对数之后,也就是一个线性分类器,看到了下面的公式,就知道了它和Logistic 回归的关系了吧,具体关系可见 wiki
多项式分布朴素贝叶斯主要用于文本分类问题;
具体可以参看wiki 关于文本分类的 例子
(3)伯努利分布朴素贝叶斯 Bernoulli naive Bayes
对于多元伯努利分布的朴素贝叶斯模型,每个样本的特征取值都是booleans类型的值,或者是0-1,也是主要用于文本分类,适用于较短的文本分类。在文本分类中,与多项式分布不同的是:伯努利模型中记录的是每一个单词是否出现,而不是频数,出现的概率是
p
i
p_i
pi,没出现的概率是
1
−
p
i
1-p_i
1−pi,那么条件概率的计算公式是:
p
(
x
∣
C
k
)
=
∏
i
=
1
n
p
k
i
x
i
(
1
−
p
k
i
)
1
−
x
i
p(x|C_k) = \prod \limits_{i=1}^{n} p_{ki}^{x_i}(1- p_{ki})^{1-x_i}
p(x∣Ck)=i=1∏npkixi(1−pki)1−xi
公式中, n n n 表示特征数量, p k i p_{ki} pki 表示在 k k k 类别中, x i x_i xi (取值只能是0和1)属性出现的概率值。
0概率问题:smoothing
对于多项式分布和伯努利分布模型中:训练数据中,对于某一个分类,如果有一个特征没有出现,那么这个特征值的概率就会是0,这个时候一般会用到平滑算法,统计学中叫做 additive smoothing,也叫做 Laplace smoothing 和 Lidstone smoothing:
假设训练数据集有
N
N
N个样本,
x
=
(
x
1
,
x
2
,
.
.
.
,
x
k
)
x=(x_1,x_2,...,x_k)
x=(x1,x2,...,xk)是样本的特征值,那么平滑的概率估计是:
θ
i
^
=
x
i
+
α
N
+
α
k
\hat{\theta_i} = \frac{x_i + \alpha}{N+\alpha k}
θi^=N+αkxi+α
其中
N
N
N是样本量,
k
k
k是样本特征个数,伪计数(pseudocount)
α
\alpha
α 则是平滑参数,且
α
>
0
\alpha > 0
α>0,如果
α
=
1
\alpha = 1
α=1 也叫做 add-one smoothing。也有说法:
α
=
1
\alpha = 1
α=1 叫做 Laplace smoothing,
α
<
1
\alpha <1
α<1 叫做 Lidstone smoothing。在实际应用中,可能会选择更小的
α
\alpha
α 值。
多项式分布和伯努利分布的差异:
- 对于特征值的概率的应该用不一样,从两个条件概率公式可以看出来,多项式模型只计算这个类别中出现的特征的概率,而伯努利模型中计算所有特征值的概率,如果没出现就乘以 1 − p i 1-p_i 1−pi。
- 多项式分布以单词为粒度,伯努利分布以文档为粒度。这篇文章讲述的很详细: http://www.cnblogs.com/alan-blog-TsingHua/p/10018810.html
- 无论看wikipide 还是 scikit learn 我都没看到 单词和文档粒度问题,后续再继续学习来确定吧。