朴素贝叶斯法是基于贝叶斯定理与特征条件独立假设的分类方法。
朴素贝叶斯法是一种直接衡量标签和特征之间的概率关系的有监督学习算法,是一种专注分类的算法。
朴素贝叶斯法实际上用到生产数据的机制,属于生成模型。
联合概率:"X取值为x" 和 "Y取值为y" 两个事件同时发生的概率,表示为
P(X=x, Y=y)
条件概率:在"X取值为x" 的前提下,"Y取值为y" 的概率,表示为
P(X=x|Y=y)
全概率:
P(X=x) = \sum_{k=1}^n P(X=x|Y=y_k)P(Y=y_k)
朴素贝叶斯法对条件概率分布做了条件独立性的假设。这是一个较强的假设:
\begin{equation}\begin{split} P(X=x|Y=y_k) &= P(X_1 = x_1,\cdots,X_n=x_n | Y=y_k) \\
&= \prod_{j=1}^n
P(X_j=x_j | Y=y_k)
\end{split}\end{equation}
条件独立假设是用于分类的特征在类确定的条件下都是条件独立的。这一假设使朴素贝叶斯法变得简单,但有时会牺牲一定的分类准确率。
朴素贝叶斯法分类时,对给定的输入
x ,通过学习到的模型计算后验概率分布
P(Y=y_k | X=x) ,将后验概率最大的类作为
x 的类输出。后验概率计算根据贝叶斯定理进行:
P(Y=y_k | X=x) = \frac{P(X=x|Y=y_k)P(Y=y_k)}{\sum_kP(X=x|Y=y_k)P(Y=y_k)}
将条件独立性假设以及全概率公式带入上面公式得到朴素贝叶斯分类的基本公式:
P(Y=y_k | X=x) = \frac{P(Y=y_k)\prod_j
P(X_j=x_j | Y=y_k)}{P(X=x)} ,\,\,\, k=1,2,\cdots,K
于是朴素贝叶斯器可表示为:
y=f(x)=arg \max_{c_k}\frac{P(Y=y_k)\prod_j
P(X_j=x_j | Y=y_k)}{P(X=x)}
因分母中对所有
c_k 都是相同的,则
y=f(x)=arg \max_{c_k}{P(Y=y_k)\prod_j
P(X_j=x_j | Y=y_k)}
朴素贝叶斯法所采用的原理为后验概率最大化准则:
f(x) = arg \max_{c_k} P(x_k | X=x)
如何得到上面的式子,可能有小伙伴们会有疑虑。下面我们慢慢道来。
对于二分类情况,我们可以有:
P(Y=1|X) = \frac{P(Y=1) \times \prod^n_{i=1}P(x_i|Y=1)}{P(X)}
P(Y=0|X) = \frac{P(Y=0) \times \prod^n_{i=1}P(x_i|Y=0)}{P(X)}
P(Y=1|X) + P(Y=0|X) = 1
该式中分母为
P(X) 为全概率,其计算难度随着特征数目的增多而增大,该如何解决本身是一个难题,所幸的是,我们可以在不计算其真实大小的情况下比较分子大小。下面来看看如何操作。
在分类的时候,我们选择
P(Y=1|X) 和
P(Y=0|X) 中较大的一个所对应的
Y 的取值,作为这个样本的分类。在比较两个类别的时候,两个概率计算的分母是一致的,因此我们可以不用计算分母,只考虑分子的大小。当我们分别计算出分子的大小之后,就可以通过让两个分子相加,来获得分母的值,以此来避免计算一个样本上所有特征下的概率
P(X)。这个过程,称之为"最大后验估计"(MAP)
。在最大后验估计中,我们只需要求解分子,主要是求解一个样本下每个特征取值下的概率
P(x_i | Y=y_i),再求连乘便能够获得相应的概率。
朴素贝叶斯的参数估计
极大似然估计
朴素贝叶斯器中,学习意味着估计
P(Y=y_k) 和
P(X_j=x_j | Y=y_k)f(x)=arg \max_{c_k}{P(Y=y_k)\prod_j
P(X_j=x_j | Y=y_k)}
可以应用极大似然估计计算相应的概率。
先验概率
P(Y=y_k) 的极大似然估计是
P(Y=y_k) = \frac{\sum_{i=1}^NI(y_i=c_k)}{N},\,\,k=1,2,\cdots,K
设第
j个特征
x_j可能取值的集合为
{a_{j1}, a_{j2}, \cdots, a_{jS_j}},条件概率
P(X_j=a_{jl} | Y=y_k) 的极大似然估计是
P(X_j=a_{jl} | Y=y_k) = \frac{\sum_{i=1}^NI(x_{ij}=a_{jl}, y_i=c_k)}{\sum_{i=1}^NI(y_i=c_k)}
k=1,2,\cdots,K; \,\,\, j=1,2,\cdots,n; \,\,\,\, l=1,2,\cdots,S_j
式中,
x_{ij} 是第
i 个样本的第
j 个特征;
a_{jl} 是第
j 个特征可能取的第
l 个值;
I为指示函数。
分类算法
- 先计算先验概率及条件概率
P(Y=y_k) = \frac{\sum_{i=1}^NI(y_i=c_k)}{N},\,\,k=1,2,\cdots,K
P(X_j=a_{jl} | Y=y_k) = \frac{\sum_{i=1}^NI(x_{ij}=a_{jl}, y_i=c_k)}{\sum_{i=1}^NI(y_i=c_k)}
k=1,2,\cdots,K; \,\,\, j=1,2,\cdots,n; \,\,\,\, l=1,2,\cdots,S_j
- 对于给定的实例
x=(x_1,x_2,\cdots,x_n)^T,计算
P(Y=y_k)\prod_j
P(X_j=x_j | Y=y_k), \,\,\,\,k=1,2,\cdots,K;
- 确定实例
x 的类
y = \max_{c_k}{P(Y=y_k)\prod_j
P(X_j=x_j | Y=y_k)}
算法实例
漂亮的南柯一小姐姐已到婚配的年纪,云朵君真是操碎了心,为其物色了一堆相亲对象,经过一轮轮选拔后,最终有两个小哥哥胜利脱颖而出。然后到底选择哪位小哥哥,难住了南柯一。为了帮助有选择困难症的南柯一小姐姐,云朵君抽样调查了15对小情侣,来帮助小姐姐做出最终的决择。
因为在众多评判标准中,南柯一小姐姐最看重的前两项分别为长相与财富值两项指标,为了方便,将长相和财富值分别用
\{1, 2, 3\} 和
\{S, M, L\} 三个等级来表示。标签
Y 用 1 为嫁, 0 为不嫁来表示。
X_1 长相
X_2 财富值
Y 11S021M031M141S151S062S072M082M192L1102L1113L1123M1133M1143L1153L0
根据算法步骤计算如下
P(Y=1) = \frac9{15},\,P(Y=0)=\frac6{15}
P(X_1=1|Y=1)=\frac29,\,\,\, P(X_1=2|Y=1)=\frac39,\,\,\,P(X_1=3|Y=1)=\frac49
P(X_2=S|Y=1)=\frac19,\,\,\, P(X_2=M|Y=1)=\frac49,\,\,\,P(X_2=L|Y=1)=\frac49
P(X_1=1|Y=0)=\frac36,\,\,\, P(X_1=2|Y=0)=\frac26,\,\,\,P(X_1=3|Y=0)=\frac16
P(X_2=S|Y=0)=\frac36,\,\,\, P(X_2=M|Y=0)=\frac26,\,\,\,P(X_2=L|Y=0)=\frac16
x=(2, S)P(嫁) = P(Y=1)P(X_1=2|Y=1)P(X_2=S|Y=1)=\frac{9}{15} \cdot \frac39 \cdot \frac19=\frac1{45}
P(不嫁)=P(Y=0)P(X_1=2|Y=0)P(X_2=S|Y=0)=\frac{6}{15} \cdot \frac26 \cdot \frac36=\frac1{15}
因为
P(不嫁) > P(嫁) 所以结果
y=0 即1号小哥哥很遗憾地被淘汰了。
x=(1, L)P(嫁) = P(Y=1)P(X_1=1|Y=1)P(X_2=L|Y=1) = \frac{9}{15} \cdot \frac29 \cdot \frac49=\frac8{405}
P(不嫁)=P(Y=0)P(X_1=1|Y=0)P(X_2=L|Y=0)=\frac{6}{15} \cdot \frac36 \cdot \frac16=\frac1{30}
因为
P(不嫁) > P(嫁) 所以结果
y=0 即2号小哥哥也被淘汰了。看来小姐姐要孤独终老了。
贝叶斯估计
用极大似然估计可能会出现所要估计的概率值为0的情况,这会使得分类产生偏差。
因此在随机变量各个取值的频数上赋予一个正数
{\lambda}>0 ,则条件概率的贝叶斯估计为
P_{\lambda}(X_j=a_{jl} | Y=y_k) = \frac{\sum_{i=1}^NI(x_{ij}=a_{jl}, y_i=c_k) + {\lambda}}{\sum_{i=1}^NI(y_i=c_k) + S_j{\lambda}}
{\lambda}=0时为极大似然估计
{\lambda}=1时为拉普拉斯平滑
先验概率的贝叶斯估计是
P_{\lambda}(Y=y_k) = \frac{\sum_{i=1}^NI(y_i=c_k)+{\lambda}}{N+K{\lambda}},\,\,k=1,2,\cdots,K
朴素贝叶斯对连续变量的概率估计
要处理连续型变量,可以有两种方法。
第一种是把连续型变量分成个箱,把连续型强行变成分类型变量。分箱后,将每个箱中的均值
\bar{x}_i 当作一个特征
X_i 上的取值,然后我们计算箱
j 中
Y=1 所占的比例,就是
P(x_i|Y=1)。这个过程的主要问题是,箱子不能太大也不能太小,如果箱子太大,就失去了分箱的基本意义,如果箱子太小,可能每个箱子里就没有足够的样本来帮助计算
P(x_i|Y),因此必须要适当地衡量分箱效果。
第二种更为常见,可以直接通过概率论中来计算连续型变量的概率分布。在分类型变量的情况 中,比如掷骰子的情况,我们有且仅有六种可能的结果1~6,并且每种结果的可能性为1/6。此时每个基本的随机事件发生的概率都是相等的,所以可以使用1/N来表示有N个基本随机事件可以发生的情况。
当特征为连续型时,随机取到某一个事件发生的概率就为0。
P(x_i|Y) = \lim_{N\to\infty} \frac1N=0
而随机到某个区间中事件发生的概率就为
P(x\in [a,b])= \frac{m}{N}
而在概率论中来计算连续型变量的概率分布时,使用的是概率密度曲线(probability density function,PDF),即计算某个区间内事情发生的概率就是计算概率密度曲线某段下的面积。
一条曲线下的面积,就是这条曲线所代表的函数的积分。如果定义曲线可以用函数
f(x) 来表示的话,整条曲线下的面积就是:
\int_{-\infty}^\infty f(x)dx
其中
dx 是
f(x) 在
x 上的微分。在某些特定的
f(x) 下可以证明,上述积分等于1。即总面积是1,这说明一个连续型特征的取值取到某个区间
[x_i,x_i+\epsilon] 之内的概率就为这个区间上概率密度曲线下的面积,所以我们的特征
X_i 在区间
[x_i,x_i+\epsilon] 中取值的概率可以表示为:
P(x\in [x_i,x_i+\epsilon]) = \int_{x_i}^{x_i+\epsilon} f(x)dx \\
\approx f(x_i) \times \epsilon
可以将常量
\epsilon 抵消掉,因此就将求解连续型变量下某个点取值的概率问题,转化成了求解一个函数
f(x) 在点
x_i 上的取值的问题。
在实际问题中,通常会假设
f(x) 满足高斯分布,伯努利分布或多项式分布等等。这些分布对应着不同的贝叶斯算法,计算
f(x) 不同,但本质都是相同的。每个
f(x) 都对应着一系列需要去估计的参数,因此在贝叶斯中fit
过程其实是在估计对应分布的参数,predict
过程是在该参数下的分布中去进行概率预测。
总结
分类器特征
- 一种基于概率统计的分类方法,在条件独立假设的基础上使用贝叶斯定理构建算法,能够通过提供 后验概率估计 来量化预测中的不确定性的概率分布模型。
- 把目标类视为能导致数据实例生产的因素,朴素贝叶斯分类器也是 生成类模型 。
- 使用朴素贝叶斯假设,即使在给定类别标签的条件下,属性也可以很容易地计算高维设置中的类条件概率,常用于文本分类。
- 对孤立噪声和不相关属性具有鲁棒性。
- 通过计算其条件概率估计时忽略每个属性的缺失值,来处理训练集的缺失值。
- 相关属性会降低其性能
贝叶斯定理
P(Y|X) = \frac{P(X|Y)P(Y)}{P(X)}
P(Y|X) 与
P(X|Y) 之间的关系。
P(Y|X) 是给定属性
X 的数据实例中观察到类别标签
Y 的概率。
P(X|Y),测量从属于
Y 类的实例分布中观察到
X 的可能性。
P(Y) 独立于观察到的属性值。先验概率捕获了关于类别分布的先验知识。
X 的类条件概率可以被分解为类条件概率的乘积:(给定类别标签
Y ,属性
X_i 是相互独立的)
P(X|Y) = \prod_{i=1}^dP(X_i|Y)
P(x)对于每个
Y都是一样的,所以朴素贝叶斯方程:
P(Y|X)\propto P(Y)\prod_{i=1}^dP(X_i|Y)
P(Y)作为后验概率的估计,通过不断增加更多的属性
X,可以不断细化后验概率
生成类模型 从数据中学习特征和标签的联合概率分布,而 判别模型 则学习条件概率分布。
求解步骤
P(x_i|y),i=1,...,M,t=0,1和
P(y),y=0,1 , 拟合的方法就是直接从样本计算对应频率;
P(x,y)=P(x_1|y)P(x_2|y)⋅⋅⋅P(x_M|y)P(y)得出联合概率分布。
P(y|x)=\frac{P(y,x)}{P(y=0,x)+P(y=1,x)}得出后验概率,通过后验概率进行分类。
注:本文部分内容参考李航老师的统计学习方法。