机器学习初探(二)贝叶斯分类器
今天来学习一下贝叶斯分类器。谈到贝叶斯分类器就不得不提到贝叶斯学派与频率学派,关于两者一个直观的解释是:
- 频率学派强调频率的“自然属性”,认为应该使用事件在重复实验中发生的频率作为其发生的概率的估计。
- 贝叶斯学派不强调事件的“客观随机性”,认为仅仅是“观察者”不知道事件的结果。换句话说,贝叶斯学派认为:事件之所以有随机性仅仅是因为“观察者”的知识不完备,对于“知情者”来说,该事件其实不具备随机性。随机性的根源不在于事件,而在于“观察者”对于该事件的知识状态。
所以相比起把模型参数固定、注重样本的随机性的频率学派而言,贝叶斯学派将样本视为是固定的,把模型的参数视为关键。
无论是贝叶斯学派还是频率学派,一个无法避免的问题就是如何从已有的样本中获取信息并据此估计目标模型的参数。因此,在引入具体算法之前,我们先介绍一下两种参数估计方法:
极大似然估计(ML估计)
如果把模型描述成一个概率模型的话,一个自然的想法是希望得到的模型参数θ\thetaθ能够使得在训练集X~\tilde{X}X~作为输入时、模型输出的概率达到极大。这里就有一个似然函数的概念,它能够输出X~=(x1,...,xN)T\tilde{X}=\left ( x_{1},...,x_{N} \right )^{T}X~=(x1,...,xN)T在模型参数为θ\thetaθ下的概率:
p(X~∣θ)=∏i=1Np(xi∣θ)p\left ( \tilde{X}\mid \theta \right )=\prod_{i=1}^{N}p\left ( x_{i}\mid \theta \right )p(X~∣θ)=∏i=1Np(xi∣θ)
我们希望找到的θ^\hat{\theta }θ^,就是使得似然函数在X~\tilde{X}X~作为输入时达到极大的参数:
θ^=argmaxθp(X~∣θ)=argmaxθ∏i=1Np(xi∣θ)\hat{\theta }=argmax_{\theta }p\left ( \tilde{X}\mid \theta \right )=argmax_{\theta }\prod_{i=1}^{N}p\left ( x_{i}\mid \theta \right )θ^=argmaxθp(X~∣θ)=argmaxθ∏i=1Np(xi∣θ)
通常的做法是将似然函数取对数后再进行极大值的求解。极大似然估计视待估计参数为一个未知但固定的量,不考虑“观察者”的影响(亦即不考虑先验知识的影响),是传统的频率学派的做法。
极大后验概率估计(MAP估计)
MAP估计的核心思想,是将待估参数θ\thetaθ看成是一个随机变量,从而引入了极大似然估计力没有引入的、参数θ\thetaθ的先验分布。MAP估计θ^MAP\hat{\theta }_{MAP}θ^MAP的定义为:
θ^MAP=argmaxθp(θ∣X~)=argmaxθp(θ)∏i=1Np(xi∣θ)\hat{\theta }_{MAP}=argmax_{\theta }p\left ( \theta \mid \tilde{X} \right )=argmax_{\theta } p\left ( \theta \right )\prod_{i=1}^{N}p\left ( x_{i}\mid \theta \right )θ^MAP=argmaxθp(θ∣X~)=argmaxθp(θ)∏i=1Np(xi∣θ)
同样的,为了计算简洁,通常对上式取对数。
MAP估计的一个显著优势在于它可以引入所谓的“先验知识”,这正是贝叶斯学派的精髓。当然这个优势同时也伴随着劣势:它要求我们对模型参数有相对较好的认知,否则会相当大地影响到结果的合理性。
朴素贝叶斯
MultinomialNB(离散型朴素贝叶斯分类器)
在介绍了这么多的理论知识后,我们现在正式引入一个具体的机器学习算法——朴素贝叶斯。“朴素”二字对应着“独立性假设”这一朴素的假设,“贝叶斯”则对应着“后验概率最大化”这一贝叶斯学派的思想。
离散型朴素贝叶斯算法
-
输入:训练数据集D={(x1,y1),...,(xN,yN)}D=\left \{ \left ( x_{1},y_{1} \right ),...,\left ( x_{N},y_{N} \right ) \right \}D={(x1,y1),...,(xN,yN)}
-
过程(利用ML估计导出模型的具体参数)
-
(1)计算先验概率p(y=ck)p\left ( y=c_{k} \right )p(y=ck)的极大似然估计:
p^(y=ck)=∑i=1NI(yi=ck)N,k=1,2,...,K\hat{p}\left ( y=c_{k} \right )=\frac{\sum_{i=1}^{N}I\left ( y_{i}=c_{k} \right )}{N},k=1,2,...,Kp^(y=ck)=N∑i=1NI(yi=ck),k=1,2,...,K -
(2)计算条件概率p(Xj=ajl∣y=ck)p\left ( X^{j}=a_{jl}\mid y=c_{k} \right )p(Xj=ajl∣y=ck)的极大似然估计(设每一个单独输入的n维向量xix_{i}xi的第j维特征x(j)x^{\left ( j \right )}x(j)可能的取值集合为{aj1,...,ajsj}\left \{ a_{j1},...,a_{js_{j}} \right \}{aj1,...,ajsj}):
p^(X(j)=ajl∣y=ck)=∑i=1NI(xi(j)=ajl,yi=ck)∑i=1NI(yi=ck)\hat{p}\left ( X^{(j)}=a_{jl}\mid y=c_{k} \right )=\frac{\sum_{i=1}^{N}I\left ( x_{i}^{(j)}=a_{jl},y_{i}=c_{k} \right )}{\sum_{i=1}^{N}I\left ( y_{i}=c_{k} \right )}p^(X(j)=ajl∣y=ck)=∑i=1NI(yi=ck)∑i=1NI(xi(j)=ajl,yi=ck) -
输出(利用MAP估计进行决策):朴素贝叶斯模型,能够估计数据x∗=(x∗(1),...,x∗(n))Tx^{*}=\left ( x^{*(1)},...,x^{*(n)} \right )^{T}x∗=(x∗(1),...,x∗(n))T的类别:
y=f(x∗)=argmaxckp^(y=ck)∏j=1np^(Xj=x∗(j)∣y=ck)y=f\left ( x^{*} \right )=argmax_{c_{k}}\hat{p}\left ( y=c_{k} \right )\prod_{j=1}^{n}\hat{p}\left ( X^{j}=x^{*(j)}\mid y=c_{k} \right )y=f(x∗)=argmaxckp^(y=ck)∏j=1np^(Xj=x∗(j)∣y=ck)
总结一下朴素贝叶斯算法背后的数学思想:
- 使用极大似然估计导出模型的具体参数(先验概率、条件概率)
- 使用极大后验概率估计作为模型的决策(输出使得数据后验概率最大化的类别)
然而此算法存在一个问题:如果训练集中某个类别ckc_{k}ck的数据没有涵盖第j维特征的第l个取值,相应估计的条件概率p^(Xj=ajl∣y=ck)\hat{p}\left ( X^{j}=a_{jl}\mid y=c_{k} \right )p^(Xj=ajl∣y=ck)就是0,从而导致模型可能会在测试集上的分类产生误差。解决这个问题的办法是在各个估计中加入平滑项:
-
过程:
-
(1)计算先验概率pλ(y=ck)p_{\lambda }\left ( y=c_{k} \right )pλ(y=ck):
pλ(y=ck)=∑i=1NI(yi=ck)+λN+Kλ,k=1,2,...,Kp_{\lambda }\left ( y=c_{k} \right )=\frac{\sum_{i=1}^{N}I\left ( y_{i}=c_{k} \right )+\lambda}{N+K\lambda},k=1,2,...,Kpλ(y=ck)=N+Kλ∑i=1NI(yi=ck)+λ,k=1,2,...,K -
(2)计算条件概率pλ(X(j)=ajl∣y=ck)p_{\lambda }\left ( X^{(j)}=a_{jl}\mid y=c_{k} \right )pλ(X(j)=ajl∣y=ck):
pλ(X(j)=ajl∣y=ck)=∑i=1NI(xi(j)=ajl,yi=ck)+λ∑i=1NI(yi=ck)+Sjλp_{\lambda }\left ( X^{(j)}=a_{jl}\mid y=c_{k} \right )=\frac{\sum_{i=1}^{N}I\left ( x_{i}^{\left ( j \right )}=a_{jl},y_{i}=c_{k} \right )+\lambda }{\sum_{i=1}^{N}I\left ( y_{i}=c_{k} \right )+S_{j}\lambda }pλ(X(j)=ajl∣y=ck)=∑i=1NI(yi=ck)+Sjλ∑i=1NI(xi(j)=ajl,yi=ck)+λ
λ=0\lambda=0λ=0时就是极大似然估计,λ=1\lambda=1λ=1时则叫做拉普拉斯平滑。
GaussianNB(连续型朴素贝叶斯分类器)
通过假设该变量服从正态分布,再利用极大似然估计计算该变量的“条件概率”来处理连续型变量。具体改变如下;
-
(2)计算“条件概率”p(X(j)=ajl∣y=ck)p\left ( X^{(j)}=a_{jl}\mid y=c_{k} \right )p(X(j)=ajl∣y=ck):
p(X(j)=ajl∣y=ck)=12πσjke−(ajl−μjk)22σjk2p\left ( X^{(j)}=a_{jl}\mid y=c_{k} \right )=\frac{1}{\sqrt{2\pi }\sigma _{jk}}e^{-\frac{\left (a_{jl}-\mu _{jk} \right )^{2}}{2\sigma _{jk}^{2}}}p(X(j)=ajl∣y=ck)=2πσjk1e−2σjk2(ajl−μjk)2 -
这里有两个参数:μjk\mu _{jk}μjk、σjk\sigma _{jk}σjk,它们可以用极大似然估计定出:
μ^jk=1Nk∑i=1Nxi(j)I(yi=ck)\hat{\mu }_{jk}=\frac{1}{N_{k}}\sum_{i=1}^{N}x_{i}^{\left ( j \right )}I\left ( y_{i}=c_{k} \right )μ^jk=Nk1∑i=1Nxi(j)I(yi=ck)
σ^jk2=1Nk∑i=1N(xi(j)−μjk)2I(yi=ck)\hat{\sigma }_{jk}^{2}=\frac{1}{N_{k}}\sum_{i=1}^{N}\left ( x_{i}^{\left ( j \right )}-\mu _{jk} \right )^{2}I\left ( y_{i}=c_{k} \right )σ^jk2=Nk1∑i=1N(xi(j)−μjk)2I(yi=ck) -
其中,Nk=∑i=1NI(yi=ck)N_{k}=\sum_{i=1}^{N}I\left ( y_{i}=c_{k} \right )Nk=∑i=1NI(yi=ck)是类别ckc_{k}ck的样本数。
MergedNB(混合型朴素贝叶斯分类器)
混合型朴素贝叶斯主要有两种提法:
- 用某种分布的密度函数算出训练集中各个样本连续型特征相应的密度后,根据这些密度函数的情况将该维度离散化,最后再训练离散型朴素贝叶斯模型。
- 直接结合离散型朴素贝叶斯和连续型贝叶斯:
y=f(x∗)=argmaxckp(y=ck)∏j∈S1p(X(j)=x∗(j)∣y=ck)∏j∈S2p(X(j)=x∗(j)∣y=ck)y=f\left ( x^{*} \right )=argmax_{c_{k}}p\left ( y=c_{k} \right )\prod _{j\in S_{1}}p\left ( X^{\left (j \right )}=x^{*\left ( j \right )}\mid y=c_{k} \right )\prod _{j\in S_{2}}p\left ( X^{\left (j \right )}=x^{*\left ( j \right )}\mid y=c_{k} \right )y=f(x∗)=argmaxckp(y=ck)∏j∈S1p(X(j)=x∗(j)∣y=ck)∏j∈S2p(X(j)=x∗(j)∣y=ck)
其中,S1S_{1}S1和S2S_{2}S2代表离散、连续维度的集合,条件概率由以上两节的算法给出。
半朴素贝叶斯与贝叶斯网
由于朴素贝叶斯的独立性假设在绝大多数情况下都显得太强,现实任务中这个假设往往难以成立。为了做出改进,人们尝试在不过与增加模型复杂度的前提下,将独立性假设进行各种弱化。在由此衍生出来的模型中,比较经典的是半朴素贝叶斯模型和贝叶斯网模型。
- 半朴素贝叶斯
1.ODE算法(One-Dependent Estimator,独依赖估计)
该算法中各个维度的特征至多依赖一个其他维度的特征。从公式上来说,它在描述条件概率时会多出一个条件:
p(ck∣X=x)=p(y=ck)∏i=1np(X(j)=x(j)∣Y=ck,X(paj)=x(paj))p\left ( c_{k}\mid X=x \right )=p\left ( y=c_{k} \right )\prod_{i=1}^{n}p\left ( X^{\left ( j \right )}=x^{\left ( j \right )}\mid Y=c_{k},X^{\left ( pa_{j} \right )}=x^{\left ( pa_{j} \right )} \right )p(ck∣X=x)=p(y=ck)∏i=1np(X(j)=x(j)∣Y=ck,X(paj)=x(paj))
这里的pajpa_{j}paj代表维度j所“独依赖”的维度。
2.SPODE算法(Super-Parent ODE,超父独依赖估计)
这是ODE算法的一个特例。该算法中,所有维度的特征都独依赖于同一个维度的特征,这个被共同依赖的特征就叫做“超父”。一般来说,会选择通过交叉验证来选择超父。
3.AODE算法(Averaged One-Dependent Estimator,集成独依赖估计)
AODE算法会利用SPODE算法并尝试把许多个训练后的、有足够的训练数据支撑的SPODE模型集成在一起来构建最终的模型。一般来说,AODE会以所有维度的特征作为超父训练n个SPODE模型,然后线性组合出最终的模型。 - 贝叶斯网
贝叶斯网的结构可以想象成一张网,其中:1.网络的节点就是单一样本的各个维度上的随机变量X(1),...,X(n)X^{\left ( 1 \right )},...,X^{\left ( n \right )}X(1),...,X(n)。2.连接节点的边就是节点之间的依赖关系
其思想与朴素贝叶斯想去不多:只需要对训练集相应的条件进行“计数”即可,所以贝叶斯网的学习任务主要归结于如何找到最恰当的网络结构。常见的做法是定义一个打分函数并基于该函数通过某种搜索手段来决定结构。常见方法有贪心法,即一次仅增删调一个边或者直接限定假设空间,比如树形结构。然后借助吉布斯采样来近似的计算后验概率。