作成しようとしている回帰ランダムフォレストモデルで相互検証を実行する方法が見つかりません。
したがって、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
クロスフォールドの数と各フォールドのサイズを定義し、サブセットの開始値と終了値を設定します。しかし、私はここで何をすべきかわかりません。ループスルーするように言われましたが、正直にこれを行う方法がわかりません。また、検証セットとテストセットを同じグラフにプロットして、精度/エラーのレベルを表す方法を知りません。
あなたがこれで私を助けてくれたら、私はこれまでにとても感謝しています、ありがとう!
source から:
out-of-bag(oob)エラー推定値
ランダムフォレストでは、テストセットエラーの公平な推定値を取得するために、相互検証または個別のテストセットは必要ありません。実行中に内部的に推定されます...
特に、 predict.randomForest
は、newdata
が指定されていない場合にout-of-bag予測を返します。
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))