SVM概率输出原理

1.引言
libsvm中svmpredict函数指定-b参数后,可输出概率值,但是具体原理没有搞清楚,百度搜索,也没看到这方面的介绍,于是翻阅文章,才明白其原理。

2.SVM概率输出
标准的SVM的无阈值输出为
这里写图片描述 (1)
其中
这里写图片描述 (2)

Platt利用sigmoid-fitting方法,将标准SVM的输出结果进行后处理,转换成后验概率。
这里写图片描述 (3)

A,B为待拟合的参数,f为样本x的无阈值输出。sigmoid-fitting方法的优点在于保持SVM稀疏性的同时,可以良好的估计后验概率。

3.拟合sigmoid模型
用极大似然估计来估计公式(3)中的参数A,B。
定义训练集为(fi,ti),ti为目标概率输出值,定义为
这里写图片描述
yi为样本的所属类别,取值{-1,1}
极小化训练集上的负对数似然函数
这里写图片描述 (4)
其中
这里写图片描述

由于sigmoid函数的稀疏性(sigmoid(-5)=0.0067;sigmoid(5)=0.9933)而ti取值{0,1},要完全拟合目标值,就要求sigmoid的输入向实数轴两端靠拢,而sigmoid函数对数轴两端的值变化不敏感,难以区分,所以对ti做一个平滑处理,platt的做法是
SVM概率输出原理_第1张图片
其中N+为正样本的数目,N-为负样本的数目。

4.libsvm
4.1数值问题
求解(4)时遇到两个数值计算的问题;求解(4)的梯度与hessian矩阵如下
SVM概率输出原理_第2张图片

1) log与exp函数极易溢出,如果Afi+B较大,那么exp(Afi+B) →∞;而当pi→0时,log(pi) →∞,Platt对其作了修正让log(0)返回-200,但并不是一个好的办法
2) 这里写图片描述当pi→1时,极易导致”catastrophic cancellation”问题;如fi=1,(A,B)=(-64,0),在C++中1-pi将会返回0,而这里写图片描述 则会给出一个精度较好的结果

4.2 libsvm的改进
在libsvm中作者对这些问题给出了其解决办法
将公式(4)变换形式
SVM概率输出原理_第3张图片

具体使用的时候
If Afi+B>0 use(6) else use (5)

Reference
[1] Platt J. Probabilistic outputs for support vector machines and comparisons to regularized likelihood methods[J]. Advances in large margin classifiers, 1999, 10(3): 61-74.
[2] Lin H T, Lin C J, Weng R C. A note on Platt’s probabilistic outputs for support vector machines[J]. Machine learning, 2007, 68(3): 267-276.

你可能感兴趣的:(svm,概率输出,Machine,Learning)