贝叶斯分类器大纲:
-贝叶斯公式
-贝叶斯决策论
-极大似然估计
-朴素贝叶斯分类器
-应用举例
贝叶斯分类器核心:
-贝叶斯公式
-条件独立假设
-平滑算法
关键概念:贝叶斯公式,条件风险,生成模型,判别模型,贝叶斯判定准则,极大似然法,
贝叶斯分类器
- 定义
是一种概率框架下的统计学习分类器
对分类任务而言,假设在相关概率都已知的情况下,贝叶斯分类器考虑如何基于这些概率为样本判定最优的类标。
在开始介绍贝叶斯决策论之前,我们首先来回顾下概率论委员会常委--贝叶斯公式。
若将上述定义中样本空间的划分Bi看做为类标,A看做为一个新的样本,则很容易将条件概率理解为样本A是类别Bi的概率。
贝叶斯决策论
- 基本原理
若p1(x1,x2)>p0(x1,x2),那么类别为1
若p1(x1,x2)<p0(x1,x2),那么类别为0
如果相等,可设为1,也可设为0
即:
对每个样本x,选择能使后验概率p(c|x)最大的类别标记
在机器学习训练模型的过程中,往往我们都试图去优化一个风险函数,因此在概率框架下我们也可以为贝叶斯定义“条件风险”(conditional risk)。
任务是寻找一个判定准则最小化所有样本的条件风险总和,因此就有了
贝叶斯判定准则(Bayes decision rule):
为最小化总体风险,只需在每个样本上选择那个使得条件风险最小的类标
若损失函数λ取0-1损失,则有:
即对于每个样本x,选择其后验概率P(c | x)最大所对应的类标,能使得总体风险函数最小,从而将原问题转化为估计后验概率P(c | x)。一般这里有两种策略来对后验概率进行估计:
* 判别式模型:直接对 P(c | x)进行建模求解。例我们前面所介绍的决策树、神经网络、SVM都是属于判别式模型。
* 生成式模型:通过先对联合分布P(x,c)建模,从而进一步求解 P(c | x)。
贝叶斯分类器就属于生成式模型,基于贝叶斯公式对后验概率P(c | x) 进行一项神奇的变换,巴拉拉能量.... P(c | x)变身
* 先验概率: 根据以往经验和分析得到的概率。
* 后验概率:后验概率是基于新的信息,修正原来的先验概率后所获得的更接近实际情况的概率估计
实际上先验概率就是在没有任何结果出来的情况下估计的概率,而后验概率则是在有一定依据后的重新估计,直观意义上后验概率就是条件概率。
下面直接上Wiki上的一个例子
回归正题,对于类先验概率P(c),p(c)就是样本空间中各类样本所占的比例,根据大数定理(当样本足够多时,频率趋于稳定等于其概率),这样当训练样本充足时,p(c)可以使用各类出现的频率来代替。因此只剩下类条件概率p(x | c ),它表达的意思是在类别c中出现x的概率,它涉及到属性的联合概率问题,若只有一个离散属性还好,当属性多时采用频率估计起来就十分困难,因此这里一般采用极大似然法进行估计
- 极大似然法
极大似然估计(Maximum Likelihood Estimation,简称MLE)是一种根据数据采样来估计概率分布的经典方法。
常用的策略是先假定总体具有某种确定的概率分布,再基于训练样本对概率分布的参数进行估计。运用到类条件概率p(x | c )中,假设p(x | c )服从一个参数为θ的分布,问题就变为根据已知的训练样本来估计θ。
这里P(x|c)=P(x|c,θ)=P(x|θc)
极大似然法的核心思想就是:估计出的参数使得已知样本出现的概率最大,即使得训练数据的似然最大。
贝叶斯分类器的训练过程就是参数估计。
总结最大似然法估计参数的过程,一般分为以下四个步骤:
* 1.写出似然函数;
* 2.对似然函数取对数,并整理;
* 3.求导数,令偏导数为0,得到似然方程组;
* 4.解似然方程组,得到所有参数即为所求。
例如:假设样本属性都是连续值,p(x | c )服从一个多维高斯分布,则通过MLE计算出的参数刚好分别为:
采用最大似然法估计参数的效果很大程度上依赖于作出的假设是否合理,是否符合潜在的真实数据分布。
- 朴素贝叶斯分类器
在同一个特征下,分母都一样,所以结果是正比于分子的。
应用场景:某一文本类型中,某一个词出现的概率。
若某个属性值在训练集中和某个类别没有一起出现过,这样会抹掉其它的属性信息,因为该样本的类条件概率被计算为0
因此在估计概率值时,常常用进行平滑(smoothing)处理,拉普拉斯修正(Laplacian correction)就是其中的一种经典方法,具体计算方法如下
当训练集越大时,拉普拉斯修正引入的影响越来越小。对于贝叶斯分类器,模型的训练就是参数估计,因此可以事先将所有的概率储存好,当有新样本需要判定时,直接查表计算即可。
- 贝叶斯分类器应用举例
垃圾文件识别:
我们现在要对邮件进行分类,识别垃圾邮件和普通邮件,如果我们选择使用朴素贝叶斯分类器,那目标就是判断P(“垃圾邮件”∣“具有某特征”)是否大于1/2。现在假设我们有垃圾邮件和正常邮件各1万封作为训练集。需要判断以下这个邮件是否属于垃圾邮件:
“我司可办理正规发票(保真)17%增值税发票点数优惠!”
也就是判断概率P(“垃圾邮件”∣“我司可办理正规发票(保真)17%增值税发票点数优惠!”)是否大于1/2。
咳咳,有木有发现,转换成的这个概率,计算的方法:就是写个计数器,然后+1 +1 +1统计出所有垃圾邮件和正常邮件中出现这句话的次数啊!!!
好,具体点说:
P(“垃圾邮件”∣“我司可办理正规发票(保真)17%增值税发票点数优惠!”)
确实,在我们这样的样本容量下,『完全击中』的句子很少甚至没有(无法满足大数定律,),算出来的概率会很失真。一方面找到庞大的训练集是一件非常困难的事情,另一方面其实对于任何的训练集,我们都可以构造出一个从未在训练集中出现的句子作为垃圾邮件(真心的,之前看过朴素贝叶斯分类分错的邮件,我觉得大中华同胞创(zao)新(jia)的能力简直令人惊(fa)呀(zhi))。
一个很悲哀但是很现实的结论:
训练集是有限的,而句子的可能性则是无限的。所以覆盖所有句子可能性的训练集是不存在的。
所以解决方法是?
对啦!句子的可能性无限,但是词语就那么些!!汉语常用字2500个,常用词语也就56000个(你终于明白小学语文老师的用心良苦了)。按人们的经验理解,两句话意思相近并不强求非得每个字、词语都一样。比如“我司可办理正规发票,17%增值税发票点数优惠!”,这句话就比之前那句话少了**“(保真)”**这个词,但是意思基本一样。如果把这些情况也考虑进来,那样本数量就会增加,这就方便我们计算了。
于是,我们可以不拿句子作为特征,而是拿句子里面的词语(组合)作为特征去考虑。比如**“正规发票”可以作为一个单独的词语,“增值税”**也可以作为一个单独的词语等等。
句子**“我司可办理正规发票,17%增值税发票点数优惠!”就可以变成(“我”,“司”,“可”,“办理”,“正规发票”,“保真”,“增值税”,“发票”,“点数”,“优惠”))**。
于是你接触到了中文NLP中,最最最重要的技术之一:分词!!!也就是把一整句话拆分成更细粒度的词语来进行表示。咳咳,另外,分词之后去除标点符号、数字甚至无关成分(停用词)是特征预处理中的一项技术。
我们观察(“我”,“司”,“可”,“办理”,“正规发票”,“保真”,“增值税”,“发票”,“点数”,“优惠”),这可以理解成一个向量:向量的每一维度都表示着该特征词在文本中的特定位置存在。这种将特征拆分成更小的单元,依据这些更灵活、更细粒度的特征进行判断的思维方式,在自然语言处理与机器学习中都是非常常见又有效的。