关于朴素贝叶斯这个算法,我个人认为是贝叶斯学派的一个代表性算法。尤其是在机器学习领域中,众多常见算法里面,贝叶斯相关的并不多。但是因为看过一部分《模式识别与机器学习》这本书,所以对贝叶斯是很感兴趣的,而且虽然频率学派更占主流,但是我觉得贝叶斯的这种思想是很值得深入学习的。
说到《模式识别与机器学习》这本书,首先最大的感受就是很难,非常理论!但是看过一些之后就会发现实际上概率论这个学科真的就是三个概念撑起来的:期望、方差和最大似然。然后书里面的很多机器学习算法都加上了贝叶斯的成分,总之看过之后就觉得公式推导真的很精致~~~
OK,回到朴素贝叶斯!首先明确这是个分类算法,而且是生成式算法,同样的LDA(隐狄利克雷分布)也是生成式模型。朴素贝叶斯主要应用于文本领域,虽然贝叶斯学派不占主流,但是朴素贝叶斯的效果确实是很不错的!
1.贝叶斯理论简单回顾
在概率论的整个数学体系中,首先公认的奠基石就是两大定理:大数定律和中心极限定理;而概率论的所有公式推导及结论的论证都是来自于三个概念:期望、方差和似然。那么同样的,我觉得贝叶斯理论的核心就两个公式:贝叶斯公式和全概率公式:
贝叶斯公式:
全概率公式:
其中, ∑kP(Yk)=1 ∑ k P ( Y k ) = 1
当然啦,概率论的核心公式之一:条件概率公式也是很重要的.
条件概率公式:
在贝叶斯的理论中有先验概率和后验概率这两个概念:
先验概率:事情还没有发生,要求这件事情发生的可能性的大小叫先验概率。
后验概率:事情已经发生,要求这件事发生的原因是由某个因素引起的可能性的大小叫后验概率。说白了,后验概率=先验概率+数据。
2.朴素贝叶斯的模型
因为是分类模型,所以假设我们的数据是
(x(1)1,x(1)2,...,x(1)n,y1),(x(2)1,x(2)2,...,x(2)n,y2),(x(m)1,...,x(m)2,...,x(m)n,ym)
(
x
1
(
1
)
,
x
2
(
1
)
,
.
.
.
,
x
n
(
1
)
,
y
1
)
,
(
x
1
(
2
)
,
x
2
(
2
)
,
.
.
.
,
x
n
(
2
)
,
y
2
)
,
(
x
1
(
m
)
,
.
.
.
,
x
2
(
m
)
,
.
.
.
,
x
n
(
m
)
,
y
m
)
,也就是我们有m个样本,每个样本对应n个特征,并且输出有K个类别,定义为
C1,C2,...,CK
C
1
,
C
2
,
.
.
.
,
C
K
.
因为我们知道,朴素贝叶斯是生成模型,也就是说朴素贝叶斯通过训练数据集学习联合概率分布
P(X,Y)
P
(
X
,
Y
)
。那么就要学习先验概率分布和条件概率分布。其中,先验概率分布为:
条件概率分布为:
这样的话,理论上就能得出P(X,Y)。但是因为所需要的参数实在是太多了,所以朴素贝叶斯对条件概率分布进行了类条件独立性的假设:用于分类的特征在类确定的条件下都是条件独立的。注意:朴素贝叶斯的“朴素”就是指的这个,当然,朴素就是naive,个人觉得翻译成简单更贴切~~~
那么,经过类条件独立性的假设之后,我们的条件概率分布变为:
通过这种强假设,我们的分布就被明显的简化了。当然因为放弃了很多特征之间的关联,所以会牺牲预测的准确性。
上面是生成过程中的 P(X,Y) P ( X , Y ) 的学习,接下来我们要来讨论对预测结果的推断过程。朴素贝叶斯在做分类的时候,采用的策略是后验概率最大化。也就是说,对于一个要预测的类别 Cresult使P(Y=Ck∣X=Xtest) C r e s u l t 使 P ( Y = C k ∣ X = X t e s t ) 最大化的类别,即:
因为对于所有的类比计算,所以上式的分母都是一样的,因此公式简化为:
然后应用类条件假设可以简化为:
3.参数估计
主要讨论求
P(Y=Ck)
P
(
Y
=
C
k
)
和
P(Xj=Xtestj∣Y=Ck)
P
(
X
j
=
X
j
t
e
s
t
∣
Y
=
C
k
)
。当然,针对
P(Y=Ck)
P
(
Y
=
C
k
)
很明显,直接就是数据中
Ck
C
k
出现的次数除以样本总数
m
m
。而对于《统计学习方法》中给出了极大似然估计和贝叶斯估计(也就是应用了拉普拉斯平滑)两种方法来进行参数的估计。综合其他的参考资料,可以根据样本的特征状态分为3种状态。
第一种:
Xj
X
j
的值是离散的,那么就可以假设
Xj
X
j
服从多项式分布,这样可以得到
P(Xj=Xtestj∣Y=Ck)
P
(
X
j
=
X
j
t
e
s
t
∣
Y
=
C
k
)
是样本类别
Ck
C
k
中
Xtestj
X
j
t
e
s
t
出现的概率。即:
其中 mk m k 为样本类别 Ck C k 出现的次数, mktest m k t e s t 为类别为 Ck C k 的样本中,第 j j 维特征出现的次数。此时,我们在最后计算的时候因为所有的样本特征对应的估计值是连乘的形式,所以如果某些样本的特征没有出现过,会导致最后总的概率为0.那么此时可以引入拉普拉斯平滑来避免这个问题,即:
其中, λ λ 是大于0的数,常取1。
第二种:如果我们的 Xj X j 是非常稀疏的离散值,也就是说特征出现的概率很低。这时可以假设 Xj X j 服从伯努利分布。即:特征 Xj X j 出现就记为1,不出现记为0.那么我们就可以只关注 Xj X j 是否出现,而不用去计数。这样得到的就是:
其中 Xtestj X j t e s t 的取值为0或1。
第三种:如果 Xj X j 是连续值,那么假设 Xj X j 的先验分布服从正态分布,也就是在样本类别 Ck C k 中, Xk X k 的值服从正态分布。那么:
其中的均值和方差就是根据样本数据计算就可以。
4.朴素贝叶斯的优缺点
优点:
- 从计算和推导卡伊看出来,没有复杂的求导和矩阵运算,所以效率很高。
- 来源于古典数学理论,有稳定的分类效率。
- 对小规模的数据表现很好,能处理多个分类任务,适合增量或训练,尤其是数据量超出内存时,可以一批批的去训练。
- 对于缺失数据不敏感,算法也比较简单,常用与文本分类。
缺点:
- 对输入数据的表达形式很敏感,比如连续型和离散型数据的假设分布就很不同。
- 因为通过先验和数据来决定后验的概率决定分类的,所以分类存在一定的错误率。
- 因为需要先验概率,所以对于先验概率的假设很重要,可能因为先验概率模型的选择而导致分类效果不佳。
因为本身做出的比较强的类条件假设,导致忽略了所有特征之间的内在联系。那么当数据的特征之间关联性强的时候,会造成信息损失过多而分类效果不好。