私はいくつかのモデルを比較して、最良のモデルを得ています。今、ランダムフォレストモデルのOOBエラーを取得して、他のモデルの相互検証エラーと比較したいと考えています。比較はできますか?できる場合は、どのようにしてOOBエラーをRコードで取得できますか?ランダムフォレストのOOBを計算するには?
答えて
RにおけるランダムフォレストモデルのOOBを取得するために、以下のことができます。
i番目の要素は、(OOB)誤り率であるmodel$err.rate[,1]
:
library(randomForest)
set.seed(1)
model <- randomForest(Species ~ ., data = iris)
OOBエラーがですi番目までのすべての木について。
一つは、それをプロットし、それは、RFモデルに対して定義されたプロット法でOOBと同じであるかどうかを確認することができる:
par(mfrow = c(2,1))
plot(model$err.rate[,1], type = "l")
plot(model)
OOBはハイパーパラメータmtry
とntree
をピッキングするために有用であるとk倍CVと相関する必要がありますが、k倍CVでテストされた異なるタイプのモデルとrfを比較するために使用すべきではありません。 OOBはk倍のCVとは対照的に、ほぼ自由であるため、k回実行するのには時間がかかります。
Rのk倍CVを実行する簡単な方法は次のとおり
folds <- sample(1:5, size = nrow(iris), replace = T) #5 fold CV
:
をk倍CVを実行するために、ひだ(置き換えるkを有する5(正の整数> 1)定義します
このアプローチは、これは通常、大したことではない、(特に小規模なデータセットのために)同じサイズの折り目を与えることはありません
table(folds)
#output
1 2 3 4 5
30 28 28 33 31
は、この解決するために:。
をfolds <- sample(rep(1:5, length.out = nrow(iris)), size = nrow(iris), replace = F)
table(folds)
#output
1 2 3 4 5
30 30 30 30 30
4回折りたたみのそれぞれについてモデルを訓練し、5回目の予測を実行します。ここでは、予測と実際の値を含むデータフレームのリストを返します。希望する統計を返すように呼び出しをカスタマイズすることができます。
CV_rf <- lapply(1:5, function(x){ #5 corresponds to the number of folds defined earlier
model <- randomForest(Species ~ ., data = iris[folds != x,])
preds <- predict(model, iris[folds == x,], type="response")
return(data.frame(preds, real = iris$Species[folds == x]))
})
リッジモデルのパフォーマンスを得るために同じコードを使用できます。データフレームのデータフレームの
変換リスト:1/500(500用OOBが適合している間、
CV_rf <- do.call(rbind, CV_rf)
チェック精度
caret::confusionMatrix(CV_rf$preds, CV_rf$real)
#part of output:
Overall Statistics
Accuracy : 0.9533
95% CI : (0.9062, 0.981)
No Information Rate : 0.3333
P-Value [Acc > NIR] : < 2.2e-16
ので、ここで精度は0.9533
ですrfではデフォルトで)ツリーは:
model$err.rate[500,1]
#OOB
0.04666667
彼らは私の意見を完全に打ち負かすのと同じですが、たとえば10倍のCVまたは3倍を実行しようとすると、同じではないことがわかります。
別のアプローチは、caret
またはmlr
ライブラリを使用することです。私はmlr
を使用しませんが、caret
はこのようなタスクには本当に良いです。キャレットとrfを使い始めるにはsomethingがあります。さらに、キャレットは優れたdocumentationです。パッケージを使用する予定がない場合でもおすすめできます。
ありがとう!!!!!非常に非常に非常にありがとう! – grace
- 1. SkleanランダムフォレストOOBサンプルを入手
- 2. ランダムフォレストOOBとエラー見積もりの重要性
- 3. Spark(scala)のランダムフォレスト統計を表示する方法
- 4. ランダムフォレストは
- 5. ヒュージグラムによる計算の計算
- 6. numpyで計算/計算カラムを追加するには?
- 7. Haskellの関数の計算では、電力を計算する
- 8. 目的の計算で計算する
- 9. CSS計算による高さ計算()計算方法
- 10. 次の式を計算するには
- 11. フォントの幅を計算するには?
- 12. ベクトルのハミングウェイトを計算するには?
- 13. AuthenticatonのSilverlight OOB
- 14. 私は計算の何かを計算するときにAndroidアプリのクラッシュ
- 15. Gremlinのサブツリーの集計を計算するには?
- 16. jQueryの各ループの合計時間を計算するには?
- 17. 計算統計は
- 18. 実行合計を計算するときに行間の計算値を保持する方法は?
- 19. OpenCVでマトリックスランクを計算するには?
- 20. Pyephem:トランジットを計算するには?
- 21. 平均を計算するには?
- 22. protobufファイルサイズを計算するには?
- 23. 受信影を計算するには?
- 24. Gridviewはランタイムに列を計算する
- 25. ビューを計算するには?
- 26. Mysqlでパーセンテージを計算するには?
- 27. コンビナトリアルの合計を計算するには?
- 28. Django集計合計を計算する
- 29. キーを押したときに計算値を再計算する方法は?
- 30. C#での日時の計算を計算する
try 'model $ err.rate [、1]' - i番目の要素は、i番目までのすべてのツリーのエラー率(OOB)です。副作用として、OOBはk倍のCVと相関する必要がありますが、モデル間のk倍のCVだけを比較します。 – missuse
@missuseあなたの返信をありがとう!しかし、ランダムフォレストのk-fold cvを計算するにはどうすればよいですか?いくつかの人はrfcv()関数を使用しますが、ランダムフォレストを比較するためにcvエラーを計算するために使用されるようです。しかし、ランダム森林のcv誤差と尾根モデルのcv誤差を比較しなければならない。私に何ができる? – grace