TL; DR:
オリジナルにフラグを立てることができるものはありますかrandomForest
必要のない呼び出し再実行predict
ありそうなカテゴリだけでなく、予測されたカテゴリ確率を取得する関数
詳細:
randomForest パッケージを使用しています。
私は次のようなモデルを持っています:
model <- randomForest(x=out.data[train.rows, feature.cols],
y=out.data[train.rows, response.col],
xtest=out.data[test.rows, feature.cols],
ytest=out.data[test.rows, response.col],
importance= TRUE)
どこ out.data
はデータフレームで、feature.cols
数値的特徴とカテゴリー的特徴の混合、response.col
はTRUE
/FALSE
バイナリ変数で、factor
モデルがカテゴリカルとして適切に扱うようにrandomForest
に強制しました。
すべて正常に実行され、変数model
が適切に返されます。ただし、randomForest
関数に渡すフラグまたはパラメーターが見つからないため、model
がprobabilitiesで返されます=of TRUE
またはFALSE
。代わりに、単純に予測値を取得します。つまり、model$predicted
、次のようなものが表示されます。
FALSE
FALSE
TRUE
TRUE
FALSE
.
.
.
代わりに、私は次のようなものを見たいです:
FALSE TRUE
1 0.84 0.16
2 0.66 0.34
3 0.11 0.89
4 0.17 0.83
5 0.92 0.08
. . .
. . .
. . .
上記を取得できますが、そのためには次のようなことをする必要があります。
tmp <- predict(model, out.data[test.rows, feature.cols], "prob")
[test.rows
は、モデルのテスト中に使用された行の行番号をキャプチャします。詳細はここには示されていませんが、テスト行IDがmodel
に出力されるため単純です。
その後、すべてが正常に動作します。 問題は、モデルが大きく、実行に非常に長い時間がかかることです。予測自体にも時間がかかります。予測shouldはまったく不要であるため(テストデータセットのROC曲線を計算したいだけです。計算)、このステップをスキップしたいと考えていました。 オリジナルにフラグを立てることができるものはありますかrandomForest
必要のない呼び出し再実行]predict
function?
_model$predicted
_は[〜#〜] not [〜#〜]predict()
によって返されるものと同じものです。 TRUE
またはFALSE
クラスの確率が必要な場合は、predict()
を実行するか、_x,y,xtest,ytest
_を渡す必要があります
_randomForest(x,y,xtest=x,ytest=y),
_
ここで_x=out.data[, feature.cols], y=out.data[, response.col]
_。
_model$predicted
_は、各レコードの_model$votes
_の値が大きいクラスに基づいてクラスを返します。 votes
は、@ joranが指摘したように、ランダムフォレストからのOOB(out of bag)「投票」の割合であり、投票はOOBサンプルでレコードが選択されたときにのみカウントされます。一方、predict()
は、すべてのツリーによる投票に基づいて、各クラスの真の確率を返します。
randomForest(x,y,xtest=x,ytest=y)
関数の使用は、上記の例のように、式または単にrandomForest(x,y)
を渡す場合とは少し異なります。 randomForest(x,y,xtest=x,ytest=y)
は各クラスの確率を返します。これは少し奇妙に聞こえるかもしれませんが、_model$test$votes
_の下にあり、予測クラスは_model$test$predicted
_の下にあります。どのクラスの_model$test$votes
_の値が大きいか。また、randomForest(x,y,xtest=x,ytest=y)
を使用する場合、_model$predicted
_および_model$votes
_の定義は上記と同じです。
最後に、randomForest(x,y,xtest=x,ytest=y)
を使用する場合、predict()関数を使用するには、keep.forestフラグをTRUEに設定する必要があります。
_model=randomForest(x,y,xtest=x,ytest=y,keep.forest=TRUE).
prob=predict(model,x,type="prob")
_
prob
[〜#〜] will [〜#〜]テストデータ入力は両方ともx
であるため、_model$test$votes
_と同等です。