在【机器学习】推导支持向量机SVM二分类中,我们已经推导出线性核SVM的对偶优化问题:
J=∑iαi−12∑i∑jαiαjdidjk(xi)Tk(xj)=∑iαi−12∑i∑jαiαjdidjK(xi,xj)subject to ∑αidi=0,0≤αi≤C
在优化好 αi 拉格朗日量后,我们得到的w和b为:
w=∑αidixib=−(y1+y−1)/2
需要注意的是,
w
的表达式中有我们引入核函数 K(xi,xj) 到SVM,必须注意到 K(xi,xj)=ϕ(xi)Tϕ(xj) ,也就是说理论上核函数应该能拆开。在引入核函数的前提下,w的表达式为
w=∑αidiϕ(xi)T
我们已知几个常用核函数,比如多项式核函数和径向基核函数。多项式核函数的的定义为
K(xi,xj)=(xTixj+1)n
假设n=2,那么拆开为
K(xi,xj)=(xTi)2x2j+2xixj+1=[(xTi)2,2‾‾√xTi,1][(xTj)2,2‾‾√xTj,1]T
这里,我们可以确实求出w的值。
径向基核函数定义为
K(xi,xj)=e−(xi−xj)2σ2=e−x2iσ2e−x2jσ2exTixjσ2=e−x2iσ2e−x2jσ2∑k=0∞(2xTixj/σ2)kk!=[e−x2iσ2,1,21‾‾√xiσ,222!‾‾‾√(xiσ)2,...][e−x2jσ2,1,21‾‾√xjσ,222!‾‾‾√(xjσ)2,...]T
结果表明,
Φ(x)
函数是一个无限维度的函数。这说明,在工程上我们不一定能够完美地拆开核函数为
K(xi,xj)=ϕ(xi)Tϕ(xj)
。之后还有很多各种类型的核函数,比如使用了tanh函数的核函数,这些核函数在工程上是很难拆分求解的,很难获取
ϕ(x)
函数,亦难以求取w的确切值。
那么如何求解引入复杂核函数的SVM呢?在优化求解J之后,我们可以获取并保存 αi 。由于SVM只有少量支持向量(数据)对决策超平面有决定作用,很多拉格朗日参数 αi→0 ,我们可以只保存足够大的 αi 以及对应的训练数据 xi 、标记 di ,不直接计算出w的确切值,这在工程上是确实可行的。
当我们需要进行预测的时候,我们导入 αi , xi 和 di ,然后把新数据x代入核函数,计算 y=∑iαidiK(xi,x)+b 即可。