• Support Vector Machine


    导言

    用logistic回归解决二分类问题时,后验概率(P(y=1|x; heta))由logistic函数(h_ heta(x)=g( heta^Tx))给出。当且仅当(h_ heta(x)geq 0.5)也就是( heta^Txgeq 0)时,我们预测样本类别标签(y=1)。( heta^Tx)越大,(h_ heta(x)=g( heta^Tx))越大。因此,当( heta^Txgg 0)时,我们很确定预测结果为(y=1);反之,若( heta^Txll 0),我们认为预测结果为(y=0)是最合理的。给定训练集,若能找到参数( heta),对所有标签为(y^{(i)}=1)的样本满足( heta^Tx^{(i)}gg 0),且对所有标签为(y^{(i)}=-1)样本满足( heta^Tx^{(i)}ll 0),那么最终的分类正确率会最高。稍后,我们用函数间隔来形式化这个思想。

    以下图为例,从更直观的角度简述另一种思路。图中红色的点表示正样本,绿色的点表示负样本,蓝色直线为( heta^Tx=0)给出的的决策边界(Decision Boundary),也称之为分割超平面(Hyperplane)。图中样本C离决策边界很远,我们可以很确定样本C的预测结果为(y=1);样本A离决策边界很久,如果决策边界发生轻微的偏转,样本A很可能被划分到另外一类。对于给定的训练集,如果我们能找到一条决策边界,使得所有样本都尽可能离决策边界很远,那么我们的预测结果可信度也会更高。在这里,样本点与决策面之间的距离衡量标准为几何间隔。

    我们从解决二分类问题的线性分类器着手,逐步深入地介绍SVM。为了便于表述,样本类别标签定义为(yin{-1,1})。分类器的参数为(w)和(b),形式如下 egin{equation} h_{w,b}(x)=g(w^Tx+b)= leftlbraceegin{array}{cc} +1 & ,w^Tx+bgeq 0\ -1 & ,w^Tx+b<0 end{array} ight. end{equation}由函数定义可知,分类器(h_{w,b})会直接输出样本的预测值,而不会经历logistic回归中估算(P(y=1|x))的中间步骤。

    函数间隔和几何间隔

    给定(m)个训练样本组成的训练集(mathcal{S}={(x^{(i)},y^{(i)});i=1,cdots,m})。 针对样本((x^{(i)},y^{(i)}))的函数间隔(Functional Margin)为: egin{equation} hat{gamma}^{(i)}=y^{(i)}(W^Tx^{(i)}+b) end{equation}函数间隔越大意味着我们对预测结果的正确性越有信心。整个训练集上的函数间隔定义为: egin{equation} hat{gamma}=min_{i=1,cdots,m}hat{gamma}^{(i)} end{equation}(hat{gamma})也就是支持向量对应函数间隔。 针对样本((x^{(i)},y^{(i)}))的几何间隔(Geometric Margin)为: egin{equation} gamma^{(i)}=frac{y^{(i)}(W^Tx^{(i)}+b)}{|w|}=frac{hat{gamma}^{(i)}}{|w|} end{equation}整个训练集上的几何间隔定义为: egin{equation} gamma=min_{i=1,cdots,m}gamma^{(i)} end{equation}(gamma)也就是支持向量对应几何间隔。

    最优间隔分类器

    最优间隔分类器(Optimal Margin Classifier)的意图在于把样本点和超平面之间最坏情况下的距离最大化,也就是寻找一个最优超平面,使得支持向量离超平面最远,实现不同类样本最大限度线性可分。函数间隔只能通过正负号反映分类正确与否,正号表示分类正确,负号表示分类错误;而样本间线性可分程度实际上是由几何间隔决定的。

    1. 最优间隔分类器最直观的目标函数如下: egin{equation} egin{array}{l} underset{hat{gamma},w,b}{max}quad gamma \ s.t. quad y^{(i)}(W^Tx^{(i)}+b)geqgamma,i=1,cdots,m \ largeqquad |w|=1 end{array} end{equation}约束条件(|w|=1)是为了保证函数间隔等于几何间隔,但该约束把参数空间限定在超球面上,没有较好的优化方法来求解这类问题。
    2. 函数间隔是几何间隔的(|w|)倍,利用这层关系将目标函数转化为如下形式: egin{equation} egin{array}{l} underset{hat{gamma},w,b}{max}quad frac{hat{gamma}}{|w|} \ s.t. quad y^{(i)}(W^Tx^{(i)}+b)geqhat{gamma},i=1,cdots,m end{array} end{equation}目标仍然是求训练集上几何间隔的最大值,但上一个目标函数的两个约束条件简化成了对函数间隔的约束。
    3. 几何间隔对(|w|)和(hat{gamma})具有伸缩不变性。以相同倍数缩放(|w|)和(hat{gamma}),直到(hat{gamma}=1),此时几何间隔保持不变。目标函数进一步简化为: egin{equation} egin{array}{l} underset{w,b}{max}quad frac{1}{|w|} \ s.t. quad y^{(i)}(W^Tx^{(i)}+b)geq 1,i=1,cdots,m end{array} end{equation}
    4. 由于(maxfrac{1}{|w|} ightleftharpoonsminfrac{1}{2}|w|^2),我们最终得到如下的目标函数: egin{equation} egin{array}{l} underset{w,b}{min}quad frac{1}{2}|w|^2 \ s.t. quad y^{(i)}(W^Tx^{(i)}+b)geq 1,i=1,cdots,m end{array} end{equation}

    核函数

    对于线性不可分的问题,我们也可以通过将数据映射到维度更高的特征空间,部分甚至完全将其解决。如下左图所示,红色和绿色所示的正负样本分别集中在两个同心圆上,在二维的输入空间中不可能实现线性可分。但是我们可以很容易找到蓝色圆环环所示的超平面,将两类样本完美划分开。二元二次曲线的通式为(a_1x_1^2+a_2x_2^2+a_3x_1x_2+a_4x_1+a_5x_2+a_6=0),也就是说,我们将二维空间中的样本映射到五维空间,其对应的特征表示由((x_1,x_2))变为((x_1^2,x_2^2,x_1x_2,x_1,x_2)),这样我们就可以在五维空间中构造相应的超平面将所有样本划分开。如下右图的线性不可分情况较左图复杂很多,但我还是可以找到红色曲线所示的分割面,显然这条红色曲线需要更高阶的多项式来表示。沿用左图的思想,我们仍然可以将样本映射到高维空间后实现线性可分。


    下图更为直观得显示出了Kernel的神奇之处

    特征映射(Feature Mapping)函数(phi)将数据(x)从输入空间映射到高维甚至无限维的特征空间中,对应的核函数(K)定义如下: egin{equation} K(x_1,x_2)=<phi(x_1),phi(x_2)>=phi(x_1)^Tphi(x_2) end{equation}其中,输入空间的两个样本点(x_1)和(x_2)经过函数(phi)分别被映射到特征空间中的(phi(x_1))和(phi(x_2)),(<cdot,cdot>)表示内积运算。 假设(x_1=(eta_1,eta_2)^T,x_2=(epsilon_1,epsilon_2)^T),核函数形式为: egin{equation} egin{array}{ll} K(x_1,x_2)&=left(<x_1,x_2>+1 ight)^2\ &=left((eta_1epsilon_1+eta_2epsilon_2)+1 ight)^2\ &=(eta_1epsilon_1+eta_2epsilon_2)^2+2(eta_1epsilon_1+eta_2epsilon_2)+1\ &=eta_1^2epsilon_1^2+eta_2^2epsilon_2^2+2eta_1epsilon_1eta_2epsilon_2+2eta_1epsilon_1+2eta_2epsilon_2+1\ &=<phi(x_1),phi(x_2)> end{array} end{equation}满足条件的映射函数(phi):(phi(x_1)=(eta_1^2,eta_2^2,sqrt{2}eta_1eta_2,sqrt{2}eta_1,sqrt{2}eta_2,1)^T),(phi(x_2)=(epsilon_1^2,epsilon_2^2,sqrt{2}epsilon_1epsilon_2,sqrt{2}epsilon_1,sqrt{2}epsilon_2,1)^T)。每个核函数必然对应一种映射关系,但并非所有的特征映射函数(phi)都可以很容易求解出来。(<phi(x_1),phi(x_2)>=K(x_1,x_2))告诉我们特征空间的内积运算可以在输入空间通过核函数计算出来,因此根本没必要知道核函数对应的(phi)。 常见的核函数有如下几种形式: egin{equation} ext{线性核函数:}K(x,y)=x^Ty+c end{equation} egin{equation} ext{多项式核函数:}K(x,y)=(alpha x^Ty+c)^d end{equation} egin{equation} ext{高斯核函数:}K(x,y)=expleft(-frac{|x-y|^2}{2sigma^2} ight) end{equation} egin{equation} ext{Sigmoid核函数:}K(x,y)= anh(alpha x^Ty+c) end{equation} 有的核函数还可以反应样本间的相似程度, 比如我们可以选择高斯核函数: egin{equation} K(x,y)=expleft(-frac{|x-y|^2}{2sigma^2} ight) end{equation}若(x)与(z)极为相似,(K(x,z)approx 1);反之,若两者差异很大,(K(x,z)approx 0)。 一个有效的核函数到底有哪些性质呢?给定数据集({x^{(1)},x^{(2)},cdots,x^{(m)}}),定义在该数据集上(m imes m)的核矩阵(Kernel Matrix)为(K_{ij}=K(x^{(i)},x^{(j)}))。核矩阵有如下两条性质:

    • 对称性(Symmetric)。 egin{equation} K(x_i,x_j)=langlephi(x_i),phi(x_j) angle=langlephi(x_j),phi(x_i) angle=K(x_j,x_i) end{equation}
    • 半正定(Positive semi-definite)。对任意(zinmathcal{R}^m), egin{align} z^TKz&=sum_isum_jz_iK_{ij}z_j\ &=sum_isum_jz_ileft(sum_k phi_k(x_i)phi_k(x_j) ight)z_j\ &=sum_kleft(sum_iz_iphi_k(x_i) ight)left(sum_jz_jphi_k(x_j) ight)\ &=sum_kleft(sum_iz_iphi_k(x_i) ight)^2geq 0 end{align}

    核函数有效的充要条件:对于给定的任意数据集({x^{(1)},x^{(2)},cdots,x^{(m)}}),核矩阵对称半正定。 核函数的巧妙之处在于样本在特征空间中的内积运算可以由核函数在维度较低的输入空间中完成。一方面,我们无需显示计算出映射函数(phi);另一方面,可以规避高维空间的内积操作带来的诸多问题。 那么,什么样的核函数才是最好的?目前没有选择合适核函数的指导性原则。我们只能通过经验知识针对特定问题选择性能较优的核函数;或者对多个核函数进行交叉验证,最终选择实验效果最好的核函数。目前,将多个核函数融合形成混合核函数也是一大研究热点。 实际上,核函数的应用范围非常广。只要算法能用内积形式表述,就可以将其替换为核函数,使得算法能在核函数对应的高维空间发挥作用。

    软间隔

    我们用下图所示的例子讨论软间隔问题。在下图中,如果没有标号为1和2的两个样本点,我们可以找到红色直线所示间隔最大的分割超平面。现实不可能那么完美,标号为1的样本点迫使最优间隔超平面变成蓝色直线所在位置,样本间的间隔变得很小;标号为2的样本点直接使整个数据集在输入空间变成线性不可分了。我们注意到,这两个样本点离各自所属的群体都很远,我们称这些偏离群体的个别样本点为离群点(Outliers)。

    离群点的存在主要有两个因素:1)数据集中存在噪声;2)给定的数据集规模太小,不具有代表性。在实际问题中,噪声总是存在的。将噪声点当作正常样本对待显然不明智;完全忽略噪声点也不可取。因为在数据集有限的情况下,这些看似噪声的数据既可能真的是由于各种差错而出现的噪声,也有可能反应了问题的属性,只是我们碰巧只收集到这类数据中的几个样本。我们唯一能确定的就是噪声点具有诸多不确定性。为了保证模型对噪声具有较好的鲁棒性,就要有容忍噪声的博大胸怀,部分考虑它们的建议(这其中似乎又蕴藏了深刻的哲理,细细体会)。

    为了让模型在一定程度上考虑离群点的影响,引入松弛变量和惩罚因子,目标函数如下: egin{equation} egin{array}{l} underset{w,b}{min}quad frac{1}{2}|w|^2+Csum_{i=1}^mepsilon_i\ s.t. quad y^{(i)}(W^Tx^{(i)}+b)geq 1-epsilon_{i},i=1,cdots,m\ largeqquad epsilon_igeq 0,i=1,cdots,m end{array} end{equation}其中(epsilon_i)为松弛变量(slack variable),表示误分类的样本与分割超平面之间的距离,正确分类的样本对应的松弛变量为0。(C)为惩罚因子,表示对离群点的重视程度。

    从目标函数可以看出,当(C)为(+infty)时,(epsilon_i)必然为0才能使目标函数最小,这意味着那些离群点要被正确划分到所属的类别;当(C=0)时,离群点对应的(epsilon_i)不会影响目标函数,相当于离群点完全被忽略(如下图所示)。(y^{(i)}(w^Tx^{(i)}+b)>0)说明样本被正确分类;被误分类的样本对应的(epsilon_i>1),但我们不鼓励误分类情况的出现,因此在原有的目标函数后加上惩罚项。

    %上图的Matlab代码如下:
    figure;
    load fisheriris
    X = [meas(:,1), meas(:,2)];
    % Extract the Setosa class
    Y = nominal(ismember(species,'setosa'));
    % Randomly partitions observations into a training set and a test
    % set using stratified holdout
    P = cvpartition(Y,'Holdout',0.20);
    % Use a linear support vector machine classifier
    subplot(1,2,1);
    svmStruct = svmtrain(X(P.training,:),Y(P.training),'showplot',true,'boxconstraint',0.01);
    C = svmclassify(svmStruct,X(P.test,:),'showplot',true);
    errRate = sum(Y(P.test)~= C)/P.TestSize  %mis-classification rate
    conMat = confusionmat(Y(P.test),C) % the confusion matrix
    title(['C=0.01']);
    subplot(1,2,2);
    svmStruct = svmtrain(X(P.training,:),Y(P.training),'showplot',true,'boxconstraint',100);
    C = svmclassify(svmStruct,X(P.test,:),'showplot',true);
    errRate = sum(Y(P.test)~= C)/P.TestSize  %mis-classification rate
    conMat = confusionmat(Y(P.test),C) % the confusion matrix
    title('C=100')

    对偶

    在前面的章节中,我们一步步导出了SVM的目标函数,那么怎样求解呢?整个求解的思路基本分为三步:1)定义原优化问题;2)根据原问题导出对偶问题;3)通过求解对偶问题间接求解原问题。 根据目标函数定义拉格朗日函数: egin{equation} egin{array}{ll} L(w,b,epsilon,alpha,eta)&=frac{1}{2}|w|^2+Csum_{i=1}^mepsilon_i\ &quad-sum_{i=1}^malpha_ileft(y^{(i)}(w^Tx^{(i)}+b)+epsilon_i-1 ight)-sum_{i=1}^meta_iepsilon_i end{array} end{equation} egin{equation} Q_P(w,b,epsilon)=underset{alpha_1geq 0,eta_igeq 0}{max}L(w,b,epsilon,alpha,eta) end{equation} egin{equation} Q_D(alpha,eta)=underset{w,b,epsilon_igeq 0}{min}L(w,b,epsilon,alpha,eta) end{equation} 原问题(Primal Problem)定义如下: egin{equation} p^*=underset{w,b,epsilon_igeq 0}{min}Q_P(w,b,epsilon) end{equation} 对偶问题(Dual Problem)定义如下: egin{equation} d^*=underset{alpha_igeq 0,eta_igeq 0}{max}Q_D(alpha,eta) end{equation} 原问题与对偶问题之间的关系为: egin{equation} p^*geq d^* end{equation} 当且仅当参数满足KKT条件时,(p^*=d^*)。KKT条件如下: egin{align} leftlbrace egin{array}{l} abla_w L(W,b,epsilon,alpha,eta)=0\ abla_b L(W,b,epsilon,alpha,eta)=0\ abla_epsilon L(W,b,epsilon,alpha,eta)=0\ alpha_igeq 0\ y^{(i)}(w^Tx^{(i)}+b)+epsilon_i-1geq 0\ alpha_ileft(y^{(i)}(w^Tx^{(i)}+b)+epsilon_i-1 ight)=0\ eta_igeq 0\ epsilon_igeq 0\ eta_iepsilon_i=0 end{array} ight. end{align} 将拉格朗日函数对参数(w,b,epsilon)的偏导设置为0: egin{equation} abla_w L(w,b,epsilon,alpha,eta)=w-sum_{i=1}^malpha_iy^{(i)}x^{(i)}=0Rightarrow w=sum_{i=1}^malpha_iy^{(i)}x^{(i)} end{equation} egin{equation} abla_b L(w,b,epsilon,alpha,eta)=-sum_{i=1}^malpha_iy^{(i)}=0Rightarrow sum_{i=1}^malpha_iy^{(i)}=0 end{equation} egin{equation} abla_{epsilon_i}L(w,b,epsilon,alpha,eta)=C-alpha_i-eta_i=0Rightarrow alpha_i+eta_i=C end{equation} 将上述三个结论带入拉格朗日函数: egin{equation} egin{array}{cl} &L(w,b,epsilon,alpha,eta)\ &=frac{1}{2}left(sum_{i=1}^malpha_iy^{(i)}x^{(i)} ight)^Tleft(sum_{j=1}^malpha_jy^{(j)}x^{(j)} ight) +Csum_{i=1}^mepsilon_i\ &quad-sum_{i=1}^malpha_iy^{(i)}left(sum_{j=1}^malpha_jy^{(j)}x^{(j)} ight)^Tx^{(i)}-bsum_{i=1}^malpha_iy^{(i)}\ &quad-sum_{i=1}^malpha_iepsilon_i+sum_{i=1}^malpha_i-sum_{i=1}^meta_iepsilon_i\ &=frac{1}{2}sum_{i=1}^msum_{j=1}^malpha_ialpha_jy^{(i)}y^{(j)}langle x^{(i)},x^{(j)} angle+Csum_{i=1}^mepsilon_i\ &quad-sum_{i=1}^msum_{j=1}^malpha_ialpha_jy^{(i)}y^{(j)}langle x^{(i)},x^{(j)} angle-bsum_{i=1}^malpha_iy^{(i)}\ &quad-sum_{i=1}^m(alpha_i+eta_i)epsilon_i+sum_{i=1}^malpha_i\ &=sum_{i=1}^malpha_i-frac{1}{2}sum_{i=1}^msum_{j=1}^malpha_ialpha_jy^{(i)}y^{(j)}langle x^{(i)},x^{(j)} angle\ &=W(alpha) end{array} end{equation} 我们可以根据(h_{w,b}(x))预测样本的类别: egin{equation} h_{w,b}(x)=g(w^Tx+b)=g(sum_{i=1}^malpha_iy^{(i)}langle x^{(i)},x angle+b) end{equation} 由(w=sum_{i=1}^malpha_iy^{(i)}x^{(i)})知,真正对(w)具有决定权的样本对应的拉格朗日乘子(alpha_i)不为0;又根据KKT条件中的(alpha_ileft(y^{(i)}(w^Tx^{(i)}+b)+epsilon_i-1 ight)=0),必然有(left(y^{(i)}(w^Tx^{(i)}+b)+epsilon_i-1 ight)=0),而满足该条件的仅包括支持向量和被误分类的样本。根据函数(h_{w,b}(x)),真正参与后期分类任务的样本同样只涉及到支持向量和被误分类的样本。支持向量和误分类的样本在整个数据集中的所占的比例往往非常小,一旦支持向量机在特定数据集上训练好后,我们只需要保留支持向量和被误分类的样本即可。如此以来,即使训练集有上百万个训练样本,我们最终需要保留下来的可能只有几百个样本,SVM的效率之高由此可见一斑! 在(W(alpha))和(h_{w,b}(x))中,都涉及到内积运算,我们在后面的讨论中会直接引入核函数,用(K_{ij})替换(langle x^{(i)},x^{(j)} angle)。 此外,结合KKT条件和(alpha_i+eta_i=C),我们还可以推导出在后面的顺序最小优化中会用到的三个结论:

    1. 当(alpha_i=0)时,(y^{(i)}(w^Tx^{(i)}+b)geq 1),证明如下: egin{align*} egin{array}{l} ext{因为} alpha_i=0,alpha_i+eta_i=C\ ext{所以}  eta_i=C\ ext{因为} eta_iepsilon_i=0\ ext{所以}  epsilon_i=0\ ext{因为} y^{(i)}(w^Tx^{(i)}+b)+epsilon_i-1geq 0\ ext{所以}  y^{(i)}(w^Tx^{(i)}+b)geq 1 end{array} end{align*}
    2. 当(alpha_i=C)时,(y^{(i)}(w^Tx^{(i)}+b)leq 1),证明如下: egin{align*} egin{array}{l} ext{因为} alpha_i=C,alpha_i+eta_i=C\ ext{所以}  eta_i=0\ ext{因为} eta_iepsilon_i=0,epsilon_igeq 0\ ext{所以}  epsilon_igeq 0\ ext{因为} alpha_ileft(y^{(i)}(w^Tx^{(i)}+b)+epsilon_i-1 ight)=0\ ext{所以}  y^{(i)}(w^Tx^{(i)}+b)+epsilon_i-1=0\ ext{所以}  y^{(i)}(w^Tx^{(i)}+b)=1-epsilon_ileq 1 end{array} end{align*}
    3. 当(0< alpha_i < C)时,(y^{(i)}(w^Tx^{(i)}+b)=1),证明如下: egin{align*} egin{array}{l} ext{因为} 0< alpha_i < C,alpha_i+eta_i=C\ ext{所以} 0< eta_i < C\ ext{因为} eta_iepsilon_i=0\ ext{所以}  epsilon_i=0\ ext{因为} alpha_ileft(y^{(i)}(w^Tx^{(i)}+b)+epsilon_i-1 ight)=0\ ext{所以}  y^{(i)}(w^Tx^{(i)}+b)+epsilon_i-1=0\ ext{所以}  y^{(i)}(w^Tx^{(i)}+b)=1 end{array} end{align*}

    顺序最小优化

    我们先引入坐标上升(Coordinate Ascent)算法,然后由此引出顺序最小优化(Sequential Minimal Optimization,SMO)算法。坐标上升要解决的优化问题形式如下: egin{equation} underset{alpha}{max} W(alpha_1,alpha_2,cdots,alpha_m) end{equation}优化规则概括为:1)固定除了(alpha_i)之外的所有其他参数;2)搜寻使(W)最优的参数(alpha_i);3)按照(alpha_1,alpha_2,cdots,alpha_m)的顺序不断重复前两步直到收敛。下图是该算法的优化示意图,其中蓝色的折线为向前移动的轨迹,每次移动的轨迹都与坐标轴平行,因为每次只更新了一个参数。

    对有多个参数的优化问题,我们不必每次都按照固定的顺序逐个优化参数,可以尝试优先选择对问题的优化贡献最大的参数。

    回到顺序最小优化算法上来,这里的最小指的是每次用最少的参数进行优化。我们面临的对偶问题如下: egin{equation} egin{array}{l} underset{alpha}{max} W(alpha)=sum_{i=1}^malpha_i-frac{1}{2}sum_{i=1}^msum_{j=1}^malpha_ialpha_jy^{(i)}y^{(j)}langle x^{(i)},x^{(j)} angle \ s.t. quad sum_{i=1}^malpha_iy^{(i)}=0 \ largeqquad 0leqalpha_ileq C,i=1,cdots,m end{array} end{equation} 这里的等式约束(sum_{i=1}^malpha_iy^{(i)}=0)使得坐标上升算法不能直接用于优化对偶问题。如果我们固定除(alpha_i)外的所有参数,由于等式关系的存在,(alpha_i)也就成为被固定的常数而不是可以优化的变量。如果要利用坐标上升的思想解决这个优化问题,必须选择至少两个参数作为变量,并固定其他所有参数,然后同时优化选出的参数。SMO算法的思想与坐标上升基本一致:1)用启发式方法选择一对参数(alpha_i,alpha_j),这对参数使目标函数以最快的速度靠近全局最优值;2)针对参数(alpha_i,alpha_j)优化目标函数(W(alpha)),并固定其他所有参数;3)不断重复前两步直至收敛。 不失一般性,任意选择一对参数(alpha_1,alpha_2)作为变量,并固定其他所有参数。由等式约束得到下式: egin{equation} alpha_1y^{(1)}+alpha_2y^{(2)}=-sum_{i=3}^malpha_ky^{(k)}=zetaRightarrow alpha_1+y^{(1)}y^{(2)}alpha_2=y^{(1)}zeta end{equation}(alpha_1,alpha_2)需要满足的约束条件为(0leqalpha_1leq C,0leqalpha_2leq C),也就是(alpha_1,alpha_2)的参数空间被固定在一个矩形框中,称这种约束为"Box Constraint"。 前面已经说过,(y^{(i)}in{-1,1}),当(y^{(1)},y^{(2)})取不同值时会影响参数的范围。下面分两种情况讨论参数的上下界。

    • 若(y^{(1)}cdot y^{(2)}=-1),有(alpha_1-alpha_2=t),那么可能有下图所示的两种情况:

      (alpha_2)的上下界形式如下: egin{equation} egin{array}{l} H=min(C,C+alpha_2-alpha_1)\ L=max(0,alpha_2-alpha_1) end{array} end{equation}

    • 若(y^{(1)}cdot y^{(2)}=1),有(alpha_1+alpha_2=t),那么也可能有下图所示的两种情况:

      (alpha_2)的上下界形式如下: egin{equation} egin{array}{l} H=min(C,alpha_1+alpha_2)\ L=max(0,alpha_1+alpha_2-C) end{array} end{equation}

    若将除(alpha_1,alpha_2)之外的所有参数固定,则(W(alpha))可视为关于(alpha_1,alpha_2)的函数: egin{equation} egin{array}{ll} &quad W(alpha_1,alpha_2)\ &=sum_{i=1}^malpha_i-frac{1}{2}sum_{i=1}^msum_{j=1}^malpha_ialpha_jy^{(i)}y^{(j)}K_{ij}\ &=alpha_1+alpha_2+sum_{i=3}^malpha_i\ &quad -frac{1}{2}sum_{i=1}^mleft(sum_{j=1}^2y^{(i)}y^{(j)}alpha_ialpha_jK_{ij}+sum_{j=3}^my^{(i)}y^{(j)}alpha_ialpha_jK_{ij} ight)\ &=alpha_1+alpha_2+sum_{i=3}^malpha_i\ &quad -frac{1}{2}sum_{i=1}^2left(sum_{j=1}^2y^{(i)}y^{(j)}alpha_ialpha_jK_{ij}+sum_{j=3}^my^{(i)}y^{(j)}alpha_ialpha_jK_{ij} ight)\ &quad-frac{1}{2}sum_{i=3}^mleft(sum_{j=1}^2y^{(i)}y^{(j)}alpha_ialpha_jK_{ij}+sum_{j=3}^my^{(i)}y^{(j)}alpha_ialpha_jK_{ij} ight)\ &=alpha_1+alpha_2+sum_{i=3}^malpha_i-frac{1}{2}sum_{i=1}^2sum_{j=1}^2y^{(i)}y^{(j)}alpha_ialpha_jK_{ij}\ &quad -sum_{i=1}^2sum_{j=3}^my^{(i)}y^{(j)}alpha_ialpha_jK_{ij}-frac{1}{2}sum_{i=3}^msum_{j=3}^my^{(i)}y^{(j)}alpha_ialpha_jK_{ij} end{array} end{equation} 令(V_i=sum_{j=3}^my{(j)}alpha_jK_{ij}),则上式简化为: egin{equation} egin{array}{ll} W(alpha_1,alpha_2)&=alpha_1+alpha_2-frac{1}{2}alpha_1^2K_{11}-y^{(1)}y^{(2)}alpha_1alpha_2K_{12}\ &quad-frac{1}{2}alpha_2^2K_{22}-y^{(1)}alpha_1V_1-y^{(2)}alpha_2V_2+const end{array} end{equation} 将(alpha_1=y^{(1)}eta-y^{(1)}y^{(2)}alpha_2)带入上式,(W(alpha_1,alpha_2))简化为关于(alpha_2)的函数: egin{equation} egin{array}{ll} &quad W(alpha_2)\ &=y^{(1)}zeta-y^{(1)}y^{(2)}alpha_2+alpha_2-frac{1}{2}(y^{(1)}zeta-y^{(1)}y^{(2)}alpha_2)^2K_{11}\ &quad-y^{(1)}y^{(2)}(y^{(1)}zeta-y^{(1)}y^{(2)}alpha_2)alpha_2K_{12}-frac{1}{2}alpha_2^2K_{22}\ &quad-y^{(1)}(y^{(1)}eta-y^{(1)}y^{(2)}alpha_2)V_1-y^{(2)}alpha_2V_2+const\ &=y^{(1)}zeta-y^{(1)}y^{(2)}alpha_2+alpha_2-frac{1}{2}(zeta^2-2y^{(2)}zetaalpha_2+alpha_2^2)K_{11}\ &quad-(y^{(2)}zeta-alpha_2)alpha_2K_{12}-frac{1}{2}alpha_2^2K_{22}-(eta-y^{(2)}alpha_2)V_1\ &quad-y^{(2)}alpha_2V_2+const\ &=-frac{1}{2}(K_{11}-2K_{12}+K_{22})alpha_2^2\ &quad +y^{(2)}(y^{(2)}-y^{(1)}+zeta K_{11}-zeta K_{12}+V_1-V_2)alpha_2+const\ &=Aalpha_2^2+Balpha_2+C end{array} end{equation} (W(alpha_2))形式上为一元二次函数,现在分析一下(A)的情况,以便确定(W(alpha_2))在何处取得最大值。假设(phi(x_1)=(a_1,a_2,cdots,a_n),phi(x_2)=(b_1,b_2,cdots,b_n)),则有 egin{align} &K_{11}=langle phi(x_1),phi(x_1) angle=sum_{i=1}^na_i^2\ &K_{12}=langlephi(x_1),phi(x_2) angle=sum_{i=1}^na_ib_i\ &K_{22}=langlephi(x_2),phi(x_2) angle=sum_{i=1}^nb_i^2\ end{align} egin{equation} egin{array}{l} a_i^2+b_i^2-2a_ib_i=(a_i-b_i)^2geq 0\ Rightarrow K_{11}-2K_{12}+K_{22}geq 0\ Rightarrow Aleq 0 end{array} end{equation} 在用启发式方法选择(alpha_1)和(alpha_2)时,我们会选择使(A eq 0)的一对参数,所以(W(alpha_2))的曲线图为开口向下的抛物线,最大值在极值点处取得。 egin{equation} egin{array}{ll} frac{partial W(alpha_2)}{partialalpha_2}&=-(K_{11}-2K_{12}+K_{22})alpha_2\ &quad +y^{(2)}(y^{(2)}-y^{(1)}+zeta K_{11}-zeta K_{12}+V_1-V_2) end{array} end{equation} 引入以下三个变量: egin{align} &f_i=sum_{i=1}^my^{(j)}alpha_jK_{ij}+b\ &E_i=f_i-y^{(i)}\ &V_i=f_i-sum_{j=1}^2y^{(j)}alpha_jK_{ij}-b end{align} 又有(alpha_1=y^{(1)}eta-y^{(1)}y^{(2)}alpha_2),令(W(alpha_2))针对(alpha_2)的偏导为0: egin{equation} egin{array}{ll} &quad (K_{11}-2K_{12}+K_{22})alpha_2^{new}\ &=y^{(2)}[y^{(2)}-y^{(1)}+zeta(K_{11}-K_{12})\ &quad +(f_1-y^{(1)}alpha_1^{old}K_{11}-y^{(2)}alpha_2^{old}K_{12}-b)\ &quad-(f_2-y^{(1)}alpha_1^{old}K_{21}-y^{(2)}alpha_2^{old}K_{22}-b)]\ &=y^{(2)}[(f_1-y^{(1)})-(f_2-y^{(2)})+zeta(K_{11}-K_{12})\ &quad -(zeta-y^{(2)}alpha_2^{old})K_{11}-y^{(2)}alpha_2^{old}K_{12}\ &quad +(zeta-y^{(2)}alpha_2^{old})K_{12}+y^{(2)}alpha_2^{old}K_{22}]\ &=y^{(2)}[(f_1-y^{(1)})-(f_2-y^{(2)})\ &quad +y^{(2)}alpha_2^{old}(K_{11}-2K_{12}+K_{22})]\ &=(K_{11}-2K_{12}+K_{22})alpha_2^{old}+y^{(2)}(E_1-E_2) end{array} end{equation} 最后,我们得到如下的更新规则: egin{equation} alpha_2^{new}=alpha_2^{old}+frac{y^{(2)}(E_1-E_2)}{K_{11}-2K_{12}+K_{22}} end{equation} 注意(alpha_2)存在上下界,而上面根据极值点求出的(alpha_2^{new})很可能不在上下界确定的区间内: egin{equation} alpha_2^{new}leftlbrace egin{array}{ll} L, & alpha_2^{new}leq L\ alpha_2^{new}, & L<alpha_2^{new}<H\ H, & alpha_2^{new}geq H end{array} ight. end{equation} 根据(alpha_1)和(alpha_2)在更新前后都必须要满足的线性约束条件,很容易求出(alpha_1^{new}): egin{equation} egin{array}{ll} &alpha_1^{new}+y^{(1)}y^{(2)}alpha_2^{new}=y^{(1)}zeta=alpha_1^{old}+y^{(1)}y^{(2)}alpha_2^{old}\ &Rightarrow alpha_1^{new}=alpha_1^{old}+y^{(1)}y^{(2)}(alpha_2^{old}-alpha_2^{new}) end{array} end{equation} 有了(alpha_i)的更新规则,我们可以确定分割超平面的方向向量(w),那么我们又如何确定(b)的值呢?前面推导出了一个结论: egin{equation} leftlbrace egin{array}{l} alpha_i=0Rightarrow y^{(i)}(w^Tx^{(i)}+b)geq 1\ alpha_i=CRightarrow y^{(i)}(w^Tx^{(i)}+b)leq 1\ 0<alpha_i<CRightarrow y^{(i)}(w^Tx^{(i)}+b)=1 end{array} ight. end{equation} 下面根据(alpha_1)和(alpha_2)的情况,分四种情况讨论:

    1. (alpha_1in (0,C))时 egin{equation} egin{array}{l} y^{(1)}(w^Tx^{(1)}+b)=1\ Rightarrowalpha_1^{new}y^{(1)}K_{11}+alpha_2^{new}y^{(2)}K_{12}+sum_{j=3}^malpha_jK_{1j}+b_{new}=y^{(1)} end{array} end{equation}又(f_1=sum_{j=1}^2alpha_j^{old}y^{(1)}K_{1j}+sum_{j=3}^malpha_jK_{1j}+b_{old}),(E_1=f_1-y^{(1)}),得: egin{equation} egin{array}{ll} b_{new}&=(alpha_1^{old}-alpha_1^{new})y^{(1)}K_{11}\ &quad+(alpha_2^{old}-alpha_2^{new})K_{12}-E_1+b_{old}=b_1 end{array} end{equation}
    2.  (alpha_2in (0,C))时 egin{equation} egin{array}{l} y^{(2)}(w^Tx^{(2)}+b)=1\ Rightarrowalpha_1^{new}y^{(1)}K_{12}+alpha_2^{new}y^{(2)}K_{22}+sum_{j=3}^malpha_jK_{2j}+b_{new}=y^{(2)} end{array} end{equation}又(f_2=sum_{j=1}^2alpha_j^{old}y^{(1)}K_{2j}+sum_{j=3}^malpha_jK_{2j}+b_{old}),(E_2=f_2-y^{(2)}),得: egin{equation} egin{array}{ll} b_{new}&=(alpha_1^{old}-alpha_1^{new})y^{(1)}K_{12}\ &quad+(alpha_2^{old}-alpha_2^{new})K_{22}-E_2+b_{old}=b_2 end{array} end{equation}
    3.  (alpha_1,alpha_2in (0,C))时,(b_{new}=b_1=b_2)
    4. (alpha_1,alpha_2in {0,C})时,(b_{new})可以为(b_1)和(b_2)间的任意值,一般取(b_{new}=(b_1+b_2)/2)

    现在讨论最后一个问题,如何用启发式的方法选择两个乘子(alpha_1,alpha_2)?归结为如下几点:

    • 外层循环选择第一个乘子(alpha_1),内层循环选择第二个最大化(|E_1-E_2|)的乘子(alpha_2)。
    • 外层循环先在整个训练集上遍历一次,然后尽可能多的在非边界样本( (0< alpha_{i} < {C} ))组成的集合上反复遍历,从中选择违反KKT调节的乘子,如此不断重复,直到所有乘子都满足KKT条件。
    • 给定第一个乘子(alpha_1),内层循环先在非边界乘子组成的集合上最大化(|E_1-E_2|)的乘子;如果参数基本没变化,则从随机位置开始遍历非边界样本;如果参数仍然基本没变化,则从随机位置开始遍历整个训练集;如果没有样本能使参数发生变化,则第一个样本会被忽略,重新选择第一个乘子。

    KKT条件是在精度(eps)内检查的,一般(eps=10^{-3})。(|E_1-E_2|)只是更新(alpha_2)的步长的粗略估计,使(|E_1-E_2|)最大的样本不一定能使参数得到更新。 在用程序实现SVM的过程中有三个小技巧可以加速程序的运行:1)每次更新参数后,更新分割超平面的方向向量(w^{new}=w^{old}+(alpha_1^{new}-alpha_1^{old})y^{(1)}x^{(1)}+(alpha_2^{new}-alpha_2^{old})y^{(2)}x^{(2)});2)核矩阵在整个过程中都不需要改动,因此计算好后可以存储下来;3)每次更新参数后,同样要更新样本对应的误差(E_i^{new}=E_i^{old}+(alpha_1^{new}-alpha_1^{old})y^{(1)}K_{i1}+(alpha_2^{new}-alpha_2^{old})y^{(2)}K_{i2}+b_{new}-b_{old})。 具体内容及伪代码请参加John C. Platt在1998年发表的论文《Sequential Minimal Optimization:A Fast Algorithm for Training Support Vector Machines》。John C. Platt的个人主页。 上述讨论的SVM只能解决二分类问题,那么对于有(K)个类别的多分类问题我们怎么办呢?有两种策略:One-vs-One和One-vs-All。One-vs-One的思路如下:每次取出两类样本训练一个SVM,最终得到(K(K-1)/2)个分类器;预测新样本时,依次用(K(K-1)/2)个分类器进行预测,采取投票机制决定最后的分类结果。One-vs-All的思路如下:每次以一类样本作为正样本,其他样本作为负样本,最终训练出(K)个分类器;预测新样本时,依次用(K)个分类器进行预测,选择能使(|w^Tx+b|)最大对应的类别作为输出结果。 本篇博文对应的PDF文档请在这里下载

  • 相关阅读:
    react-路由简单封装
    promise 和 async / await
    数据结构 栈 、 队列 、 链表
    ES6 Symbol
    react-react常用包与对应使用
    node-egg的使用
    自我理解与概述-BFC(Block formatting context)
    Git
    MySQL优化技巧
    Shiro
  • 原文地址:https://www.cnblogs.com/jeromeblog/p/3395016.html
Copyright © 2020-2023  润新知