2016-10-14 11 views
0

私のデータは、e1071パッケージからRにsvmで奇妙な結果が生成されたので、R svmがWEKA(またはPython)と同じ結果を生成できるかどうかを確認しようとしました。過去のWEKA。RとWEKAのサポートベクターマシン

私は質問をして、私とまったく同じ混乱を持っているが、答えがないものを見つけました。 This is the question

ここで回答が得られることを願っています。

私は虹彩データセットを使用して、虹彩データ全体を使ってモデル(WEKAのSMOとRパッケージe1071のsvm)を訓練し、それ自体をテストします。

WEKAパラメータ

デフォルト以外の
weka.classifiers.functions.SMO -C 1.0 -L 0.001 -P 1.0E-12 -N 0 -V 10 -W 1 -K "weka.classifiers.functions.supportVector.RBFKernel -G 0.01 -C 250007" 

、私はそれがRのfucntionで一貫させるためにRBFKernelにカーネルを変更しました。

結果は次のとおりです。

a b c <-- classified as 
50 0 0 | a = Iris-setosa 
    0 46 4 | b = Iris-versicolor 
    0 7 43 | c = Iris-virginica 

Rスクリプト

library(e1071) 
model <- svm(iris[,-5], iris[,5], kernel="radial", epsilon=1.0E-12) 
res <- predict(model, iris[,-5]) 
table(pred = res, true = iris[,ncol(iris)]) 

結果は次のとおりです。

  true 
pred   setosa versicolor virginica 
    setosa   50   0   0 
    versicolor  0   48   2 
    virginica  0   2  48 

私は人を機械学習ではないので、私は」これらの2つの方法では、デフォルトのパラメータを推測することは非常に異なります。たとえば、e1071のデフォルトはepsilon、WEKAのデフォルトは1.0E-12です。マニュアルを読んでみると、すべてのパラメータを同一にしたかったのですが、多くのパラメータが私に匹敵するようには見えません。

ありがとうございました。

答えて

5

SMOOのRWekaパラメータについてはhttp://weka.sourceforge.net/doc.dev/weka/classifiers/functions/SMO.htmlを参照し、?svmを使用してe1071 svmの実装に対応するパラメータを見つけます。

?svmごとに、R e1071 svmはlibsvmへのインタフェースであり、標準のQPソルバを使用しているようです。 Kレベル、K> 2を有する多クラス分類のため

、LIBSVMはK(K-1)/ 2バイナリ分類器は を訓練された 「ワンに対して-one'・アプローチを使用して、適切なクラスが投票スキームによって見つけられる。 libsvmは内部的にスパースデータ表現を使用しますが、これはSparseMパッケージによっても高レベルでサポートされています。逆に

?RWeka

におけるSMO

は多項式やRBF カーネルを使用してサポートベクトル分類器を訓練するためのジョン・C・プラットのシーケンシャル最小限の最適化アルゴリズム を実装しています。複数クラスの問題は、ペアごとに の分類を使用して解決されます。

したがって、これらの2つの実装は一般に異なります(結果は多少異なる場合があります)。それでも私たちは同じ対応するハイパーパラメータを選択した場合、混同行列はほぼ同じである:

library(RWeka) 
model.smo <- SMO(Species ~ ., data = iris, 
control = Weka_control(K = list("RBFKernel", G=2), C=1.0, L=0.001, P=1.0E-12, N=0, V=10, W=1234)) 
res.smo <- predict(model.smo, iris[,-5]) 
table(pred = res.smo, true = iris[,ncol(iris)]) 

      true 
pred   setosa versicolor virginica 
    setosa   50   0   0 
    versicolor  0   47   1 
    virginica  0   3  49 

library(e1071) 
set.seed(1234) 
model.svm <- svm(iris[,-5], iris[,5], kernel="radial", cost=1.0, tolerance=0.001, epsilon=1.0E-12, scale=TRUE, cross=10) 
res.svm <- predict(model.svm, iris[,-5]) 
table(pred = res.svm, true = iris[,ncol(iris)]) 

      true 
pred   setosa versicolor virginica 
    setosa   50   0   0 
    versicolor  0   49   1 
    virginica  0   1  49 

はまた、この参照:[https://stats.stackexchange.com/questions/130293/svm-and-smo-main-differences][1]と、この[https://www.quora.com/Whats-the-difference-between-LibSVM-and-LibLinear][1]

+1

はいあなたは正しいです、カーネルKがありますカーネルの名前と帯域幅のガンマをリストとして表示します。 –

+0

答えをありがとう!しかし、2クラスの問題については、パラメータを同じように設定しても、2つの全く異なる予測を得ることができます。実装が異なるからですか? – Yan

+0

SVMとSMOによるマルチクラス分類に使用される戦略は同じであるようです(1対1)。バイナリ分類の場合、可能なすべてのパラメータ(デフォルトのものを含む)を調べて、それらのすべてを同じに設定すると、結果は多少異なるはずがありません。 –

関連する問題