とはい、私はそこにあると信じています。 this answerを見てください。これは似ていますが、キャレットライブラリは使用していません。この例にsvp = fit$finalModel
を追加すると、それをほぼ正確に追跡できるはずです。以下のデータにも同様の手法を適用しました。ライブラリが実行時にデータをスケーリングするので、ベクトルのプロットにうまく収まるようにデータをスケーリングしました。
require(caret)
set.seed(1)
x = model.matrix(data=mtcars, mpg ~ scale(hp)) #set up data
y = mtcars$mpg
fit=train(x, y, method="svmLinear") #train
svp = fit$finalModel #extract s4 model object
plot(x, xlab="", ylab="")
w <- colSums(coef(svp)[[1]] * x[unlist(alphaindex(svp)),])
b <- b(svp)
abline(b/w[1],-w[2]/w[1], col='red')
abline((b+1)/w[1],-w[2]/w[1],lty=2, col='red')
abline((b-1)/w[1],-w[2]/w[1],lty=2, col='red')
そして、あなたの2つ目の質問:
x = model.matrix(data=mtcars, mpg ~ scale(hp) + scale(wt) - 1) #set up data
fit=train(x, y, method="svmLinear") #train
svp = fit$finalModel #extract s4 model object
plot(x, xlab="", ylab="")
w <- colSums(coef(svp)[[1]] * x[unlist(alphaindex(svp)),])
b <- b(svp)
abline(b/w[1],-w[2]/w[1], col='red')
abline((b+1)/w[1],-w[2]/w[1],lty=2, col='red')
abline((b-1)/w[1],-w[2]/w[1],lty=2, col='red')
編集
境界をプロット上記の解答の問題ではなく、線形SVM回帰直線である。質問に答えるには、線を得るための簡単な方法の1つは、予測値を抽出して回帰をプロットすることです。行を取得するには、実際には2点しか必要ありませんが、簡単にするために、次のコードを使用しました。
abline(lm(predict(fit, newdata=mtcars) ~ mtcars$hp), col='green')
または
入力に感謝@danielson OK
abline(lm(predict(fit) ~ mtcars$hp), col='green')
私は満足していない、まだ、私は本当にを探している*のY = A +ですが、 svm回帰線のbx *(または* y = a + b.x1 + c.x2 *)方程式、元の縮尺でcoef ...クライアントに提示できるもの...答え最初の2Dプロットが1次元プロットになった〜を使わずに?)):-) – agenis
申し訳ありません。私は決定境界をプロットしていたので、私はその質問を誤解したと思う。モデル係数はオブジェクトに格納されないので、取得する最も簡単で簡単な方法は 'summary(lm(predict(fit)〜mtcars $ hp))'です。ベクトルから直接係数を生成する方法をお探しですか? – danielson
OK、予測されるベクトル上の 'lm'は素敵なトリックです。これがあれば、私が必要だったことに感謝していませんでした。あなたがあなたの答えにこれを加えることができればそれを受け入れることができます – agenis