私はSVMとe1071を初めて使っています。同じコードを実行するたびに結果が異なることがわかりました。例えばRのe1071の確率によるSVM予測内の "ランダム"な、または非決定論的な要因は何ですか?
:として
setosa versicolor virginica
150 0.009704854 0.1903696 0.7999255
とresult2
:
data(iris)
library(e1071)
model <- svm(Species ~ ., data = iris[-150,], probability = TRUE)
pred <- predict(model, iris[150,-5], probability = TRUE)
result1 <- as.data.frame(attr(pred, "probabilities"))
model <- svm(Species ~ ., data = iris[-150,], probability = TRUE)
pred <- predict(model, iris[150,-5], probability = TRUE)
result2 <- as.data.frame(attr(pred, "probabilities"))
はその後、私はとしてresult1
を得た
setosa versicolor virginica
150 0.01006306 0.1749947 0.8149423
、結果はすべてのラウンドを変更し続けます。
ここでは、最初の149行をトレーニングセットとして使用し、最後の行をテストとして使用しています。 result1
とresult2
の各クラスの確率はまったく同じではありません。予測中に「ランダム」なプロセスがいくつかあると推測しています。これはどうですか?
各コールの前に同じ番号のI set.seed()
を使用すると、予測される確率が固定されることがあります。私は固定予測結果を「目標」としているわけではありませんが、なぜこのようなことが起こり、確率予測を生成するためにどのようなステップが必要なのか不思議です。
最後のサンプルがまだ「virginica」と予測されるため、わずかな違いは実際に虹彩データに大きな影響を与えません。しかし、私のデータ(AとBの2つのクラスを持つ)が "良い"ではなく、未知のサンプルがクラスAの2倍の確率で0.489と0.521の確率を持つと予測されるとき、混乱するでしょう。
ありがとうございます!
あなたの答えをありがとう! e1071のsvmがクロスバリデーションによって確率を生成し、ランダムなプロセスがどのように生成されるかを詳しく説明してください。あなたがソースコードに投稿したものが見つかりませんでした。あなたが投稿したコードを完全に理解していません。私はコールの前に種を設定して一貫性を持たせることができます。私は一貫した結果を出すつもりはありませんでしたが、そのことがどのように起こるかを理解したいだけです。どうもありがとう!! – Yan
リンクがあなたの上に現われる圧縮されたバージョンのパッケージのソースバージョンを入手した後、それを展開して展開します。そこに 'src'という名前のフォルダが表示されます。抽出したコードは、svm.cppという名前のファイルにあります。テキストエディタで簡単に見つけることができます。私はC++プログラマーでもありませんし、コードのウォークスルーを尋ねると、私たちの誰もこれまでに修正しそうなことはないので、SOの質問を「尋ねる」のが大きすぎます。 –
申し訳ありませんが私の質問が不適切だった場合。しかし、私はコードのウォークスルーを求めていませんでした。私は、「SVMが確率の推定値を作成する際に相互検証ステップを使用する」という1つまたは2つの文の説明を私に与えることができるかどうか、つまりこの相互検証ステップがここで確率をどのように発展させるかを考えていただけです。私はプログラマーではなく、コーディングに新しい人です。生のコードを読んで答えを見つけるのは難しいです。あなたがコードを読まなくてもそれを説明できるなら、私は感謝します。しかし、それがあなたの時間を要するなら、私は残念です。ありがとう! – Yan