SVM输出概率值的计算过程

来源:互联网 发布:java各个程度的书籍 编辑:程序博客网 时间:2024/06/04 17:58

老师要求svm输出概率值,然后发现libsvm已经自带了这个函数,网络上没有看到有说明,于是看了看相关文献自己写了一个。

首先附参考文献:

1.Probabilistic Outputsfor Support Vector Machines and Comparisons to Regularized Likelihood Methods

2.A Note on Platt’s Probabilistic Outputs for Support VectorMachines

Vector Machine。

主要参考文献是1,libsvm里采用的是论文1的思路输出的概率值。下面先列出一些基础知识。

1基础知识:

1.1 sigmoid函数



sigmoid函数是一个良好的阈值函数,连续,光滑,严格单调。

可以将实轴上的数值投射到[0,1]上,即将一个输出实值抓化为一个概率值。比如一个分类器的分界线为0,大于0标为+1,小于0标为-1;如果使用上图的sigmoid函数套一下输出值。我们就可以说,输出为0时标为+1的概率为0.5;输出为2时标为+1的概率为0.8等。

 

1.2后验估计

从极大似然估计到极大后验估计。基础知识在此不再详述。

下面是做N次独立重复实验的后验估计。


(http://wenku.baidu.com/link?url=hrFN6mmcRSSIST6k_fmz5JQ-Q6Hl8kAfpopvi91KENTqIPIvF431TyWXCbrNwGY4DfIayQv05RtTL6InvO9MaHfYUKGefcMpTtAY-lAMISO)



对上面第四点得到的后验估计求均值。参数的后验估计值为(X+1)/(N+2)

(有时后验估计取峰值,有时取均值,这个还不太明白。)

2 支持向量机输出概率值的方法。

首先输出的概率值的式子为:


同样采取一个sigmoid函数将支持向量机的输出值映射到[0,1]之间。我们知道支持向量机的决策函数为:


这个括弧里面的量是一个与分界面的距离成正比的量。这种算法的思想是离分界面越近的点认为分对的可能性越小;离分界面越远的点认为分对的可能性越大。

有两个参数A和B来调整映射值的大小,我们姑且叫它们位置参量(B)和尺度参量(A)。

然后这两个参数A和B是未知参数,需要估计。可能会想到用这式子来估计A和B的值:



论文中是这样写的

negative log likelihood of the training data, which is a cross-entropy error function

关于负log似然函数和交叉熵损失方程。这里有更详细的说明:

http://blog.csdn.net/u012162613/article/details/44239919

但是很直观可以看出,当y只能取+1或者-1时,这个式子就退化成一个极大似然估计函数。

使用这种方法是从全部的数据中估计A和B的值,Platt认为这种方法存在过拟合的风险,因此他假设存在一些out-of-sample的数据来修正的值,也就是不取1和0了

 

他采取了我们上文基础知识二所讲的贝叶斯方法:

这个式子和1.2中推倒的结果是一致的。

由此我们获得了最后的计算流程:

 

我对那个交叉熵还蛮感兴趣,准备研究一下。看完再补

 

 

1 0
原创粉丝点击