读书笔记—Naive Bayes
依然是《统计学习方法》的读书笔记。
朴素贝叶斯是一种基于贝叶斯定理和特征之间条件独立(这是一个较强的条件)假设的分类模型。与KNN不同,它仅用于特征为标称型数据的分类(如果硬是要把连续型数据转换成离散作为特征。。也可以吧),是一个基于统计的概率模型。
1.模型描述
朴素贝叶斯有一个特征之间条件独立的假设,虽然这是一个较强的条件,但是在许多情况下都还是适用的。朴素贝叶斯的cost function用的是数据类别的后验概率,这个后验概率我们可以通过贝叶斯定理得到:
由于加了特征条件独立的假设, P(X⃗ |Y) 就可以简单地拆成 P(X⃗ |Y)=P(x1|Y)P(x2|Y)...P(xn|Y) 。而后面这一串连乘可以从训练数据中统计得到(平率估计概率)。而在这个后验概率公式中,其分母是一个归一化项而已,因此我们仅需要考虑分子即可。
这个模型一定程度上可以说是模型数据生成的过程(不过通过特征条件独立假设大大简化了生成的过程),因此被称之为生成模型(generative model)。
为了应用这个模型,我们要从训练集中得到的信息(即训练过程)是 P(X⃗ |Y) 、 P(Y) ,换句话说就是学到 X⃗ 和 Y 的联合概率分布
因此,得到了cost function,也就是后验概率分布后(这是一个离散分布),我们从直觉的角度想就是要最大化这个后验概率分布,即:
这样我们就估计出了特征为 X⃗ 的测试数据最可能属于的类别了。
从形式上看直接从似然函数 P(X⃗ |Y) 估计 Y 也是可以的,即统计出每个Y生成各个特征的概率(会形成一个矩阵),那么生成这个目标数据的似然函数即为
2.模型优化
(1)计算优化
在实际应用中,我们统计得到概率 P(X⃗ |Y) 和 P(Y) 后,不是直接将其相乘得到后验分布,而是计算
使用log值有一下两个优点:
1) log是单调增函数,不会改变原函数的单调性。当概率过小的时候,使用log值可以防止由于小数太小造成的计算机数据下溢问题(太接近0,被截断)。
2) 使用log将乘法转换成加法,可以提高计算机运行效率。
(2)数据平滑
当我们用极大似然估计得到概率值时,若出现了0概率,不论计算log还是直接计算后验概率,都会出现问题。比如
log(0)
就不能求;而后验计算时,若其中一项是0,那么由于后验是将所有概率相乘,也就变成0了,而事实是该似然值只是出现概率很低。所以需要对0概率进行平滑。
平滑的本质是在数据中加入一些伪计数(pseudo count),使统计时那些为0的项变成一个相对较小的非0项,但又保证整体概率分布基本不变。最常见的是在每个统计项上加入一个常数值,比如对于似然值:
其中 λ 是平滑系数; k=1,2,...,K 代表类别; j=1,2,...,N 代表训练集中的数据点; l=1,2,...,Si 代表特征i的可能取值; Xi=ail 表示测试集数据中的特征i取值为l; ∑Ni=1I(X(j)i=ajl|Yi=Ck) 是统计训练集中类别 Y=Ck ,特征 X 为
另外,对于先验 P(Y) ,也有类似的平滑: