贝叶斯学习决策算法

来源:互联网 发布:mac sdk manager 编辑:程序博客网 时间:2024/05/22 07:58

若已经总共有M类的物体,以及各类在这n维特征空间的统计分布,具体来说是根据已知的各类别wi的先验概率P(wi)及类条件概率密度函数P(X|wi),i=1,2,...,M。
对于待测样品,贝叶斯公式可以计算出该样品分属各类别的概念,叫做后验概率,P(wi|X)=P(X|wi)P(wi)/P(X),i=1,2,...,M。
步骤:
1、根据已知训练样本中类别wi, i=1,2,...,M的频率或者其他先验知识,确定先验概率P(wi),i=1,2,...,M;
2、取训练样本中类wi的特征X,确定类条件概率密度函数P(X|wi),i=1,2,...,M,可以用类wi下某特征出现频数或者常采用正态密度函数来模拟,这时候只要求出类wi下特征X的期望和方差就行了;
3、将测试样本的特征带入P(X|wi),i,2,...,M,求出样本概率值P(X|wi),i=1,2,...,M;

4、确定X的类归属,即X属于wi类的条件满足argmax P(X|wi)*P(wi),i=1,2,...,M。


以上也叫做贝叶斯最小错误率决策过程,而实际问题中,错误率最小并不一定是最佳选择,比如把异常药品误判为正常药品,就会对病人产生很大的危害,所以不允许把模棱两可的药品判为正常药品,这样就有了贝叶斯最小风险决策
假设有2个类别,引入风险函数
采取决策a1,X判为w1的风险
R1(a1|X)=k(a1,1)P(w1|X)+k(a1,2)P(w2|X),
采取决策a2,X判为w2的风险
R2(a2|X)=k(a2,1)P(w1|X)+k(a2,2)P(w2|X),
其中k(ai,j)表示类别wj误判为类别wi的惩罚系数,一般k(ai,j),j=i取值为0,因为是正确判断。
若w1表示正常药品,w2表示为异常药品,则取k(a1,2)>k(a2,1),因为异常药品被判为正常药品的风险大,所以惩罚系数要大。
最后根据R1(X)和R2(X)哪一个风险小,来采取决策a1还是a2,从而确定X对于类别w1还是w2。


若特征X=(m1,m2,...,mn)中的各特征量相互独立,则联合概率可以表示成各分量的概率乘积,有P(X|wi)=P(m1,m2,...mn|wi)=P(m1|wi)*P(m2|wi)*...*P(mn|wi),从而X属于wi类的条件满足argmax P(m1|wi)*P(m2|wi)*...*P(mn|wi)*P(wi),这个过程称为朴素贝叶斯算法。

若此时有个别类wi下的一个特征P(m1|wi)=0,即某个类别没有出现m1特征项,从而会导致整个类条件概率密度函数P(X|wi)=0,即再待测试样例中有m1项,会导致其概率占统治地位,使整个P(X|wi)=0。所以在每个类中增加几个含特征m1的样本,所以需要采用一种估计概率,即如下定义的m-估计
(nc+mp)/(n+m)

其中nc为该类别中的样本数量,n为总样本数量,p为将要确定的概率的先验估计,m为等效样本大小的常量。


*****************************用于学习和分类文本的朴素贝叶斯算法************************************

知识学习过程:先验概率P(wi)可以由各类别数量占总样本数量来得出,然后选取训练样本的英文单词作为特征个体mk,由所有不重复的英文单词(特征个体)的集合组成特征向量,即X=(m1,m2,...,mn)。根据类别wi下单词mk所占的位置个数除以类别wi下总单词位置个数得出类条件概率密度函数P(mk|wi),即得到从类别wi中的任意文本中随机抽取的一个单词为英文单词mk的概率。最后可以计算后验概率

                                                            n

P(wi|X)=P(X|wi)*P(wi)/P(X)=P(m1,m2,...,mn)*P(wi)/P(X)=P(wi)*∏P(mk|wi)/P(X) (P(X)为一个常数,可以省去)

                                                            k=1

即得到了从观察到的特征X下属于wi类的概率大小、可能性大小。


决策分类过程:对于待测样品this is what is your expected xxx ...需要确定类别,将其文本用特征即英文单词描述即每个位置的单词带入到类条件概率密度函数,即

P(X|wi)=P(m1=this,m2=is,m3=what,m4=is,m5=your,...|wi)=P(m1=this|wi)P(m2=is|wi)P(m3=what|wi)P(m4=is|wi)P(m5=your|wi)...

然后计算P(wi)*P(X|wi)取最大值,即argmaxP(wi)*P(X|wi),即极大后验概率对应其在第i类。


Learn_native_bayes_text(training_examples,w)

training_examples为一组文本文档以及它们的目标值用于学习。w为所有可能目标值的集合。此函数作用是用于学习概率项P(mk|wi),它描述了从类别wi中的一个文档中随机抽取的一个单词为英文单词mk的概率。该函数也学习类别的先验概率P(wi)。

1.收集training_examples中所有的单词、标点符号以及其他符号

.Vocabulary <- 在training_examples中出现过的单词、记号的集合

2.计算所需要的概率项P(wi)和P(mk|wi)

.对于w中每个wi

...di <- training_examples中目标值为wi的文档子集

...P(wi) <- |di|/|training_examples|

...Ti <- 将di中所有成员连接起来建立单个文档

...n <- 在Ti中单词位置的总数。

...对Vocabulary中每个单词mk

.....nk <- 单词mk在Ti中占的位置个数

.....P(mk|wi) <- (nk+1)/(n+|Vacabulary|)  //|Vacabulary|为mk的所有可能值,如m-估计的p=1/|Vacabulary|

P(mk|wi)就是学习了training_examples后所获得的知识,即各类别wi出现单词mk的概率。


Classify_native_bayes_text(Doc)

对于文档Doc返回其估计的目标值。aj表示Doc中的第j个位置上出现的单词。

.Positions <- 在Doc中的所有单词位置,它包含能在Vacabulary中找到的记号

.返回vNB=argmaxP(wi)*P(a1,a2,...|wi)=argmaxP(wi)*∏P(aj|wi), aj∈Positions,wi∈w,即根据出现单词概率高低的来判断属于哪个类别。


说明:更加精确的做法是将训练样本中的第i个位置上的英文单词mk作为特征值,这样进行各类别进行概率密度函数学习时,需要统计各个位置上出现不同单词mk的概率,即每个位置都需要计算所有各英文单词出现的概率,这样的话光一个位置上单词计算量就是“类别数×英文单词总数(可参考字典上的单词总个数)”,如果要学习一个100单词组成的句子,那么总学习量是“100×类别数×英文单词总数”,可想而知,计算量相当大,故而退而其次,不考虑单词特定位置上的情况,就计算其出现在各类别的频率作为各类别下的条件密度函数。


贝叶斯学习决策算法的一个很重要的步骤就是特征选择,比如可以选择图像、英文字典中所有的单词、英文字母、数字等等作为特征。可以看出,特征必须是可以枚举出来的,不然如果出现一个未知特征,即在所有类中都没有出现过的特征,这就麻烦了,无法计算其只能简单的忽略它。所以特征的选择应该是以特征个体完全(比如26个英文字母作为特征个体就可以作为任何文本的特征,因为一个文本由不同英文字母排列组合而成,即特征个体是元变量)、离散值少、包含信息量大为原则,进一步,如果将0、1编码作为描述计算机模拟世界的特征元变量的话,而任何事物都可以编码为二进制数据信息,那么贝叶斯学习算法可以进行任何数据信息的学习与分类,无论从理论上还是实践上来说,这是具有重要意义的。另一个重要的步骤就是获得特征的概率分布函数,在处理离散特征个体,也就是可以枚举完的特征情况下,显然容易得到频率(频率=频数/总数)作为概率P(X|wi),但是如果特征是连续变量的情况下怎么获得P(X|wi)呢,一种显而易见的办法就是用高斯核函数来模拟其分布,即只要求出样本特征X的均值向量和协方差向量带入多元高斯分布即可。但是这种方法有个问题,虽然这种方法有中心极限定理保证,但是未必样本充分或者分布精确。这时候可以考虑用泛化器来得出概率分布函数,例如用神经网络来得出P(X|wi),这样的话无论离散特征还是连续特征,都可以运用贝叶斯学习决策方法来进行学习器设计。


另外,线性判别函数、神经网络、支持矢量机等泛化器h其实也可以看作是贝叶斯后验概率P(h|X)最大的h,似然度函数P(X|h)可以看作是某一个结构函数h上能观察到数据X的个数,即X落到曲线h上的点数、频数,而P(h)是函数空间中各种函数,显然具有相同的概率,P(X)是一个常数,可以忽略,于是P(h|X)的大小实际上由似然度函数P(X|h)决定。然后假设数据X为<ai,bi>,i=1,2,...,n,考虑到数据之间的独立性,即P(X|h)=P(<a1,b1>|h)*P(<a2,b1>|h)*...,又假设数据<ai,bi>满足正态分布,所以P(<ai,bi>|h)=o(-(bi-h(ai))^2) <=> -(bi-h(ai))^2,其中o为正态分布函数,于是P(X|h)<=>-(bi-h(ai))^2,推到这里可以发现,泛化器h的最大似然估计等价于样本值与模型预期值的差的平方和最小化(即最j小二乘法),这个就是在设计准则函数时为什么用2范数而不是n范数的原因。


结合上面两段,可以发现,实际上线性判别函数、神经网络、支持矢量机等泛化器也是基于贝叶斯方法的,可以说是贝叶斯方法的一个部分、一个简化步骤,即泛化器h就是为拟合数据样本点的似然度函数,即泛化器确定了条件概率密度分布函数P(X|h)(P(X|wi))。而因为忽略了各h下可以认为相等的P(h)和P(X),故其P(X|h)就是决定了贝叶斯极大后验假设(MAP)。所以我们可以把线性判别函数、神经网络、支持矢量机等泛化器的机器学习方法归结为贝叶斯学习方法。


补充,根据上面结论知道泛化器就是似然度函数(条件概率密度分布函数)。所以泛化器h或wi的参数学习则是各似然度P(X|h)或P(X|wi)的概率分布值的调整变化,即泛化器的参数假设空间(如神经网络权值参数假设空间)与似然度函数的各特征分布假设空间(如某特征是高斯分布、泊松分布还是其他分布,另一特征是高斯分布、泊松分布还是其他分布等价。




原创粉丝点击