1. 引言
最近在简单复现SVM算法时,了解了一下SVM输出标签概率的方法。简单记录于此,以求斧正于方家。
标准的SVM算法是将决策函数计算出的决策值输入符号函数然后输出标签,这个决策值是一个未校准值(uncalibrated value)而不是一个标签的后验概率P(class | input)。简而言之,标准的SVM算法无法直接输出标签的后验概率分布,而在某些场景下,例如需要根据输出标签的概率做全局最优决策,后验概率就显得十分必要。
2. 两种方式
为了解决这个问题,著名的SVM算法实现库libsvm采用了John C. Platt(1999)的一篇名为《Probabilistic Outputs for Support Vector Machinesand Comparisons to Regularized Likelihood Methods》论文中阐述的SVM概率计算的方法。
在文章中,Platt提到了两种使SVM输出后验概率的方式:
1. 直接训练一个带有逻辑关联函数(logit link function)和正则化的最大似然分数(regularized maximum likelihood score)的SVM模型;
2. 首先训练一个标准的SVM模型,然后额外训练一个可以将SVM模型的输出映射成概率的sigmoid函数。
2.1 联结函数
第一种方式的一种方法是由G. Wahba提出的,他使用了一个如下的逻辑联结函数:
其中f(x)为SVM的决策函数。训练SVM模型就是最小化一个负对数多项式似然(negative log multinomial likelihood)项加一个再生核希伯特空间(Reproducing Kernel Hilbert Space, RKHS)的正则项:
其中,输出一个后验概率。
然而Platt认为直接训练联结函数的方式导致的一个问题是使SVM模型失去参数的稀疏性(即除了支持向量和间隔内的向量之外的其他向量的系数都为0)。虽然以上训练的SVM也有方法可以克服这个缺点,但是不能直接训练出一个像标准SVM一样的稀疏模型