昨天,我发布了一个关于SVM原始表格实施的一般概念的问题:
Support Vector Machine Primal Form Implementation
和“lejlot”帮助我理解我正在解决的是QP问题。
但我仍然不明白我的目标函数如何表达为QP问题
(http://en.wikipedia.org/wiki/Support_vector_machine#Primal_form)
我也不明白QP和Quasi-Newton方法是如何相关的
我所知道的是Quasi-Newton方法将解决我认为是由
制定的QP问题我的目标函数(我看不到连接)
有人可以带我走过这个吗?
答案 0 :(得分:0)
对于SVM,目标是找到一个分类器。此问题可以用您尝试最小化的函数表示。 我们首先考虑 Newton迭代。牛顿迭代是一种数值方法,用于找到形式为f(x)= 0的问题的解。 我们可以通过以下迭代解决数字,而不是解决它
x^k+1 = x^k - DF(x)^-1 * F(x)
此处x^k+1
是第k + 1次迭代,DF(x)^-1
是F(x)的雅可比行列的倒数,而x
是迭代中的第k个x。
只要我们在步长(delta x)方面取得进展或者我们的函数值接近0到很好的程度,就会运行此更新。可以相应地选择终止标准。
现在考虑解决问题f'(x)=0
。如果我们为此制定牛顿迭代,我们得到
x^k+1 = x - HF(x)^-1 * DF(x)
其中HF(x)^-1
是Hessian矩阵的倒数,DF(x)
是函数F的梯度。注意,我们讨论的是n维分析,不能只取符号。我们必须采用矩阵的逆矩阵。
现在我们面临一些问题:在每一步中,我们必须为更新的x计算Hessian矩阵,这是非常低效的。我们还必须求解线性方程组,即y = HF(x)^-1 * DF(x)
或HF(x)*y = DF(x)
。
因此,我们不是在每次迭代中计算Hessian,而是从Hessian的初始猜测(可能是单位矩阵)开始,并在每次迭代后执行一级更新。对于确切的公式,请查看here。
那么这如何链接到SVM?
当你看到你想要最小化的函数时,你可以形成一个原始问题,你可以将其重新表述为双拉格朗日问题,它是凸的并且可以用数值求解。这篇文章都有很好的记载,因此我不会尝试以较差的质量来表达公式。
但这个想法如下:如果你有双重问题,你可以用数字解决它。有多个求解器可用。在您发布的链接中,他们建议使用坐标下降,这样可以一次解决一个坐标的优化问题。或者你可以使用subgradient下降。另一种方法是使用L-BFGS。这在this论文中得到了很好的解释。
另一种解决类似问题的流行算法是ADMM(乘法器的交替方向法)。为了使用ADMM,您必须将给定问题重新表述为可提供相同解决方案的同等问题,但具有正确的ADMM格式。为此,我建议在ADMM上阅读Boyds脚本。
一般情况下:首先,了解您尝试最小化的功能,然后选择最适合的数值方法。在这种情况下,亚维度下降和坐标下降最适合,如维基百科链接中所述。