欢迎来到天天文库
浏览记录
ID:59347250
大小:78.00 KB
页数:10页
时间:2020-10-31
《后验支持向量机学习报告.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、后验支持向量机学习报告1后验支持向量机支持向量机(SVM)是在由Vapnik等人发展的统计学习理论基础上发展起来的一类学习算法,通过对线性可分训练集按类间最大间隔设计分类器的方法来达到较好的推广能力。对于非线性可分的数据集引入了松弛变量来控制样本的误分率构造线性分类器,利用核方法推广线性分类器为非线性分类器。SVM能够较好的泛化能力,在许多问题上表现得很好,于是对SVM的研究受到人们很大的关注,同时SVM的使用也越来越广泛,但SVM仅能给出分类结果,而不能给出确切的各类的概率,而在很多应用场合中,人们不仅关注分类的结果,更关注分为各类的概率。如银行的信用欺诈检测,银行不仅想知道
2、哪些人存在欺诈的可能,更希望能知道每个人欺诈的概率,这样有助于银行做出更好地决策。贝叶斯分类器虽然能提供各类的后验概率,但贝叶斯分类器需要预先知道类条件概率密度,通常在实际问题中这是无法获取的。Vapnik提出一种将SVM的离散输出映射为概率的方法,Wahha研究再生核Hilbert空间的表示定理,应用到统计学习理论和SVM中。Platt等提出一种将支持向量机决策函数的输出映射为类后验概率的算法(PPSVM),这是本次学习的主要内容。2后验支持向量机PPSVMPlatt提出PPSVM,主要思想是用拟合一个后验概率的参数模型,将标准SVM的输出结果映射为后验概率。设SVM的输入为
3、,其中,误差函数:,Platt的主要工作就是找到Sigmoid函数用于近似支持向量机的后验概率,Sigmoid函数转换形式如下:其中,f为标准SVM的输出结果,表示在输出值f的条件下分类正确的概率。A和B是需要估计的参数值,其优化策略可以通过解最大似然问题来解决:其中,l为样本的数量,和分别是正类和负类样本的数量。这种参数估计方法会出现一些问题,分别是Sigmoid函数训练集的选择和如何避免拟合出错。最早训练Sigmoid函数所用的训练集是简单的和训练SVM共用训练集,但是这种方法容易f的估计造成偏差,对于非线性SVM这种偏差甚至是灾难性的。有两种方法可以较好解决这一问题,一是
4、将训练集保留一部分(通常是30%)用来训练Sigmoid函数,这就使训练SVM和训练Sigmoid函数的训练集分开,就不存在训练Sigmoid的样本中有支持向量造成Sigmoid函数的参数估计的不准确。第二种是采用交叉验证的方法,在三折交叉验证中,将训练集分为三部分,其中每次用其中的两份来训练SVM,另一份用来估计。用交叉验证的方法可以使Sigmoid函数的训练集变大,而且能够给出一个更小的A和B的估计方差。当数据集是一个非平衡数据集时,会出现Sigmoid函数的拟合出错,当样本只有少数正类而且与负类线性可分时,最大似然方法仍然简单地将A设为一个很大的负数,这可能会造成估计结果
5、中出现无穷量,通过对添加扰动可以避免这种情况出现,具体的做法是。3PPSVM实现我在matlab平台上对Platt的理论进行了实现,并进行实现。实验所使用的数据集是使用贝叶斯网络生成的数据,该数据集有共有4000个样本,3个离散属性。使用的是草地是否潮湿的模型,模型结构如下:对数据集采用实则交叉验证,使用SVM分类结果的准确性为93.63%,使用PPSVM分类结果为93.43%,实验结果显示使用PPSVM所取得的效果和单独使用SVM所取得的结果在准确率上相差不大,但使用PPSVM可以获得一个后验概率,这是Platt的最大贡献。附录附录1Sigmoid函数算法代码matlab实现
6、function[A,B]=Sigmoid_E(out,target,prior1,prior0)A=0;B=log((prior0+1)/(prior1+1));hiTarget=(prior1+1)/(prior1+2);loTarget=1/(prior0+2);lambda=10^(-3);olderr=10^30;[m,n]=size(target);pp=(prior1+1)/(prior1+prior0+2)*ones(m,n);count=0;forit=1:100a=0;b=0;c=0;d=0;e=0;fori=1:nif(target(i)==1)t=hiT
7、arget;elset=loTarget;endd1=pp(i)-t;d2=pp(i)*(1-pp(i));a=a+out(i)*out(i)*d2;b=b+d2;c=c+out(i)*d2;d=d+out(i)*d1;e=e+d1;endif(abs(d)<10^(-9)&&abs(e)<10^(-9))break;endoldA=A;oldB=B;while(1)det=(a+lambda)*(b+lambda)-c*c;if(det==0)lambda=lambda*10;contin
此文档下载收益归作者所有