私はいくつかのモデルを比較して、最良のモデルを得ています。今、ランダムフォレストモデルの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. numpyで計算/計算カラムを追加するには?
- 6. ランダムフォレストは
- 7. Haskellの関数の計算では、電力を計算する
- 8. 列の合計を計算する計算bi列に計算列を追加するDAXクエリ
- 9. リニア計算を計算するR
- 10. モジュロnを計算する計算式
- 11. 目的の計算で計算する
- 12. AuthenticatonのSilverlight OOB
- 13. 配列の日付を日付計算の計算に追加するには
- 14. フォントの幅を計算するには?
- 15. ベクトルのハミングウェイトを計算するには?
- 16. 次の式を計算するには
- 17. スコアのスピードを計算するには?
- 18. MYSQLのパーセンテージを計算するには?
- 19. CSS計算による高さ計算()計算方法
- 20. 私は計算の何かを計算するときにAndroidアプリのクラッシュ
- 21. Gremlinのサブツリーの集計を計算するには?
- 22. jQueryの各ループの合計時間を計算するには?
- 23. jqueryの全行の合計を計算するには
- 24. 計算統計は
- 25. ビューを計算するには?
- 26. 平均を計算するには?
- 27. ArangoDBでモードを計算するには?
- 28. SASでCVaRを計算するには?
- 29. 受信影を計算するには?
- 30. Pyephem:トランジットを計算するには?
try 'model $ err.rate [、1]' - i番目の要素は、i番目までのすべてのツリーのエラー率(OOB)です。副作用として、OOBはk倍のCVと相関する必要がありますが、モデル間のk倍のCVだけを比較します。 – missuse
@missuseあなたの返信をありがとう!しかし、ランダムフォレストのk-fold cvを計算するにはどうすればよいですか?いくつかの人はrfcv()関数を使用しますが、ランダムフォレストを比較するためにcvエラーを計算するために使用されるようです。しかし、ランダム森林のcv誤差と尾根モデルのcv誤差を比較しなければならない。私に何ができる? – grace