0
1

決定木と勾配ブースティング決定木でのCART分析

Last updated at Posted at 2024-05-17

データサイエンスを使った意思決定の中でCART分析というものがあります。
簡単に言えば全体のデータをある基準で分割してある基準で分割してを繰り返してという決定木のやり方を使って分類過程から結果までを可視化しているものです。
そこで思ったのが決定木も勾配ブースティング決定木も同じく決定木でデータを最初の段階で分割していないという共通点があります。
しかし勾配ブースティング決定木は学習しながら最適な決定木を作っていくというところが違います。
そこで実際どのように違うかを見てみようと思います。

関数

勾配ブースティング決定木(アンサンブル)

from sklearn.tree import export_graphviz as EG
from pydotplus import graph_from_dot_data as GFDD
def cart_analysis_ensemble(x, y, model, filename="CART"):
    y_data = list(set(y.values))
    for i in range(len(y_data)):
        y_data[i] = str(y_data[i])
    for i in range(len(model.estimators_[len(model.estimators_)-1])):
        dotdata = EG(model.estimators_[len(model.estimators_)-1, i], filled=True, rounded=True, class_names=y_data, feature_names=x.columns, out_file=None)
        graph = GFDD(dotdata)
        graph.write_png(filename+str(i)+".png")

決定木

from sklearn.tree import export_graphviz as EG
from pydotplus import graph_from_dot_data as GFDD
def cart_analysis(x, y, model, filename="CART"):
    y_data = list(set(y.values))
    for i in range(len(y_data)):
        y_data[i] = str(y_data[i])
    dotdata = EG(model, filled=True, rounded=True, class_names=y_data, feature_names=x.columns, out_file=None)
    graph = GFDD(dotdata)
    graph.write_png(filename+".png")

プログラム

ライブラリのインポート

from lightgbm import LGBMClassifier as LGBMC
from sklearn.tree import DecisionTreeClassifier as DTC
from sklearn.ensemble import GradientBoostingClassifier as GBC
import pandas as pd

df = pd.read_csv("iris.csv")
y = df["category"]
x = df.drop("category", axis=1)
gbc = GBC()
gbc.fit(x, y)
cart_analysis_ensemble(x, y, gbc, filename="Gradient_boosting_Classifier")

dtc = DTC()
dtc.fit(x, y)
cart_analysis(x, y, dtc, filename="Dicision_Tree_Classifier")

この結果得られた決定木が

決定木

Dicision_Tree_Classifier.png2.png

勾配ブースティング決定木

クラスごとなので複数(3つ)あります。
Gradient_boosting_Classifier0.png
Gradient_boosting_Classifier1.png
Gradient_boosting_Classifier2.png
初期値で最大の深さが決められて過学習しないようになっていますね。それで恐らくクラス分作られて確率的(Softmax関数?)にやっているのかな?

まとめ

分析には決定木、予測精度を上げるには勾配ブースティング決定木ですね。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1