回答:
ランダムフォレストは、バギング(すべてではなく観測のサンプルを選ぶ)とランダムサブスペースメソッド(すべてではなく特徴のサンプルを選ぶ、つまり属性バギング)を使用してツリーを成長させます。観測値の数は多いが、木の数が少なすぎる場合、一部の観測値は一度だけ予測されるか、まったく予測されません。予測子の数は多いが、ツリーの数が少なすぎる場合、使用されるすべての部分空間で(理論的に)いくつかの特徴を見逃す可能性があります。どちらの場合も、ランダムフォレストの予測力が低下します。しかし、サブスペースの選択は各ノードで実行されるため、最後のケースはかなり極端なケースです。
分類中の部分空間の次元はデフォルトでは p(やや小さい、pは予測子の総数)ですが、ツリーには多くのノードが含まれています。回帰中、デフォルトでは部分空間の次元はp/3(十分な大きさ)ですが、ツリーに含まれるノードの数は少なくなります。したがって、ランダムフォレストの最適なツリー数は、極端な場合にのみ予測子の数に依存します。
アルゴリズムの公式ページには、ランダムフォレストはオーバーフィットしないと記載されており、必要なだけツリーを使用できます。しかし、Mark R. Segal(2004年4月14日。「機械学習ベンチマークとランダムフォレスト回帰。」バイオインフォマティクス&分子生物統計学センター)は、ノイズの多いデータセットに適合していることを発見しました。したがって、最適な数を取得するには、ntree
パラメーターのグリッドでランダムフォレストのトレーニングを試みるか(単純ですが、CPUをより多く消費します)、またはを使用して多数のツリーを持つ1つのランダムフォレストを構築しkeep.inbag
、最初のツリーのout-of-bag(OOB)エラー率を計算します(ここでnは1からに変わります)、OOBエラー率とツリー数の関係をプロットします(より複雑ですが、CPUの消費は少なくなります)。ntree
あなたが1000以上の特徴を持ち、1000行以上のツリーを持っていることができない場合は、何かを追加したいです。
私はあなたが最初にCPUとRAMの数を検出してからクロス検証を開始してそれらとツリーの数の比率を見つける必要があることをお勧めします
pythonでsikit learn n_jobs=-1
を使用する場合、すべてのプロセスを使用するオプションがありますが、コストは各コアのデータのコピーを必要とします。その後、この式をtrisできます
ntree = sqrt(行の数*列の数)/ numberofcpu