机器学习——概率分类(一)朴素贝叶斯模型
1、概率分类问题概述
1.1 问题描述
概率分类问题是指假设存在一个类别的集合 C = { c 1 , c 2 , c 3 . . . c n } C=\{c_1,c_2,c_3...c_n\} C={c1,c2,c3...cn},其中一共包含n个分类,现在假设存在一个样本X,我们已经知道该样本X属于C中的某一个分类。以二分类问题为例,我们的目标是通过统计计算,判断X属于分类c1还是分类c2。
1.2 计算过程
我们对之前的问题描述进行形式化描述有:
目
标
:
判
断
P
(
c
1
∣
X
)
与
P
(
c
2
∣
X
)
之
间
的
大
小
目标:判断P(c_1|X)与P(c_2|X)之间的大小
目标:判断P(c1∣X)与P(c2∣X)之间的大小
判
断
过
程
:
P
(
c
1
∣
X
)
>
P
(
c
2
∣
X
)
,
则
X
∈
c
1
,
否
则
属
于
c
2
判断过程:P(c_1|X) > P(c_2|X),则X∈c_1,否则属于c_2
判断过程:P(c1∣X)>P(c2∣X),则X∈c1,否则属于c2
根据上面的形式化描述,我们可以知道,我们需要计算的就是
P
(
c
1
∣
X
)
,
P
(
c
2
∣
X
)
P(c_1|X),P(c_2|X)
P(c1∣X),P(c2∣X)。但是,我们很难直接通过样本来计算出其属于某个分类的条件概率。所以,我们引入贝叶斯公式,有:
P
(
c
1
∣
X
)
=
P
(
c
1
,
X
)
P
(
X
)
=
P
(
X
∣
c
1
)
P
(
c
1
)
P
(
X
)
P(c_1|X)=\frac{P(c_1,X)}{P(X)}=\frac{P(X|c_1)P(c_1)}{P(X)}
P(c1∣X)=P(X)P(c1,X)=P(X)P(X∣c1)P(c1)
P
(
c
2
∣
X
)
=
P
(
c
2
,
X
)
P
(
X
)
=
P
(
X
∣
c
2
)
P
(
c
2
)
P
(
X
)
P(c_2|X)=\frac{P(c_2,X)}{P(X)}=\frac{P(X|c_2)P(c_2)}{P(X)}
P(c2∣X)=P(X)P(c2,X)=P(X)P(X∣c2)P(c2)
则可以将比较过程转换为:
判
断
:
P
(
X
∣
c
1
)
P
(
c
1
)
P
(
X
)
与
P
(
X
∣
c
2
)
P
(
c
2
)
P
(
X
)
之
间
的
大
小
判断:\frac{P(X|c_1)P(c_1)}{P(X)}与\frac{P(X|c_2)P(c_2)}{P(X)}之间的大小
判断:P(X)P(X∣c1)P(c1)与P(X)P(X∣c2)P(c2)之间的大小
通过上式,可以发现分母是相同的,所以我们可以仅仅比较分子的大小,也就是:
判
断
:
P
(
X
∣
c
1
)
P
(
c
1
)
与
P
(
X
∣
c
2
)
P
(
c
2
)
之
间
的
大
小
判断:P(X|c_1)P(c_1)与P(X|c_2)P(c_2)之间的大小
判断:P(X∣c1)P(c1)与P(X∣c2)P(c2)之间的大小
1.3 相关概念
根据计算过程,我们确定了我们最终要计算的公式为:
P
(
X
∣
c
1
)
P
(
c
1
)
和
P
(
X
∣
c
2
)
P
(
c
2
)
P(X|c_1)P(c_1)和P(X|c_2)P(c_2)
P(X∣c1)P(c1)和P(X∣c2)P(c2)
先验概率:其中 P ( c 1 ) 和 P ( c 2 ) P(c_1)和P(c_2) P(c1)和P(c2)称为先验概率。所谓先验概率指的就是我们实现统计出来的概率,不需要在训练过程中进行再次计算的概率。在我们的例子中,就是我们可以在训练过程开始之前就得到在训练样本集合中属于分类 c i c_i ci的样本的个数与总样本的数量的比值。
先验概率的重要性:虽然先验概率是在训练之前就确定的,但是,其十分的重要,我们通过公式可以看出,如果在训练集合中的类别比例十分的不均匀的话。假设 P ( c 1 ) 远 远 大 于 P ( c 2 ) P(c_1)远远大于P(c_2) P(c1)远远大于P(c2)的情况下。如果我们计算出来的 P ( X ∣ c 2 ) > P ( X ∣ c 1 ) P(X|c_2)>P(X|c_1) P(X∣c2)>P(X∣c1),并且该X确实属于 c 2 c_2 c2类。但是由于先验概率的存在,可能导致最终的计算结果 P ( X ∣ c 1 ) P ( c 1 ) > P ( X ∣ c 2 ) P ( c 2 ) P(X|c_1)P(c_1)>P(X|c_2)P(c_2) P(X∣c1)P(c1)>P(X∣c2)P(c2),导致模型判断错误。
后验概率:所谓的后验概率,就是需要我们在训练的过程中进行统计的概率,在我们的例子中就是 P ( c 1 ) 和 P ( c 2 ) P(c_1)和P(c_2) P(c1)和P(c2)。也是说,我们在训练的过程中需要计算的就是X在 c 1 c_1 c1和 c 2 c_2 c2的后验概率。
1.4 计算目标
根据之前的描述,我们可以总结出,对于概率分类问题,我们最终的计算目标就是计算:
P
(
X
∣
C
i
)
P(X|C_i)
P(X∣Ci)
我们将这种计算问题称之为概率密度估计问题。
2、朴素贝叶斯模型
2.1 模型概述
对于概率密度估计问题,朴素贝叶斯模型是一种简单有效的计算模型。该模型是从贝叶斯公式演化而来。我们先给出基本的贝叶斯公式:
P
(
X
∣
C
)
=
P
(
X
,
C
)
P
(
C
)
P(X|C)=\frac{P(X,C)}{P(C)}
P(X∣C)=P(C)P(X,C)
对于我们之前提出的来的计算
P
(
c
1
∣
X
)
与
P
(
c
2
∣
X
)
P(c_1|X)与P(c_2|X)
P(c1∣X)与P(c2∣X),通过贝叶斯公式的转换之后变成计算:
P
(
X
∣
c
1
)
P
(
c
1
)
和
P
(
X
∣
c
2
)
P
(
c
2
)
P(X|c_1)P(c_1)和P(X|c_2)P(c_2)
P(X∣c1)P(c1)和P(X∣c2)P(c2)
假定,每一个训练样本的维度为K,也就是:
X
=
X
1
X
2
X
3
…
X
k
X= \begin{matrix} X_1 \\ X_2 \\ X_3 \\ …\\ X_k \end{matrix}
X=X1X2X3…Xk
带入到公式之中,对于
P
(
X
∣
c
1
)
和
P
(
X
∣
c
2
)
P(X|c_1)和P(X|c_2)
P(X∣c1)和P(X∣c2)的计算就变成了:
P
(
X
∣
c
1
)
=
P
(
X
1
,
X
2
,
.
.
.
X
k
∣
c
1
)
P(X|c_1)=P(X_1,X_2,...X_k|c_1)
P(X∣c1)=P(X1,X2,...Xk∣c1)
P
(
X
∣
c
2
)
=
P
(
X
1
,
X
2
,
.
.
.
X
k
∣
c
2
)
P(X|c_2)=P(X_1,X_2,...X_k|c_2)
P(X∣c2)=P(X1,X2,...Xk∣c2)
简单的总结一下,对于朴素贝叶斯模型,其核心的计算公式就是:
P
(
X
∣
c
i
)
P
(
c
i
)
=
P
(
X
1
,
X
2
,
.
.
.
X
k
∣
c
i
)
P
(
c
i
)
P(X|c_i)P(c_i)=P(X_1,X_2,...X_k|c_i)P(c_i)
P(X∣ci)P(ci)=P(X1,X2,...Xk∣ci)P(ci)
2.2 朴素贝叶斯规则
- 根据上面的计算公式,我们知道计算过程最终变成了X的各个属性值的集合
X
i
X_i
Xi在
c
1
和
c
2
c_1和c_2
c1和c2下的条件概率。跟进一步,我们只要假设任意的两个属性值
X
i
和
X
j
X_i和X_j
Xi和Xj之间是独立的。那么上述的计算公式可以进一步化简变成:
P ( X ∣ c 1 ) = P ( X 1 , X 2 , . . . X k ∣ c 1 ) = ∏ i = 1 k P ( X i ∣ c 1 ) P(X|c_1)=P(X_1,X_2,...X_k|c_1)=∏_{i=1}^kP(X_i|c_1) P(X∣c1)=P(X1,X2,...Xk∣c1)=i=1∏kP(Xi∣c1)
P ( X ∣ c 2 ) = P ( X 1 , X 2 , . . . X k ∣ c 1 ) = ∏ i = 1 k P ( X i ∣ c 2 ) P(X|c_2)=P(X_1,X_2,...X_k|c_1)=∏_{i=1}^kP(X_i|c_2) P(X∣c2)=P(X1,X2,...Xk∣c1)=i=1∏kP(Xi∣c2)
也就是说,我们从统计某一个属性值的集合的条件概率变成了分别统计各个属性值的条件概率。这种方式也就是朴素贝叶斯模型中的朴素。 - 第二点,在朴素贝爷模型中,要求的是各个属性的属性值是离散的。这一点的主要目的是为了便于统计。
简单的总结一下,朴素贝叶斯模型的计算的核心公式变成了:
P
(
X
∣
c
i
)
P
(
c
i
)
=
P
(
X
1
,
X
2
,
.
.
.
X
k
∣
c
1
)
=
P
(
c
i
)
∏
j
=
1
k
P
(
X
j
∣
c
i
)
P(X|c_i)P(c_i)=P(X_1,X_2,...X_k|c_1)=P(c_i)∏_{j=1}^kP(X_j|c_i)
P(X∣ci)P(ci)=P(X1,X2,...Xk∣c1)=P(ci)j=1∏kP(Xj∣ci)
2.3 举例说明
根据上面的描述,我们已经基本了解到了朴素贝叶斯模型的计算公式和前体条件。下面我们举一个简单情感分类的问题来对朴素贝叶斯模型进行应用。
问题描述:假设我们手里有某购物网站的好评和差评文本,我们的目标是训练出来一个模型,能够自动的对评论文本进行好评与差评的分类。
训练数据:某购物网站好评文本500份,差评文本500份(保证先验概率相近)。
训练输入:某一个相关的评论文本集合D,D中包含的是好评文本和差评文本X的集合。其中X是由k个词汇 X i , 0 < i < = k X_i,0<i<=k Xi,0<i<=k所构成,k的取值可以由我们自己来人为的设定,长度不够的进行补齐,长度过长的进行裁剪。
训练输出:各个词汇的在不同分类下的条件概率。
训练过程:首先,我们要明确的就是,对于一个样本X,其所包含的属性就是组成这个文本的词汇。则我们最终的统计目标就是计算各个词汇在各个分类中出现的条件概率。
- 形成词表,词表中包含的是整个训练集合中的所有词汇(没有重复)
- 计算所有的文本文本中,各个词汇在好评文本中出现的次数和在所有类别文本中出现的次数。
- 计算所有的文本文本中,各个词汇在差评文本中出现的次数和在所有类别文本中出现的次数。
- 形成各个词汇在不同分类下的条件概率统计。
测试过程:输入测试样本M,分布计算M中的各个词汇在不同分类下的条件概率,将不同分类对于的条件概率乘积进行比较,乘积较大的分类对应着M对应的分类。
注意:如果测试样本M中的某一个词汇Mi没有在训练集中的某个分类出现过,那么必然使得P(Mi|Ci)=0,这将导致条件概率的乘积和P(M|Ci)=0,这显然是不合理的。所有我们在设计模型的时候必须要考虑到这一情况,简单的处理方法是在计算条件概率P(Mi|Ci)的基础上,增加一个阈值,保证计算结果中不会出现0值。也就是说P(Mi|Ci)=>P(Mi|Ci)+ξ,其中0<i<=k