2016-09-12 8 views
0

SVM(Support Vector Machine)がRまたはPythonで手動で実装されている記事はありますか?サポートベクターマシンの手動実装

私はではないは、組み込み関数またはパッケージを使用します。 ?

この例は、特徴空間と線形分離可能性の点で非常に簡単です。

私は自分の理解を高めるために全体のプロセスを進めたいと思います。

+0

Rパッケージ[e1071](https://cran.r-project.org/web/packages/e1071/e1071.pdf)にSVMの実装があります。 – loki

答えて

1

SVMを訓練するためにいくつかの可能なアルゴリズムがあるので、この質問に対する答えはむしろ幅広いです。また、LibSVM(PythonとRの両方で利用可能)のようなパッケージはオープンソースなので、コードを自由に調べることができます。

以下では、LibSVMで実装されているJ. PrattのSequential Minimal Optimization(SMO)アルゴリズムを検討します。それは私が

http://cs229.stanford.edu/materials/smo.pdf

この講義はありSMOアルゴリズムの(単純化したとはいえ)以下のバージョンをお勧めしたいのSVMとのあなたの最初のアプローチだ場合は、手動でSVMの最適化問題を解くアルゴリズムを実装することは、かなり面倒ですが、 Professor Andrew Ng(スタンフォード大学)と彼はSMOアルゴリズムの簡略化されたバージョンを示しています。私はSVMの理論的背景についてはわかりませんが、ラグランジュ乗数のペア(alpha_ialpha_j)が無作為に選択されているのに対し、元のSMOアルゴリズムでは、ヒューリスティック関与する。
つまり、このアルゴリズムはグローバルな最適化に収束することを保証しません(正しいアルゴリズムで訓練されていれば、手元のデータセットのSVMでは常に真です)が、最適化SVMの背後にある問題。

しかし、この文書ではRやPythonのコードは示していませんが、擬似コードはかなり単純で実装が簡単です(MatlabまたはPythonのコードは100行までです)。また、このトレーニングアルゴリズムは、アルファ(ラグランジュ乗数ベクトル)とb(インターセプト)を返します。適切なサポートベクトルのようないくつかの追加パラメータがあるかもしれませんが、ベクトルアルファから始めると、そのような量は計算するのがかなり簡単です。

最初に、パターンと同じ数の列が存在し、機能があるような行があり、そこに多くの要素を持つベクトルであるLearningLabelsがあるとしますパターンであり、このベクトルは(その名前が示唆するように)パターンの適切なラベルをLearningSetに含みます。
また、アルファには、パターンと同じ数の要素が含まれています。 alpha[i]>0次いでLearningSetからI番目のパターンはサポートベクトルの場合:

サポートベクトルを評価するためには、あなたが要素Iにおけるアルファが0以上であるか否かを確認することができるインデックス。同様に、LearningLabelsi番目の要素が関連ラベルです。

最後に、フリーパラメータベクトルであるwを評価するとよいでしょう。 アルファが既知であると仮定すると、次の式alphaLearningLabelsは列ベクトルであり、上記のようLearningSetが行列

w = ((alpha.*LearningLabels)'*LearningSet)' 

を適用することができます。上記式において、.*は要素単位の積であり、'は転置演算子である。

関連する問題