私は、約 150 万件の観測データセットを扱っています。データの小さなサブセット以上で回帰ツリー (パッケージのmob()
* 関数を使用していparty
ます) を実行すると、非常に時間がかかることがわかりました (50k を超える obs のサブセットでは実行できません)。
計算を遅くしている2つの主な問題を考えることができます
- 分割は、データセット全体を使用して各ステップで計算されています。ツリーの各サブノードでサンプルのサイズを補充し続ける限り、データのランダムなサブセットに基づいて各ノードで分割する変数を選択した結果に満足しています。
- 操作は並列化されていません。ツリーが最初の分割を行うとすぐに、2 つのプロセッサを使用できるようになるはずです。そのため、16 個の分割が行われるまでに、私のマシンの各プロセッサが使用されます。実際には、1つだけが使用されているようです。
大規模なデータセットに対してより適切に機能する代替ツリーの実装、または計算を高速化するために変更できるものについて、誰か提案があります**?
*mob()
各ノードの下部に線形回帰を当てはめたいので、治療変数への応答に基づいてデータを分割するために、を使用しています。
** 計算を大幅に遅らせていると思われることの 1 つは、16 型の因子変数があることです。分割する変数のサブセットの計算は、他の分割よりもはるかに時間がかかるようです (それらをグループ化するには非常に多くの異なる方法があるため)。この変数は、私たちが重要だと信じている変数の 1 つであるため、完全に削除することには消極的です。ツリー モデルに入れる前に、型をより少ない数の値にグループ化する推奨される方法はありますか?