PythonでのSVMのラグランジュ係数の計算


10

Pythonで完全なSVM実装を記述しようとしていますが、ラグランジュ係数の計算にいくつか問題があります。

最初に、アルゴリズムから理解したことを言い換えて、正しいパスにいることを確認します。

もしバツ1バツ2バツ、データセットでありy{11}のクラスラベルであるバツ次いで、

ywTバツ+b1

したがって、最適化問題を解決して

w2

対象ywTバツ+b1

ラグランジュ係数に関して、これは、およびおよび最小化することをます:B α = α 1α 2α N0 0 L α W B = 1wbα=α1α2α00

Lαwb=12w2ΣαywTバツ+b1

今のでと\ FRAC {\部分L} {\部分B} = 0 \ Y_I \ alpha_i = 0 \和を意味L(\ alpha、w、b)= Q(\ alpha)= \ sum \ alpha_i-\ frac12 \ sum \ sum \ alpha_i \ alpha_j y_i y_j x_i ^ T x_jを制約付きで書き直すことができます\ alpha_i \ geq 0 \ \ text {and} \ \ sum \ alpha_i y_i = 0L

Lw=0w=Σαyバツ
L α W B = Q α = Σ α I - 1
Lb=0Σyα=0
Lαwb=Qα=Σα12ΣΣααjyyjバツTバツj
α0 そして Σαy=0

そこで、Pythonを使用して最適化の問題を解決しようとしています。私が見つけた唯一の無料パッケージはcvxoptと呼ばれています

これを解決するためのいくつかの助けが欲しい、私はこれについての良い例を見つけることができなかった、そして理論を理解している間、それをコードに変換するのに苦労している(私は私がプログラミングの背景からより多く)。

ある時点でカーネルしかし、コードでこれを解決することに関してどのような影響があるのか​​はません。

Lαwb=Qα=Σα12ΣΣααjyyjKバツバツj

どんな助けでも大歓迎です、私はこれをPythonに実装する方法で本当に迷っています。最適化問題を解決するためのより良いモジュールがある場合は、それについても読みたいと思います。

回答:


4

以前はcvxoptを使用してSVMを実装しましたが、MATLABではPythonではありません。それが十分に効率的かどうかは、それを何に使用するかに依存するので、間違いなくあなたの目的に役立ちます。最も効率的なSVMはQPソルバーパッケージを使用せず、SVMに固有のいくつかの最適化を利用します。多くの場合、SMOスタイルのアルゴリズムを使用して解決します。

LibSVMは、トレーニングサポートベクターマシンの2次情報を使用したワーキングセット選択のアルゴリズムを使用するSVMパッケージです。コードがどのように実装されているかを知りたい場合は、コードはオープンソースです。また、Pythonインターフェースも備えています。

SVMLightは別のパッケージで、別のアルゴリズムを使用しています(参照についてはサイトを参照してください)。また、オープンソースであり、Pythonインターフェイスを備えています。


有益な回答をありがとう(これは私のものに取って代わると思います)、scicompへようこそ!
Aron Ahmadia、

興味深い答えを+1して、私はあなたを助けてくれるあなたの素晴らしいリンクを見始めました!
Charles Menguy、2012年

2

カーネルトリックを使用しているか線形カーネルを使用しているかに関係なく、最適化問題の一般的な形式は2次プログラムです。それはあなたがやろうとしていることには十分だと思われますが、ここにある他のpythonautsもOpenOptで運がありました。 cvxopt


Aron、Ipopt Pythonラッパーが修正されたかどうか知っていますか?
Geoff Oxberry、2012年

デビッドKetchesonの生徒の一人は、それが(準ニュートンアルゴリズムでそれを使用することができます)OpenOptで作業しましたが、OpenOptスタックはOS X上で起こってきていくつかの困難があった
アロンAhmadia
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.