1.引言
libsvm中svmpredict函数指定-b参数后,可输出概率值,但是具体原理没有搞清楚,百度搜索,也没看到这方面的介绍,于是翻阅文章,才明白其原理。
2.SVM概率输出
标准的SVM的无阈值输出为
Platt利用sigmoid-fitting方法,将标准SVM的输出结果进行后处理,转换成后验概率。
A,B为待拟合的参数,f为样本x的无阈值输出。sigmoid-fitting方法的优点在于保持SVM稀疏性的同时,可以良好的估计后验概率。
3.拟合sigmoid模型
用极大似然估计来估计公式(3)中的参数A,B。
定义训练集为(fi,ti),ti为目标概率输出值,定义为
由于sigmoid函数的稀疏性(sigmoid(-5)=0.0067;sigmoid(5)=0.9933)而ti取值{0,1},要完全拟合目标值,就要求sigmoid的输入向实数轴两端靠拢,而sigmoid函数对数轴两端的值变化不敏感,难以区分,所以对ti做一个平滑处理,platt的做法是
4.libsvm
4.1数值问题
求解(4)时遇到两个数值计算的问题;求解(4)的梯度与hessian矩阵如下
1) log与exp函数极易溢出,如果Afi+B较大,那么exp(Afi+B) →∞;而当pi→0时,log(pi) →∞,Platt对其作了修正让log(0)返回-200,但并不是一个好的办法
2)
4.2 libsvm的改进
在libsvm中作者对这些问题给出了其解决办法
将公式(4)变换形式
具体使用的时候
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.
联系客服