7

私は、約 150 万件の観測データセットを扱っています。データの小さなサブセット以上で回帰ツリー (パッケージのmob()* 関数を使用していpartyます) を実行すると、非常に時間がかかることがわかりました (50k を超える obs のサブセットでは実行できません)。

計算を遅くしている2つの主な問題を考えることができます

  1. 分割は、データセット全体を使用して各ステップで計算されています。ツリーの各サブノードでサンプルのサイズを補充し続ける限り、データのランダムなサブセットに基づいて各ノードで分割する変数を選択した結果に満足しています。
  2. 操作は並列化されていません。ツリーが最初の分割を行うとすぐに、2 つのプロセッサを使用できるようになるはずです。そのため、16 個の分割が行われるまでに、私のマシンの各プロセッサが使用されます。実際には、1つだけが使用されているようです。

大規模なデータセットに対してより適切に機能する代替ツリーの実装、または計算を高速化するために変更できるものについて、誰か提案があります**?

*mob()各ノードの下部に線形回帰を当てはめたいので、治療変数への応答に基づいてデータを分割するために、を使用しています。

** 計算を大幅に遅らせていると思われることの 1 つは、16 型の因子変数があることです。分割する変数のサブセットの計算は、他の分割よりもはるかに時間がかかるようです (それらをグループ化するには非常に多くの異なる方法があるため)。この変数は、私たちが重要だと信じている変数の 1 つであるため、完全に削除することには消極的です。ツリー モデルに入れる前に、型をより少ない数の値にグループ化する推奨される方法はありますか?

4

1 に答える 1

4

私の回答は、これらのスライドを使用したクラスからのものです (スライド 20 を参照)

そこにある声明は、多数のカテゴリを持つカテゴリ予測変数を処理する簡単な方法はないということです。また、デシジョン ツリーとランダム フォレストは、多数のカテゴリを持つカテゴリ予測子で自動的に分割することを好むこともわかっています。

いくつかの推奨される解決策:

  • カテゴリ予測子をより少ないビン (まだ意味のあるもの) にビン分けします。
  • 手段に従って予測子を並べ替えます (スライド 20)。これは私の教授の推薦です。しかし、それが私を導くのは、 in を使用することordered factorですR
  • 最後に、このカテゴリ予測子の影響に注意する必要があります。たとえば、randomForestパッケージでできることがわかっていることの 1 つは、randomForestパラメーターmtryをより低い数値に設定することです。これにより、分割ごとにアルゴリズムが参照する変数の数が制御されます。低く設定すると、残りの変数と比較して、カテゴリ予測子のインスタンスが少なくなります。これにより、推定時間が短縮され、メソッドからの非相関の利点によりrandomForest、カテゴリ変数が過適合にならないようになります。

最後に、MARS または PRIM メソッドを検討することをお勧めします。私の教授はそれについてのスライドをここに持っています。PRIM は計算要件が低いことで知られています。

于 2013-09-20T16:17:47.103 に答える