svm
(e1071
)は、マルチクラス分類(すなわち、すべてのペア間のバイナリ分類、その後の投票)に「1対1」戦略を使用します。したがって、この階層的な設定を処理するには、グループ1対すべて、グループ2対何か他のものなど、一連のバイナリ分類子を手動で実行する必要があります。さらに、基本的なsvm
関数は、通常は、caret
パッケージのtune
のe1071
、またはtrain
のラッパーを使用することをお勧めします。
とにかく、Rで新しい個体を分類するために、式を手動で数式に差し込む必要はありません。むしろ、predict
汎用関数を使用します。これには、SVMのような異なるモデル用のメソッドがあります。このようなモデルオブジェクトの場合、通常は汎用関数plot
とsummary
を使用することもできます。ここでは線形SVMを使用した基本的な考え方の一例である:
require(e1071)
# Subset the iris dataset to only 2 labels and 2 features
iris.part = subset(iris, Species != 'setosa')
iris.part$Species = factor(iris.part$Species)
iris.part = iris.part[, c(1,2,5)]
# Fit svm model
fit = svm(Species ~ ., data=iris.part, type='C-classification', kernel='linear')
# Make a plot of the model
dev.new(width=5, height=5)
plot(fit, iris.part)
# Tabulate actual labels vs. fitted labels
pred = predict(fit, iris.part)
table(Actual=iris.part$Species, Fitted=pred)
# Obtain feature weights
w = t(fit$coefs) %*% fit$SV
# Calculate decision values manually
iris.scaled = scale(iris.part[,-3], fit$x.scale[[1]], fit$x.scale[[2]])
t(w %*% t(as.matrix(iris.scaled))) - fit$rho
# Should equal...
fit$decision.values
は、モデル予測対実際のクラスラベル表にする:svm
モデルオブジェクトから
> table(Actual=iris.part$Species, Fitted=pred)
Fitted
Actual versicolor virginica
versicolor 38 12
virginica 15 35
抽出機能の重みを(のために機能の選択など)。ここでは、明らかにより有用なのはSepal.Length
です。決定値はどこから来た、我々は機能の重みと前処理された特徴ベクトルの内積としてそれらを手動で計算することができ、マイナス切片はrho
オフセット理解する
> t(fit$coefs) %*% fit$SV
Sepal.Length Sepal.Width
[1,] -1.060146 -0.2664518
。
> t(w %*% t(as.matrix(iris.scaled))) - fit$rho
[,1]
51 -1.3997066
52 -0.4402254
53 -1.1596819
54 1.7199970
55 -0.2796942
56 0.9996141
...
を(前処理さがおそらく中心/スケーリングおよび/またはなど、RBF SVMを使用した場合は変換カーネル意味)これは内部的に計算されたものと等しくなる必要があります:あなたは、ジョンに答えるため
> head(fit$decision.values)
versicolor/virginica
51 -1.3997066
52 -0.4402254
53 -1.1596819
54 1.7199970
55 -0.2796942
56 0.9996141
...
感謝を。なぜなら、これらの方程式を知りたいのは、私のイベントを分類する際に、合計からどのパラメータが重要かを評価するためです。 –
@ManuelRamónAhh gotcha。これらをリニアSVMの「重み」といいます。 svmモデルオブジェクトからの計算方法については、上記の編集を参照してください。がんばろう! –
あなたの例には2つのカテゴリ(versicolorとvirginica)しかなく、2つのcoeffcientsを持つベクトルがあります.1つは虹彩データを分類するための変数です。 N個のカテゴリを持っているなら、 'with(fit、t(coefs)%*%SV)'からN-1ベクトルを得る。各ベクトルの意味は? –