5

114954 行と 135 列 (予測子) を持つトレーニング データでランダムフォレストをトレーニングしています。そして、次のエラーが表示されます。

model <- randomForest(u_b_stars~. ,data=traindata,importance=TRUE,do.trace=100, keep.forest=TRUE, mtry=30)

Error: cannot allocate vector of size 877.0 Mb
In addition: Warning messages:
1: In randomForest.default(m, y, ...) :
The response has five or fewer unique values.  Are you sure you want to do regression?
2: In matrix(double(nrnodes * nt), ncol = nt) :
Reached total allocation of 3958Mb: see help(memory.size)
3: In matrix(double(nrnodes * nt), ncol = nt) :
Reached total allocation of 3958Mb: see help(memory.size)
4: In matrix(double(nrnodes * nt), ncol = nt) :
Reached total allocation of 3958Mb: see help(memory.size) 
5: In matrix(double(nrnodes * nt), ncol = nt) :
Reached total allocation of 3958Mb: see help(memory.size)

このエラーを回避するにはどうすればよいですか? より少ないデータでトレーニングする必要がありますか? しかし、それはもちろん良いことではありません。誰かが、トレーニング データからより少ないデータを取得する必要がない代替案を提案できますか? 完全なトレーニング データを使用したい。

4

2 に答える 2

10

以前の質問 (今は見つけられません) への回答で述べたように、サンプル サイズを大きくすると、RF のメモリ要件が非線形的に影響を受けます。モデル マトリックスが大きくなるだけでなく、葉ごとのポイント数に基づく各ツリーの既定のサイズも大きくなります。

メモリの制約を考慮してモデルを適合させるには、次の操作を実行できます。

  1. nodesizeパラメーターをデフォルトよりも大きな値 (回帰 RF の場合は 5) に増やします。114k の観測値を使用すると、パフォーマンスを損なうことなく、これを大幅に増やすことができるはずです。

  2. パラメーターを使用して、RF ごとのツリーの数を減らしntreeます。いくつかの小さな RF を取り付け、それらを組み合わせてcombine森全体を生成します。

于 2013-08-04T06:31:15.017 に答える
3

より多くのメモリを備えたマシンを使用できない場合に試すことができる 1 つの代替方法は、データのサブセット (たとえば 10 個の個別のサブセット) で個別のモデルをトレーニングし、次に各モデルの出力を適切な方法で結合することです (最も簡単な方法です)。これは 10 個のモデルの予測の平均ですが、モデルをアンサンブルする方法は他にもありますhttp://en.wikipedia.org/wiki/Ensemble_learning )。

技術的には、メモリ制限に達することなくすべてのデータを使用できますが、結果として得られるデータのサブセットのサイズによっては、結果のモデルが弱すぎて役に立たない場合があります。

于 2013-08-03T18:56:53.520 に答える