web-dev-qa-db-ja.com

Rでランダムフォレスト/クロス検証を実行する方法

作成しようとしている回帰ランダムフォレストモデルで相互検証を実行する方法が見つかりません。

したがって、1つの応答変数(保持時間)を持つ1664の説明変数(異なる化学的性質)を含むデータセットがあります。保持時間を考慮して、何かの化学的性質を予測できるように、回帰ランダムフォレストモデルを作成しようとしています。

ID  RT (seconds)    1_MW    2_AMW   3_Sv    4_Se
4281    38  145.29  5.01    14.76   28.37
4952    40  132.19  6.29    11  21.28
4823    41  176.21  7.34    12.9    24.92
3840    41  174.24  6.7 13.99   26.48
3665    42  240.34  9.24    15.2    27.08
3591    42  161.23  6.2 13.71   26.27
3659    42  146.22  6.09    12.6    24.16

これは私が持っているテーブルの例です。基本的に1_MWなど(最大1664変数)に対してRTをプロットしたいので、これらの変数のどれが重要で、どれが重要でないかを見つけることができます。

私がやります:-

r = randomForest(RT..seconds.~., data = cadets, importance =TRUE, do.trace = 100)
varImpPlot(r)

どの変数が重要で、何が重要でないかを教えてくれます。ただし、クロス検証を実行できるように、データセットをパーティション分割できるようにしたいと考えています。その方法を説明するオンラインチュートリアルを見つけましたが、回帰ではなく分類モデルについてです。

私はあなたがすることを理解しています:-

k = 10
n = floor(nrow(cadets)/k)
i = 1
s1 = ((i-1) * n+1)
s2 = (i * n)
subset = s1:s2

クロスフォールドの数と各フォールドのサイズを定義し、サブセットの開始値と終了値を設定します。しかし、私はここで何をすべきかわかりません。ループスルーするように言われましたが、正直にこれを行う方法がわかりません。また、検証セットとテストセットを同じグラフにプロットして、精度/エラーのレベルを表す方法を知りません。

あなたがこれで私を助けてくれたら、私はこれまでにとても感謝しています、ありがとう!

17
user2062207

source から:

out-of-bag(oob)エラー推定値

ランダムフォレストでは、テストセットエラーの公平な推定値を取得するために、相互検証または個別のテストセットは必要ありません。実行中に内部的に推定されます...

特に、 predict.randomForestは、newdataが指定されていない場合にout-of-bag予測を返します。

31
topchef

Topchef 指摘 のように、過剰適合に対するガードとして交差検証は必要ありません。これは、ランダムフォレストアルゴリズムの優れた機能です。

あなたの目標は機能の選択であるように聞こえますが、この目的にはクロス検証が依然として有用です。 randomForestパッケージ内のrfcv()関数を見てください。ドキュメントではデータフレームとベクトルの入力を指定しているため、まずはデータを使用してそれらを作成します。

set.seed(42)
x <- cadets
x$RT..seconds. <- NULL
y <- cadets$RT..seconds.

rf.cv <- rfcv(x, y, cv.fold=10)

with(rf.cv, plot(n.var, error.cv))
11
Lenwood