朴素贝叶斯
朴素贝叶斯分类算法是基于两种假设的一种分类算法:
- 每一个特征同样重要
- 每一个特征之间相互独立
贝叶斯定理
P(B|A)=P(A|B)P(B)P(A)
证明:
条件概率公式
P(A|B)=P(AB)P(B)…式(1)
同理
P(B|A)=P(AB)P(A)…式(2)
联立可以得到
P(B|A)=P(A|B)P(B)P(A)
贝叶斯策略理论
设
P1(x)
表达
x
属于类别一的概率,
- 若
P1(x)>P2(x) ,那么属于类别一- 若 P1(x)<P2(x) ,那么属于类别二
但是贝叶斯决策论真正进行比较的是 P(c1|x) 和 P(c2|x) ;通过贝叶斯定理我们可以得到计算该条件概率的方法因此
- 若 P(c1|x)>P(c2|x) ,那么属于类别 c1
- 若 P(c1|x)<P(c2|x) ,那么属于类别 c2
贝叶斯分类流程
基于之前的理论我们正式定义一下朴素贝叶斯分类的流程:
设:- x={a1,a2,...am} 为一个待分类项, ai 为其特征属性,一共有 m 个
C={y1,y2,...,yn} 表示类别的集合- 计算 P(y1|x),P(y2|x),...,P(yn|x)
- 若 P(yk|x)=max{P(y1|x),P(y2|x),...,P(yn|x)} ,则 x∈yk
贝叶斯分类的关键在于求出 P(y1|x),P(y2|x),...,P(yn|x) ,这也是朴树贝叶斯算法的训练过程。
我们分别计算:
P(a1|y1),P(a2|y1),...,P(am|y1)
P(a1|y2),P(a2|y2),...,P(am|y2)
...
P(a1|yn),P(a2|yn),...,P(am|yn)
基于贝叶斯定理我们可以得到
P(yi|x)=P(x|yi)P(yi)P(x)
分母对于所有类别来说可以看成一个常数,因此我们只需考虑分子,基于先前的假设,所有特征独立可以得到
P(x|yi)=P(a1|yi)P(a2|yi)...P(am|yi)=Πmj=1P(aj|yi)
合并可以得到:
P(x|yi)P(yi)=P(yi)Πmj=1P(aj|yi)数据处理
若属性的取值为离散值我们很容易计算,就直接统计出训练样本中各个属性在每个样本中出现的频率就可以计算出 P(a|y) 。如果属性的取值为一个连续值的时候我们就要对其进行处理。
假定其值满足高斯分布:
p(xi|yj)=12π−−√σi,je−(x−μi,j)22σ2i,j
这样我们只用计算出训练样本中类别 yi 中特征 aj 的均值和标准差,带入上式即可。
在实践中我们常通过取对数的方式来将连乘转化为连加,以避免数值的下溢。
需要注意的是若某个属性值在训练集中没有与某个类同时出现过,则计算出来的概率值为0,则会将其他属性携带的信息给抹去,因此我们需要用到“拉普拉斯修正”,来进行平滑。
设 N 表示训练集D 中可能的类别数, Ni 表示第 i 个属性可能的取值数
P(c)=|Dc|+1|D|+N
P(xi|c)=|Dc,xi|+1|Dc|+Ni总结
优点:在数据较少的情况下仍然有效,可以处理多类别问题
缺点:对于输入数据的准备方式较为敏感
适用数据类型:标称型数据