RパッケージrandomForestで誤分類のコストを制御することは可能ですか?
私自身の研究では、偽陰性(例えば、人が病気にかかっている可能性があるというミス)は、偽陽性よりもはるかに費用がかかります。パッケージrpartを使用すると、損失マトリックスを指定して誤分類に異なる重みを付けることにより、誤分類コストを制御できます。同様の何かが存在しrandomForest
ますか?たとえば、classwt
Gini基準を制御するオプションを使用する必要がありますか?
RパッケージrandomForestで誤分類のコストを制御することは可能ですか?
私自身の研究では、偽陰性(例えば、人が病気にかかっている可能性があるというミス)は、偽陽性よりもはるかに費用がかかります。パッケージrpartを使用すると、損失マトリックスを指定して誤分類に異なる重みを付けることにより、誤分類コストを制御できます。同様の何かが存在しrandomForest
ますか?たとえば、classwt
Gini基準を制御するオプションを使用する必要がありますか?
回答:
そうではありませんが、手動でrpart
モデルのバギングを行うRFクローンを作成することによって。
いくつかのオプションは、RFの出力が実際には鮮明な決定ではなく、連続スコアであるという事実、つまり、あるクラスに投票したツリーの一部であるという事実に由来しています。predict(rf_model,type="prob")
たとえば、ROC曲線を使用して抽出し、0.5よりも優れたしきい値を明らかにするために使用できます(後でcutoff
パラメーターを使用してRFトレーニングに組み込むことができます)。
classwt
アプローチも有効に見えますが、実際にはうまく機能しません-属性に関係なく、同じクラスのバランスのとれた予測と些細なキャストとの間の移行は、使用するにはシャープすぎる傾向があります。
コストを含める方法はいくつかあります。
(1)各バギングされたツリーのオーバー/アンダーサンプリング(層化サンプリング)は、コストを導入する最も一般的な方法です。データセットを意図的に不均衡にします。
(2)重み付け。決して機能しません。これはドキュメントで強調されていると思います。Giniの分割や最終投票など、すべての段階で重み付けする必要があると主張する人もいます。うまくいくとすれば、それはトリッキーな実装になるでしょう。
(3)Wekaのメタコスト関数。
(4)ランダムフォレストを確率的分類子として扱い、しきい値を変更する。私はこのオプションが最も好きではありません。私の知識不足が原因の可能性がありますが、アルゴリズムが確率を出力できるとしても、確率モデルであるかのように扱うことは意味がありません。
しかし、追加のアプローチがあると確信しています。
パラメーターを介しcostMatrix
てrandomForest
明示的に組み込むことができparms
ます。
library(randomForest)
costMatrix <- matrix(c(0,10,1,0), nrow=2)
mod_rf <- randomForest(outcome ~ ., data = train, ntree = 1000, parms = list(loss=costMatrix))
classwt
:はい、実際には、他のユーザーと一致して、結果が予想どおりではないことがわかりました。(iii)cutoff
:cutoff
この場合の利用方法については明確ではありませんが、さらなるアドバイスを歓迎します。