でRにおけるアプリケーションとの統計的学習への入門、著者は、フィッティングことを書き決定木は非常に高速ですが、これは私には意味がありません。アルゴリズムは、最適な分割を見つけるために、すべての機能を通過し、可能な限りあらゆる方法で分割する必要があります。観測値を持つ数値フィーチャの場合、これにより各フィーチャにn個のパーティションが作成される可能性があります。
バイナリ分割の仕組みを誤解していますか?または、このアルゴリズムに時間がかからない理由はありますか?
でRにおけるアプリケーションとの統計的学習への入門、著者は、フィッティングことを書き決定木は非常に高速ですが、これは私には意味がありません。アルゴリズムは、最適な分割を見つけるために、すべての機能を通過し、可能な限りあらゆる方法で分割する必要があります。観測値を持つ数値フィーチャの場合、これにより各フィーチャにn個のパーティションが作成される可能性があります。
バイナリ分割の仕組みを誤解していますか?または、このアルゴリズムに時間がかからない理由はありますか?
回答:
デシジョンツリーアルゴリズムは、ツリーに適合する場合、可能なすべてのツリーを計算するわけではありません。そうした場合、NPハードを解くことになります。問題。通常、決定木フィッティングアルゴリズムは、フィッティングプロセスで貪欲な決定を行います。各段階で、特定のノードのデータで最適な分割を見つけるためにサブ問題を最適化し、フィッティングプロセスを進めます。また、決定ツリーの奥深くに移動すると、特定のノードに到達したデータのセットが小さくなり、データの小さなサブセットで分割ルールを最適化します。これらの選択はすべて、指定されたノード内のデータの線形スキャンです。これは複雑なことではありませんが、多数の観測値や分割する共変量が多い場合は、計算量が多少高くなる可能性があります。ただし、多くの作業を分割して別のマシンに送信して作業することができるため、スケールアップするために計算アーキテクチャを構築する方法があります。
意思決定ツリーを構築するためのCARTアルゴリズムとC4.5アルゴリズムにはいくつかの違いがあります。例えば、CARTはGini Impurityを使用して機能を選択し、C.4.5はShannon Entropyを使用します。違いが答えに関連しているとは思わないので、それらを区別しません。
意思決定ツリーが思っているより速くなるのは、次のとおりです。
and
するとより良いツリーが得られるというルールを見逃す可能性があることを意味します。つまり、機能エンジニアリングを行うときは、非常に慎重/賢明でなければなりません。たとえば、人々がどれだけ飲むかを予測しようとしているとしますnew_feature = hour > 22 & hour < 4 & (friday_night | saturday_night)
。次のようなエンジニアをフィーチャーしたいと思うかもしれません。デシジョンツリーはそのようなルールを見逃したり、必要以上に重要性を低くしたりする場合があります。X <= 1
X <= 1.5
X <= 2
X <= 1
X <= 1.5
xgboost
高速化の理由です。勾配ブースティングは逐次的であり、並列化できませんが、ツリー自体は可能です。答えを充実させるために、
階層的な軸に平行な決定木は高速ですが(CART、C4.5)、非階層的な決定木や、そうでない斜めパーティションを実行するものなど、より正確なものもあります。興味がある場合は、以下の参考文献を確認してください(これらは厳選されたものではありません)。
非階層:
Grubinger、T.、Zeileis、A。、およびPfeiffer、K .-。、2014年。
斜め分割:
Murthy、SK、Kasif、S。およびSalzberg、S.、1994年。斜め決定木の誘導のためのシステム。J.アーティフ Intell。解像度 2(1)、1-32 http://dx.doi.org/doi:10.1613/jair.63。Cantú-Paz、E.およびKamath、C.、2003。進化的アルゴリズムによる斜め決定木の誘導。IEEE Trans。進化。計算。7(1)、54-68。http://dx.doi.org/10.1109/TEVC.2002.806857。Heath、D.、Kasif、S.およびSalzberg、S.、1993。斜め決定木の誘導。J.アーティフ Intell。解像度 2(2)、1002-1007。
がんばろう!