在看贝叶斯算法的相关内容时,你一定被突如其来的数学概念搞得头昏脑涨。比如极大似然估计(Maximum likelihood estimation ),极大后验概率估计(Maximum a posteriori estimation),先验概率(Prior probability),后验概率(Posteriori probability)等。所以后面我就本着先学会用,再谈概念的路线来进行。
1. 朴素贝叶斯算法
先说结论: 朴素贝叶斯就是用贝叶斯公式外加“朴素”的条件来求解样本所属类别的概率
1.1 理解朴素贝叶斯
先不予证明的给出条件概率公式,以及贝叶斯定理(公式)
设输入空间 ⊆Rn ,为 n 维向量的集合,输出空间为类标记 ={c1,c2,...,cm} .输入为特征向量 x∈ ,输出为类标记 y∈ , X 是定义在输入空间 上的随机向量, Y 是定义在输出空间 上的随机变量。也就是说 X 是一个 m×n 的矩阵, y 为类标签。训练集:
则有:
又因为朴素贝叶斯对条件概率分布做了条件独立性假设,即有 P(AB|D)=P(A|D)P(B|D) ,而这也是“朴素”一词的由来,因此公式 (1.4) 可写成如下形式:
由贝叶斯公式 (1.2) 可知:
根据公式 (1.6) 我们可以计算出任一样本 xi 属于类别 ck 的概率,选择其中概率最大者便可作为其分类的类标。但我们发现, (1.6) 中,对于每个样本的计算都有相同的分母,因此可以略去。则再代入公式 (1.5) ,可化简为:
注: y=argmaxck 的含义是,取使得y最大时的 ck 的值
说了这么多,可能还是云里雾里的,举个例子就明白了:
试由下表的训练集学习一个朴素贝叶斯分类器,并确定 x=(2,S)T 的类标记 y 。表中 X(1),X(2) 为特征,取值集合分别为 A1={1,2,3},A2={S,M,L},Y 为类标记, Y∈C={1,0}
易知:
以上的计算过程,就是用训练集训练好一个模型的参数,下面进行预测。
对于给定的 x=(2,S)T :
于是我们可以知道,样本 x=(2,S)T 属于 y=0 .
1.2 概念解释
先验概率: 所谓先验概率指的就是根据以往经验得出来的概率;
例如,可以通过西瓜的颜色,敲的声音来判断是否成熟;因为你已经有了通过颜色和声音来判断的“经验”,不管这个经验是你自己学习的还是别人告诉你的。又如在上面的例子中,在拿到一个新样本的时候,事先上面也不做,我们就可以通过训练集这一历史数据来得出 P(Y=0)=615,P(Y=1)=915 ,因为这是我们通过已有的经验得到的;最后举个例子,办公室失窃了,理论上每个人都可能是小偷;但我们可以根据对每个人的了解,人品分析得出一个可能性,比如张三偷的可能性为20%,李四偷的可能性为30%,而这就被称之为先验概率,是通过历史经验得来的。
后验概率:所谓后验概率指的就是贝叶斯定理(公式)求解的结果;
例如,上面说的办公室失窃,我们可以通过先验概率知道,张三偷的可能性为20%,李四偷的可能性为30%,但事实是多少呢?那就得通过贝叶斯公式来进行计算了。
极大似然概率估计:所谓极大似然概率估计,就是求解满足某个样本最有可能出现时的概率以及此时的参数值。详见
1.3 求解步骤
输入:
训练数据 T={(x1,y1),(x2,y2),...,(xm,ym)} ,其中 xi=(x(1)i,x(2)i,...,x(n)i)T , x(j)i 是第 i 个样本的第 j 维特征, x(j)i∈{aj1,aj2,...,ajSj} , ajl 是第 j 维特征可能取得第 l 个值, j=1,2,...,n;l=1,2,...,Sj;yi∈{c1,c2,...,ck} , Sj 表示第j为特征可取值个数;
输出:实例 x 的分类
(1)用极大似然估计计算先验概率及条件概率:
(2)对于给定的实例 x=(x(1),x(2),...,x(n))T
2. 贝叶斯估计
从上面我们可以算是大致了解了朴素贝叶斯的过程,但是有一个不能忽略的问题就是:在训练集不充分的情况下,缺少某个维度的条件概率时,(例如,如果 P(X(1)=1|Y=1) 为0的话)那么在预测的时候,将会产生很大的错差。解决这个问题的办法就是在各个估计中加入平滑项,即贝叶斯估计。
式中 λ≥0 .当 λ=0 时,就是极大似然估计;当 λ=1 时,称为拉普拉斯平滑(Laplace smoothing),这也是常用的做法。
我们将上面的例子用拉普拉斯平滑( λ=1 )再来计算一次。在计算之前我们知道,此时 K 为类别数2, Sj 表示第 j 个维度可能取值的个数,即 S1=3,S2=3
易知:
以上的计算过程,就是用训练集训练好一个模型的参数,下面进行预测。
对于给定的 x=(2,S)T :
于是我们可以知道,样本 x=(2,S)T 属于 y=0 .
3. 概念辨析
对于不同的书,对于一些算法或算法行为有着不同的称谓,有的概念名称甚至连原书作者也拿捏不准,这也导致我们在初学翻阅各种资料时候发现一会儿又多了这个概念,一会儿又多了那个概念,及其痛苦。但是名称不重要,重要的是我们知道所指代的具体东西就行。下面就整理出笔者在学习中遇到过的各种“叫法”,仅供参考。
所有的算法都称之为贝叶斯分类器,朴素贝叶斯有三种叫法,加入平滑项后叫贝叶斯估计
4.示例
示例见此处
参考