決定木
#アルゴリズム
決定木とは
木構造で表現できる教師あり学習モデルのこと
決定木の構造
https://gyazo.com/057e388d61ccdfafa8a6247022a35044
非終端ノードはある説明変数に対応づけられ、その取りうる値によって、子ノードへ分岐する
終端ノードは最終的な分類結果となるクラスラベルが対応づけられる
決定木を使ってあるデータを分類するときは、根から順に、各ノードで示された条件を判定して子ノードへと辿っていき、最終的にたどり着いた終端ノードのクラスラベルを分類結果とする
たとえば上の例でいうと、あるデータの説明変数が$ x_1 = 5, x_2 = 4だとすると、次のような順で判断される
最初のノードは$ x_2 < 5なのでyesとなり、左の子ノードへ進む
そのノードは$ x_1 \le 3.2なのでnoとなり、右の子ノードへ進む
このノードは終端ノードで「$ y =×」なので、分類結果は「×」となる
なお、終端ノードでもデータが分類しきれていないこともあり、その場合は、そのノードに属するデータにおけるクラスの比率をもって、分類の確率とみなす、といったことが行われる
変数を2分割していくだけなので、クラス決定境界は軸に対して平行に得られる(ナナメには引けない)
決定木の学習
決定木の学習は、根ノードから順に、情報利得(information gain)が大きくなる説明変数で順次分割していくことで行う
以下のページで、学習イメージを詳しく説明しています
決定木の学習のイメージ
特徴
意味解釈可能性(可解釈性、説明可能性)(interpretability)に優れるため、実応用されやすい
「どの変数がどうなっていれば、クラスがどうなるか」を解釈しやすい
↓のように可視化することも多い
https://gyazo.com/d0c2e08d3555d6310ce7d072f04cf878
scikit-learnにも可視化のためのクラスが用意されている(他にもある)
各ノードでの分割において、「その説明変数によって不純度を減少させた度合い」を決定木全体で計算したものに基づいて、「説明変数(特徴量)の重要度(feature importance)」を計算することができ、各変数がどれくらい分類に寄与しているかの情報を知ることができる
決定木の実装
scikit-learnではsklearn.tree.DecisionTreeClassifierなど
sklearn.tree.DecisionTreeClassifier — scikit-learn 1.1.3 documentation
決定木全体のドキュメント → 1.10. Decision Trees — scikit-learn 1.1.3 documentation