机器学习-朴素贝叶斯

来源:互联网 发布:Ubuntu系统更改ip地址 编辑:程序博客网 时间:2024/05/22 09:16

本文将讲解机器学习中的一种分类算法-朴素贝叶斯。

贝叶斯定理

一提到贝叶斯定理,很多人可能会觉得这个定理很厉害。确实,贝叶斯定理在机器学习中的地位是非常高的。而朴素贝叶斯就是一种基于贝叶斯定理的算法,所以,我们先讲讲什么是贝叶斯定理。

首先,我们需要明白贝叶斯定理解决的是一个什么问题?

它解决的问题就是在已知P(A|B)的情况下求得P(B|A),这个就很厉害了。因为,现实生活中,可能求P(A|B)很难,但是求P(B|A)很简单,所以可以由贝叶斯定理进行转换。

其次,贝叶斯定理中有两个概念或许也让很多人难以明白,一个是先验概率,一个是后验概率。下面逐一讲解:

  • 先验概率:先验指无需经验或先于经验获得的知识,即P(B);

  • 后验概率: 后验概率是一种条件概率,既然是后验,那么指的就是在已知某种结果的情况下某个条件发生的概率,即P(A|B)和P(B|A)都是后验概率。

贝叶斯公式提供了从P(A|B)获得P(B|A)的道路:

P(B|A)=P(A|B)P(B)P(A)

贝叶斯与机器学习之间的联系

有人就问了,贝叶斯公式我都能背出来了,但是它怎么和机器学习建立的联系呢?那么,我现在就可以告诉你,机器学习就是基于贝叶斯而诞生的。

为什么这么说呢?我们先回想下机器学习所做的事。

机器学习做的事就是在给定一些训练集的情况下,预测新的数据在具有某特征的情况下属于某类的概率。这其实就是贝叶斯所做的事:

P(|)=P(|)P()P()

我们可以进一步形象的描述:

机器学习的任务:在给定训练数据D时,确定假设空间H中的最佳假设。

最佳假设:在给定数据D以及H中不同假设的先验概率的有关知识下的最可能假设。

用P(h)表示在没有训练数据前假设h拥有的初始概率,P(h)被称为h的先验概率。类似地,P(D)表示训练数据D的先验概率,P(D|h)表示假设h成立时D的概率。

机器学习中,我们关心的是P(h|D),即给定D时h的成立的概率。贝叶斯定理恰好就可以解决这种问题。

朴素贝叶斯

前面做了这么多铺垫,现在终于可以讲解什么是朴素贝叶斯了。

朴素贝叶斯方法,从名称中可以看出,它包含了朴素和贝叶斯两个词,其中,朴素指的是这种方法的思想真的很朴素,朴素贝叶斯的思想基础是这样的:对于给出的待分类项,求解在此项出现的条件下各个类别出现的概率,哪个最大,就认为此待分类项属于哪个类别。贝叶斯指的是该方法是基于贝叶斯定理的。

贝叶斯分类的步骤如下:

  1. x={a1,a2...am}为一个待分类的样本,其中,a为x的一个特征属性

  2. 标记集合C={y1,y2...yn}

  3. 计算P(y1|x),P(y2|x)...P(yn|x)

  4. P(yk|x)=max{P(y1|x),P(y2|x),P(yn|x)},则xyk

对于这四个问题,第1和2是已知的,第4个是基于第3个求得的,所以最关键的就是如何计算第3步中的各个条件概率。我们可以这么做:

  1. 假设训练集为D={x1,x2,...xn}

  2. 统计在各类别下每个训练样本各个特征属性的条件概率估计。即P(a1|y1),P(a2|y1),...P(am|y1);P(a1|y2),P(a2|y2),...P(am|y2);...P(a1|yn),P(a2|yn),...P(am|yn)

  3. 由于各个特征属性是条件独立的,所以根据贝叶斯定理有如下推导:
    P(yi|x)=P(x|yi)P(yi)P(x)

因为对所有类别来说P(x)相同,又因为各特征属性是条件独立的,所以贝叶斯分类的第4步可以写为

P(yk|x)=max{P(y1|x),P(y2|x),P(yn|x)}=maxP(yi|x)
=maxP(x|yi)P(yi)P(x)=maxP(x|yi)P(yi)
=maxP(a1|yi)P(a2|yi)...P(am|yi)P(yi)
=maxP(yi)mj=1P(aj|yi)

P(yk|x)=maxP(yi)mj=1P(aj|yi)

这就是朴素贝叶斯分类器的表达式。

显然,朴素贝叶斯分类器的训练过程就是基于训练集D来估计先验概率P(yi),并为每个属性估计条件概率P(aj|yi)

下面,我们将讲述怎么估计P(aj|yi)的值。

由上文看出,计算各个划分的条件概率P(aj|yi)是朴素贝叶斯分类的关键性步骤。

当特征属性为离散值时,只要很方便的统计训练样本中各个划分在每个类别中出现的频率即可用来估计P(aj|yi)

当特征属性为连续值时,通常假定其值服从高斯分布(也称正态分布)。即:

p(aj|yi)=12πσyie(ajηyi)22σ2yi

因此只要计算出训练样本中各个类别中此特征项划分的各均值和标准差,代入上述公式即可得到需要的估计值。

另一个需要讨论的问题就是当P(a|y)=0怎么办,当某个类别下某个特征项划分没有出现时,就是产生这种现象,这会令分类器质量大大降低。为了解决这个问题,在估计概率值时通常要进行“平滑”,常用“拉普拉斯修正”。就是对每个类别下所有划分的计数加1,这样如果训练样本集数量充分大时,并不会对结果产生影响,并且解决了上述频率为0的尴尬局面。

朴素贝叶斯分类实例

理论讲了这么多,肯定有点迷迷糊糊的,下面将讲一个实际例子。

这里写图片描述

我们用西瓜数据集训练一个朴素贝叶斯分类器,对下面的测试例判断分类:

编号 色泽 根蒂 敲声 纹理 脐部 触感 密度 含糖率 好瓜 测1 青绿 蜷缩 浊响 清晰 凹陷 硬滑 0.697 0.460 ?

首先,估计类先验概率P(y),显然有

P(=)=8170.471
P(=)=9170.529

然后,为每个属性估计条件概率P(ai|y)

P绿|=P(=绿|=)=38=0.375

P绿|=P(=绿|=)=390.333

P|=P(=|=)=58=0.625

P|=P(=|=)=390.333

P|=P(=|=)=68=0.750

P|=P(=|=)=490.444

P|=P(=|=)=78=0.875

P|=P(=|=)=290.222

P|=P(=|=)=68=0.750

P|=P(=|=)=290.222

P|=P(=|=)=68=0.750

P|=P(=|=)=690.667

P:0.697|=P(=0.697|=)=12π0.129e(0.6970.574)220.12921.959

P:0.697|=P(=0.697|=)=12π0.195e(0.6970.496)220.19521.203

P:0.460|=P(=0.460|=)=12π0.101e(0.4600.279)220.10120.788

P:0.460|=P(=0.460|=)=12π0.108e(0.4600.154)220.10820.066

于是,有

P(=)×P绿|×P|×P|×P|×P|×P|×P:0.697|×P:0.460|0.063

P(=)×P绿|×P|×P|×P|×P|×P|×P:0.697|×P:0.460|6.80×105

由于0.063>6.80×105,因此,朴素贝叶斯分类器将测试样本“测1”判别为“好瓜”。

参考文献

【1】http://www.cnblogs.com/leoo2sk/archive/2010/09/17/naive-bayesian-classifier.html

【2】周志华《机器学习》

原创粉丝点击