我们知道,对于人类来说学习通常是指通过经验获得知识从而导致可度量的行为变化。也就是说我们通过经验获得了知识,然后这些知识又对我们未来的行为产生了影响。而机器学习则是让机器来进行学习,因此我们也可以认为机器学习同样是让机器通过经验(在计算机中表现为数据)获得知识(知识即为我们的模型),然后基于这些知识(模型)来对我们未来的行为产生影响(即不同的模型在接收到未来的新数据可能会得到不同的label)。对于人类来说最重要的是正确知识的获取,这对于机器来说也是一样的,最重要的是获得合适的模型。对于人类来说,知识是通过总结经验来得到的,那么对于机器来说,我们如何来总结已有的数据来得到模型是整个机器学习的核心问题。
在这里我们假设已有的数据为X,根据数据学习得到的模型产生的行为变化(lable)我们可以定义为Y,那么我们希望学习到的模型即可用一下公式来表达
model=P(Y|X)
,即我们拥有一个期望行为,我们希望我们通过学习得到的模型能够在有新数据来的时候得到我们想要的行为结果。
判别模型与生成模型
通过上面的描述我们知道机器学习的目标是得到一个模型使得其产生的行为(label)是我们所想看到的结果。那么我们如何来学习该模型呢?这里基于是否直接对P(Y|X)建模有两种策略:
- 第一种是判别式模型,即直接对P(Y|X)来进行建模,例如线性回归模型,SVM,决策树等,这些模型都预先制定了模型的格式,所需要的就是通过最优化的方法学到最优参数Θ即可;
- 第二种是生成式模型,这种策略并不直接对P(Y|X)进行建模,而是先对联合概率分布P(X,Y)进行建模,然后依据贝叶斯公式
P(Y|X)=P(X,Y)P(X)间接的得到我们所期望的模型P(Y|X),这种策略最常见的算法就是我们接下来要介绍的贝叶斯分类器算法
贝叶斯分类器
通过上面对两种建模策略的描述我们知道贝叶斯分类器算法的建模策略是第二种,即生成式模型。那么我们如何来对联合分布P(x,y)来建模呢?我们依据贝叶斯公式知道P(x,y)=P(y)P(x|y),在这里我们称P(y)为标签y的先验概率,P(x|y)是样本x相对于标签y的条件概率(似然)。这样就把如何计算P(x,y)问题转换为了如何计算标签的先验概率P(y)和似然P(x|y)。
- 先验分布P(y)估计方法:
我们知道先验概率P(y)表示的是各个label在样本空间内所占的比例,依据大数定律可以知道当样本空间足够大,样本足够充足的时候,我们可以通过label对应样本出现的频率来对P(y)进行估计
- 似然P(X|Y)估计方法:
在这里我们通常有两种方法来进行估计:
- 一种是类似于先验分布,我们通过统计频率的方式来计算似然P(x|y),但是这里要涉及到计算各个不同属性的联合概率,当属性值很多且样本量很大的时候,估计会很麻烦;
- 第二种方式是使用极大似然法来进行估计。极大似然法是首先要假定条件概率P(x|y)服从某个分布,然后基于样本数据来对概率分布的参数进行估计。但是这种方法的准确性严重依赖于所假设的分布,如果假设的分布符合潜在的真实数据分布,则效果不错,否则效果会很糟糕。在现实应用中,这种假设通常需要一定的经验。
对于极大似然,记标签y的条件概率为P(x|y),假设P(x|y)有确定的形式且被参数向量Θ唯一确定,那么我们的任务就是利用训练集来估计参数。我们可以将P(x|y)记为P(x|y;Θ)。因此对于参数Θ进行极大似然估计,就是在Θ的取值范围内寻找一组合适的参数使得P(x|y)最大,也就是找一组能够使得数据(x,y)出现的可能性最大的值。我们令Dy为训练集中标签为y的样本集合,假设样本都是独立同分布采样,那么参数Θ对于数据集Dy的对树似然为
L(Θ;y)=logP(Dy|Θ;y)=∑x∈DylogP(x|Θ;y)那么参数Θ的极大似然估计θ^=argmaxL(Θ;y)
朴素贝叶斯分类器(Naive Bayesian — NB)
在上面对贝叶斯分类器的描述中,我们可以看到无论使用极大似然方法还是频率统计的方法,其类条件概率P(x|y)都是所有特征上的联合概率,这在有限的样本下是很难估计的。
朴素贝叶斯方法通过假设所有的特征都是独立的,这样我们就可以避免计算特征上的联合概率,从而将计算后验概率变为了:
P(y|x)=P(x,y)P(x)=P(y)P(x|y)P(x)=P(y)P(x)∏i=1dP(xi|y)
因为P(x)是确定的,因此朴素贝叶斯分类器的表达式就为
y=argmaxy∈YP(y)∏i=1dP(xi|y)
其中,先验概率P(y)和似然P(xi|y)都可以通过对样本频率进行统计来得到。在这里有一点需要注意,因为并不是所有的标签y都需要所有的特征x,因此有可能某些似然P(xi|y)=0,由于我们的分类器表达式是连乘格式,那么就会使得整体都为0。这明显不是我们所想要的,故这里我们引入了拉普拉斯平滑,通过拉普拉斯平滑来防止相乘为0这种尴尬的事情出现。
半朴素贝叶斯分类器
前面提到的朴素贝叶斯分类器,有一个很重要的前提就是我们需要假设所有属性之间是独立不相关的,这对于实际工程中来说是几乎不可能的。因此我们就像如果假设只有部分的特征之间是相关的,这样我们既考虑了属性之间的相关性又不需要计算所有特征的联合概率。半朴素贝叶斯就是基于这样的想法来设计的,在半朴素贝叶斯中,我们假设每个特征最多可以再依赖一个额外的特征,这种假设我们称之为”独依赖估计(ODE)“,即只依赖一个额外特征。
在这种假设下,我们的模型可以写成如下格式:
P(y|x)=P(y)P(x|y)P(x)=P(y)P(x)∏i=1dP(xi|xk,y)
其中,xk为属性xi所依赖的特征。因此我们可以看到在这种方法中最核心的问题是如何去确定每个特征所依赖的父特征是什么。确定父特征常用的方法有3中:
- SPODE(Super-Parent ODE):
这种方法就是所有的特征都依赖于同一个特征,这个特征我们称之为”超父(super parent)“,但是哪个特征该被选为超父呢,我们这里使用交叉验证的方式来确定,其结构如下图所示:
在这里,每个特征都依赖于x1与y
- TAN(Tree Augmented naive Bayes):
这种方法的基础是最大带权生成树,即(1). 首先计算每两个特征之间的条件互信息;(2). 然后以特征为节点,以特征之间的条件互信息作为权值来构建一个完全图,根据该完全图再构建一个最大带权生成树,挑选根变量,将边置为有向;(3). 最后再加入y,增加从y到每个特征的有向边。其结构如下图所示:
其中条件互信息的计算方法如下:
I(xi,xj|y)=∑xi,xj;y∈YP(xi,xj|y)logP(xi,xj|y)P(xi|y)P(xj|y) - AODE(Average One-Dependent Estimator):
对于所有的半朴素贝叶斯分类器来说,其似然和先验都是基于频率统计的方法来计算的。