在Python中为SVM计算Lagrange系数


10

我试图用Python 编写完整的SVM实现,但是在计算Lagrange系数时遇到一些问题。

首先让我重新叙述一下我从算法中了解的内容,以确保我走在正确的道路上。

如果是一个数据集和ÿ { - 1 1 }是的类别标签X ,然后ÿ 瓦特Ť X + b 1x1,x2,...,xnyi{1,1}xi

i,yi(wTxi+b)1

因此,我们只需要解决一个优化问题即可

w2

服从yi(wTxi+b)1

就拉格朗日系数而言,这转化为找到,和和最小化:wbα=(α1,α2,...αn)00

L(α,w,b)=12w2αi(yi(wTx+b)1)

现在,由于和我们可以将其重写为有约束

Lw=0w=αiyixi
Lb=0yiαi=0
L(α,w,b)=Q(α)=αi12αiαjyiyjxiTxj
αi0 and αiyi=0

因此,我正在尝试使用Python解决优化问题,而我能找到的唯一免费软件包称为cvxopt

我需要一些帮助来解决这个问题,但我找不到很好的例子,虽然我了解理论,但很难将其翻译成代码(我本来希望相反更多来自编程背景)。

请注意,在某些时候,我想使用内核但我不确定在代码中解决此问题的含义。

L(α,w,b)=Q(α)=αi12αiαjyiyjK(xi,xj)

任何帮助将不胜感激,我真的不知道如何在Python中实现此功能。如果您有更好的模块来解决优化问题,我也想阅读一下。

Answers:


4

我以前使用cvxopt实现SVM,但是在matlab中不是python。它的效用肯定会达到目的,它的效率是否足够取决于您使用它的目的。最高效的SVM不使用QP求解程序包,它们利用了SVM特有的一些优化功能。许多人使用SMO样式算法来解决它。

LibSVM是一个SVM软件包,它使用算法在工作集选择中使用二阶信息来训练支持向量机。该代码是开源的,如果您有兴趣查看其实现方式。它还有一个python接口。

SVMLight是另一个软件包,它们使用不同的算法(请参阅其站点以获取参考)。它也是开源的,并具有python接口。


感谢您提供的信息丰富的答案(我认为它能取代我的知识),欢迎使用scicomp!
阿隆·艾玛迪亚

+1有趣的答案,我已经开始研究您的重要链接,这些链接对我有很大帮助!
查尔斯·蒙圭

2

优化问题的一般形式是二次方程序,无论您使用的是内核技巧还是线性内核。这听起来像cvxopt将足以为你想要做什么,但在这里等pythonauts有运气OpenOpt为好。


阿伦,您知道Ipopt Python包装器是否已修复吗?
杰夫·奥克斯伯里

一个大卫Ketcheson的学生得到了它与OpenOpt工作(可以用准牛顿算法使用它),但已与获得OpenOpt堆栈会在OS X上有些困难
阿隆Ahmadia
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.