概率论在机器学习扮演什么角色?通过从头开始开始构建一个垃圾邮件分类器来看看。概率论能够训练我们在规律性与不确定性并存时做出决定,它用来衡量某事发生的概率。事件的结果有一组可能的取值,叫做样本空间,他们可能是离散的,也可以是连续的(取值在一定范围内)。概率有条件概率、联合概率、边际概率(某种特定结果的概率)。在机器学习中我们作了很多假设,现在十分流行使用贝叶斯定理如下,它在条件概率原理之上构建的。之所以叫贝叶斯定理,是因为我们可以通过逻辑来证明它的真实性。
理论中说到,对于事件A和B,如果我们知道在已知A的情况下事件B发生的概率以及A发生的概率如下图
我们可以通过这些求出已知B条件发生下A发生的概率。换句话说,已知B的条件下,A发生的后验概率能够通过下图中方式计算出来
我们可以利用这个定理,根据新的知识来更新概率。例如,求如果木板断裂B,小车坠毁的概率A?木板断裂概率0.3,小车坠毁概率0.5,利用贝叶斯定理 ,求解如下,坠毁概率为0.2。
如何将此应用于机器学习中?有如下线性分类器家族,它们基于贝叶斯定理,被称为朴素贝叶斯分类器。对小样本表现良好,朴素贝叶斯广泛应用于不同领域,从诊断病情、情绪分析到垃圾电子邮件分类。它们对数据做了两个很大的假设,第一个假设是样本独立且同分布,它们是两两相互独立的随机变量,是从相近的概率分布中得出的。第二个假设是属性的条件独立性,每个特征之间是互相独立、互不影响的,这意味着样本的概率,可以从训练数据中直接估计出。
朴素贝叶斯经典的应用是构建垃圾邮件分类器。设D是训练样本和标签的集合,训练样本有n个属性集合x,n的值往往非常大(属性非常多)
有m个类别号
朴素贝叶斯定理:
通过第二个假设属性独立性可知,p(x|Ci)可以这样求:
i
所得Ci即为x所属类别。上式表示,已知待分类数据对象x的情况下,分别计算x属于C1、C2、...、Ci的概率,选取其中后验概率的最大值,此时所对应的Ci,即为x所属类别i。 若朴素贝叶斯分类法将未知的样本X分配给类Ci,则一定是满足P(Ci|X)>P(Cj|X) 1≤j≤m,j≠i。根据贝叶斯定理由于P(X)对于所有类为常数,最大化后验概率P(Ci|X)可转化为最大化先验概率P(X|Ci)P(Ci)。如果训练数据集有许多属性和元组,计算P(X|Ci)的开销可能非常大,为此,通常假设各属性的取值互相独立,这样先验概率P(x1|Ci),P(x2|Ci),…,P(xn|Ci)可以从训练数据集求得。根据此方法,对一个未知类别的样本X,可以先分别计算出X属于每一个类别Ci的概率P(X|Ci)P(Ci),然后选择其中概率最大的类别作为其类别。朴素贝叶斯算法成立的前提是各属性之间互相独立。当数据集满足这种独立性假设时,分类的准确度较高,否则可能较低。另外,该算法没有分类规则输出。
在估计条件概率P(xi∣c)时,若xi为离散值属性,那么我们只需计算每个属性取值占所有样本的数量比例就行了:
Dc表示训练集D中第c类样本组成的集合,外加两条竖线表示的是集合的元素数量。Dc,xi表示DC中在第i个属性值上取值为xi
的样本组成的集合。但是如果xi是连续值属性,是得用概率密度函数,即假定
,其中,
分别是第c类样本在第i个属性上取值的均值和方差,则有:
拉普拉斯修正(Laplacian correction) ,朴素贝叶斯分类器在实际使用中还需要注意的一个问题是:若某个离散类型的属性值在训练集中没有与某个类同时出现过,p(Xi|c)概率会为零,但是它其它的属性非常符合这个类型c的特征,于是在用最后的连乘式计算该样本属于该类的概率时,不管其它的属性如何取值,分类器计算后认为该样本属于这个类型c的概率为0,这显然是不合理的。这个问题本质上是由于我们的训练集不够完整,没有包括足够多的样本。但是,为了避免这个问题的出现,我们通常还是在估计概率值时,对其进行“平滑”(smoothing)操作,通常使用“拉普拉斯修正”(Laplacian correction)。具体做法是:
我们在分母上都加上取值的可能性个数,分子上都加1,令N表示训练集D中可能的类别数,Ni表示第i个属性可能的取值数。
对于垃圾邮件分类思路,首先加载数据,每个电子邮件都被标记垃圾i邮件1或非垃圾邮件0。我们可以将数据分割成一个测试我们模型的训练集和一个评估预测能力的测试集,对于在贝叶斯定理背景下的垃圾邮件分类问题。我们将A设为垃圾邮件概率,B设为邮件内容(不同词汇),因此电子邮件是垃圾邮件的概率大于不是垃圾邮件的概率,则分类为垃圾邮件,由于都要用到B概率作为除数,可以从比较方程中约去i。计算A和非A即训练集中垃圾邮件和非垃圾邮件的百分比。计算机困难的是,A条件下B概率和非A条件下B概率,即p(Bi|Ax)。为了做到这个,我们需要词袋模型(BOW),意思是我们把一段文字作为一组无重复词群来提取,忽略每个单词顺序,对于每个单词,我们计算出出现在垃圾邮件和非垃圾邮件中百分比。
如果要计算完整邮件的条件概率,用邮件中出现每个单词条件概率相乘。只是在分类中进行。我们可以构造自己的分类函数,参数是邮件,计算p(A|B)为垃圾邮件和非垃圾邮件 p(~A|B)后进行分类。
总结,我们有更有效的技术而不是词袋,并且用egram而不是数每个单词。概率论有助于我们将不确定因素用模型建立出来,贝叶斯定理描述一件事概率是基于之前所有可能和这个事件相关的条件。朴素贝叶斯分类器,将带有独立性假设的贝叶斯定律应用于各种特征之中。