朴素贝叶斯

hit2015spring

欢迎关注我的博客:http://blog.csdn.NET/hit2015spring

贝叶斯与条件概率

学习一个分类器主要是对一个损失函数进行优化,使得损失函数最小,这时候得到的分类器对问题的判断就会比较nice。用贝叶斯分类器,就是要建立一个基于概率发生的条件下进行判断的一个基本方法。

贝叶斯分类的思想是基于概率统计的思想出发,即有一个训练样本集,这里面包含着属性值(特征值) X(X1,X2,,Xn) 对应的标签值 Y(Y1,Y2,,Yn) ,需要对新得到的未知标签的属性进行分类。这里面运用到了贝叶斯条件概率:

A1,,An 是互不相容的事件,且 P(Ai)>0(i=1,2,,n) 若对任意事件 B BA1+A2+,+An P(B)>0

P(Ai|B)=P(Ai)P(B|Ai)j+1nP(Aj)P(B|Aj)

把上述的公式理解就是: B 是一个事件发生具有的某一种原因(今年收成好有一些原因是今年雨水比较充沛,但是雨水充沛不一定庄稼收成就好),A是某件事情,它的发生和上面的原因有一定的联系,就像庄稼收成好,一般,少。这些发生不发生和今年雨水充不充沛有一定的关系。

上式左边表示:这件事的原因有了即(雨水比较充沛),想要求解今年庄稼收成怎么样。(如丰收的概率)
右边分子:收成(如丰收)的情况下雨水充沛的概率,分母就是以往年份雨水充沛的概率,分母是一个归一化的理解,当然这里面是一个全概率公式。

由于以往年份雨水是否充沛和收成是否好,这些都是可以直接统计出来的,于是就可以得到这件事情的概率,我们称为先验概率,我们要求解的今年的收成如何的概率,是根据先验概率求解的,所以称为后验概率。

当然我们的需求是对提取出来的特征进行分类,这些特征就能理解为每个类别发生的原因,每个类别当然就是我们需要预测的某个事件的本身。贝叶斯分类的想法就是:我把提取得到的很多特征,(当然这里先假定所有的特征都是独立的,就是互不牵连,原因后面说)根据提取到的这些特征,还有根据每一个类别里面出现的特征,来计算在当前这些特征之下所有类别所占有的概率。思想很简单,选择最大的概率所在的那个类别作为我们所预测的结果。就是后验概率最大的那个特征作为我们所预测的值。

接下来就是贝叶斯分类的一个过程:
设输入空间 XRn 是n维向量的集合,输出空间是类标记集合 Y={c1,c2,,ck} ,这里面的如就是 xX ,输出为类标记 yY . X 是定义在输入空间X上面的随机变量, Y 是定义在输出空间上的随机变量。P(X,Y) X Y的联合概率分布。

上面就是一个定义的过程,它是一个数学的表达,就是告诉我们,特征的维数是 n ,输出的类别数是K, P(X,Y) 是输入和输出的联合概率分布。

我们有一个训练集: T=(x1,y1),(x2,y2),,(xn,yn) ,这里面的特征 xi 是一个 n 维向量,理解为有n个特征,当然每一个特征有 Sj 个取值.。根据上面贝叶斯分类的思想,我们只要求得每一个类别发生的概率 P(Ck) 和条件概率的分布

P(X=x|Y=ck)=P(X(1)=x(1),X(2)=x(2),,X(n)=x(n)|Y=ck),k=1,2,,K

上面的式子是,在一个采样样本上面,它的特征是 n 维的,计算每一个类别下面的条件概率。

在上面的叙述过程中,特征的维数是n,就是上面说的庄稼收成受到影响的因素,这里假设有n个,比如:降水,肥料,虫害…….n个因素的影响。每个因素都有一些 Sj,j=1,2,,n 个各自的属性类别,比如降水:雨量充沛,少,一般。在上述条件概率计算的时候这里面需要计算的参数个数就是指数型的有 Kj=1nSj 个。所以这就要我们引入一个条件,就是假设这些特征他们是互相独立的,于是就能把上面条件概率的公式进行简化处理——由于这个强限制性的条件,我们称之为朴素贝叶斯

于是上面条件概率公式成为了:

P(X=x|Y=ck)=P(X(1)=x(1),X(2)=x(2),,X(n)=x(n)|Y=ck)=j=1nP(X(j)=x(j)|Y=ck)

这里用连乘积代替了原来的联合概率,这样简化了计算的过程,虽然这个操作会降低一些准确率,但是却大大简化了计算的过程。
注意上面的条件是假定各个条件独立
于是朴素贝叶斯公式就可以写成下面形式:

P(Y=ck|X=x)=P(X=x|Y=ck)P(Y=ck)kP(X=x|Y=ck)P(Y=ck)=P(Y=ck)jP(X(j)=x(j)|Y=ck)kP(Y=ck)jP(X(j)=x(j)|Y=ck)

上式就是朴素贝叶斯的基本公式,当然这是求所有类别在当前特征下面的后验概率,为了使得我们预测到的类别准确性最大,就选择后验概率最大的那一个类别作为预测得到的结果。,由于上面的式子中可以看到,右边的式子分母是一样的,所以只比较分子便可以得到结果。于是就是选择:

y=argmaxckP(Y=ck)jP(X(j)=x(j)|Y=ck)

arg 表示取满足后面式子中的变量的值,即取满足 maxP(Y=ck)jP(X(j)=x(j)|Y=ck) 这个式子的变量 ck 的值。

贝叶斯的另外一个角度

当然我由前面我们分析过了,在对一个问题进行学习的过程中,我们用一个期望风险来评估这个模型的效果,这里我们就拿期望风险来对上面经过直观上理解,最终选择最大后验概率的模型进行解释,以回到学习理论的本质,构造一个模型使得模型的期望风险最小。见SVM的理解与分析
我们这里用一个0-1损失函数来对模型的建立进行一个评估。

0-1损失函数

上面的式子中 f(X) 是分类决策函数,用这个损失函数来对我们的结果进行判断的时候,模型最后得到的期望风险函数就是下面式子:

Rexp(f)=E[L(Y,f(X))]

由于我们是用后验概率对每一个进行分类得到如下的式子:

期望的公式: i=1ni×

Rexp(f)=EXk=1K[L(ck,f(X))]P(ck|X)

当然我们为了最小化期望风险,所以我们要对 X=x 进行逐个的最小化,这样就能达到总体的最小化。因为所有样本本身就是独立同分布的,所以可以按照逐个最小推出总体最小。
所以就有

f(x)=argminyYk=1KL(ck,y)P(ck|X=x) =argminyYk=1KP(yck|X=x) =argminyY(1P(y=ck|X=x)) =argmaxyYP(y=ck|X=x)

所以上面的等式推导过程就是朴素贝叶斯所展现的取后验概率最大的那个结果,可以使得学习得到的模型期望风险最小。

参数估计

在对贝叶斯分类器进行训练的时候,其实就是对每一个的类别计算它的先验概率 P(c) 这里用极大似然法来估计先验概率。这里举一个极大似然的例子:

假如有一个罐子,里面有黑白两种颜色的球,数目多少不知,两种颜色的比例也不知。我 们想知道罐中白球和黑球的比例,但我们不能把罐中的球全部拿出来数。现在我们可以每次任意从已经摇匀的罐中拿一个球出来,记录球的颜色,然后把拿出来的球 再放回罐中。这个过程可以重复,我们可以用记录的球的颜色来估计罐中黑白球的比例。假如在前面的一百次重复记录中,有七十次是白球,请问罐中白球所占的比例最有可能是多少?很多人马上就有答案了: 70% 。而其后的理论支撑是什么呢?

我们假设罐中白球的比例是 p ,那么黑球的比例就是1p。因为每抽一个球出来,在记录颜色之后,我们把抽出的球放回了罐中并摇匀,所以每次抽出来的球的颜 色服从同一独立分布。这里我们把一次抽出来球的颜色称为一次抽样。题目中在一百次抽样中,七十次是白球的概率是 P(Data|M) ,这里 Data 是所有的数据, M 是所给出的模型,表示每次抽出来的球是白色的概率为p。如果第一抽样的结果记为x1,第二抽样的结果记为 x2 那么 Data=(x1,x2,,x100) 。这样,

P(Data|M)=P(x1,x2,,x100|M)=P(x1|M)P(x2|M)P(x100|M)=p70(1p)30.

那么 p 在取什么值的时候,P(Data|M)的值最大呢?将 p70(1p)30 p$求导,并其等于零。

70p69(1p)30p7030(1p)29=0

解方程可以得到 p=0.7
同样的道理,在对训练集的样本参数进行估计的时候运用极大似然法,设训练集里面第 c 类样本的个数是Dc,整个训练集的个数是 D

y=argmaxckP(Y=ck)jP(X(j)=x(j)|Y=ck)

由此可以估计出上面这个式子的 P(Y=ck)=DcD

假设第C类中第 j 个属性Xj,它的属性值为 xkj ,统计出这个类别下,值为 xjk 的个数 Dxkjc
上式中的连乘项表示为: P(X(j)=x(j)|Y=ck)=DxkjcDc
于是极大似然估计下的贝叶斯分类器就完成了。

参数估计的另外一个方法:
当发生一种情况的时候:在训练集里面,某一个类别,在某一个属性下面,它的一个属性值并没有出现在训练集里面,但是出现在了测试集里面,于是就会产生某一个分类的概率直接变成0,这样显然会有失偏颇。

农作物收成的训练集里面:丰收和饥荒两个类别,属性有:雨量,光照 ,虫害。在丰收的类别下面,雨量所代表的那个属性,它的取值有降水超过400,降水 200300 ,降水 100200 ,降水 50100 。但是没有降水 300400 的属性值。当一个测试集中在降水那个属性下取值恰好是 300400 的时候,其他的值都很符合丰收这个类别的性质的时候,可是却在丰收的类别下,后验概率变成了0,这就不符合一些情况。于是就引入了一个新的估计方法。

贝叶斯估计

这个方法就是在极大似然估计的基础上对条件概率值进行平滑处理,我们称为拉普拉斯修正,具体的算式如下:

P(Y=ck)=Dc+1D+c
上式c表示有c个类别

P(X(j)=x(j)|Y=ck)=Dxkjc+1Dc+k
上式的k表示在j的属性下有k个属性值类别。

©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页