8

データに 2 つの異なるパッケージを使用して 2 つの SVM モデルをトレーニングし、非常に異なる結果を得ています。これは予想されることですか?

e1071を使用したmodel1

library('e1071')
model1 <- svm(myFormula, data=trainset,type='C',kernel='linear',probability = TRUE)
outTrain <- predict(model1, trainset, probability = TRUE)
outTest <- predict(model1, testset, probability = TRUE)
train_pred <- attr(outTrain, "probabilities")[,2]
test_pred <- attr(outTest, "probabilities")[,2]
calculateAUC(train_pred,trainTarget)
calculateAUC(test_pred,testTarget)

キャレットを使用したmodel2

model2 <- train(myFormula,data=trainset,method='svmLinear')
train_pred <- predict(model2, trainset)
test_pred  <- predict(model2, testset)
calculateAUC(train_pred,trainTarget)
calculateAUC(test_pred,testTarget)

calculateAUC()ターゲットの予測値と実際の値を考慮して、AUC 値を計算するために定義した関数です。値は次のように表示されます。

モデル1 (e1071)

1
0.8567979

model2 (キャレット)

0.9910193
0.758201

これは可能なことですか?それとも私はこれを間違っていますか?

参考になれば、サンプルデータを提供できます

4

3 に答える 3

5

kernlab が rbfkernel を次のように使用していることを確認しました。

rbf(x,y) = exp(-sigma * euclideanNorm(x-y)^2)

しかし、このwikiリンクによると、rbfカーネルは

rbf(x,y) = exp(-euclideanNorm(x-y)^2/(2*sigma^2))

大きなシグマ値を持つ 2 つの近接したサンプルは、より高い類似度の一致につながるため、これもより直感的です。

e1071 svmが使用されているかわかりません (ネイティブ コード libsvm?)

これが古いスレッドであることは知っていますが、なぜ違いがあるのか​​ 誰かが私に教えてくれることを願っていますか? 比較のための小さな例

set.seed(123)
x <- rnorm(3)
y <- rnorm(3)
sigma <- 100

rbf <- rbfdot(sigma=sigma)
rbf(x, y)
exp( -sum((x-y)^2)/(2*sigma^2) )

カーネル値は 1 に近いと予想します (x,y は sigma=1 から来ているのに対し、kernel sigma=100 であるため)。これは、2 番目のケースでのみ観察されます。

于 2014-07-08T05:38:04.583 に答える