当我阅读关于SMM for SVM的论文时。 John C. Platt paper
选择违反KKT条件的alpha非常令我困惑。我不太了解下面的代码。
if ((r2 < -tol && alph2 < C) || (r2 > tol && alph2 > 0))
为什么选择r2&lt; -tol alph2&lt; C,而不是r2&lt; TOL?
答案 0 :(得分:0)
首先,请注意,SVM的KKT条件对于摆脱不是支持向量的向量特别有帮助。这样,考虑一个(非支持的)矢量点,例如带有远高于超平面(正确识别)的标签1的矢量点。考虑一下,如果将点插入决策方程,则可能会得到2.5之类的值,因为该点不是支持向量。像这样的点在SVM的优化阶段被系统清除,因此只有加权值的点是靠近超平面的支持向量。
现在,让我们看看您在Platt中提到的伪代码。
E2 = SVM output on point[i2] – y2 (check in error cache)
r2 = E2*y2
if ((r2 < -tol && alph2 < C) || (r2 > tol && alph2 > 0))
考虑到r2和E2的值,普拉特的if语句在数学上说如下:
如果[y_i((w,x)+ b-y_i)<-tol && alpha2
让我们将tol设置为0。第一个条件的等式现在显示为: y_i((w,x)+ b-y_i)<0
重写,本质上是:
y_i((w,x)+ b)<1,因为(y_i)*(y_i)将始终为正1.条件:
[y_i((w,x)+ b)<1和a 此代码的意思是,进一步说明,此处普拉特正在检查KKT条件的违反者(“无边界”)。他本质上是在尝试清除显然根本不靠近超平面的那些点。