RandomForestのdtreevizで決定木の可視化

 

目次

1. dtreeviz 決定木の可視化
2.実験
2.1 環境設定
2.2 データロード
2.3 RandomForestClassifierモデル
2.4 決定木の図
2.5 dtreeviz決定木の図
2.6 葉の純度
2.7 ターゲットクラスの分布

 

1. dtreeviz 決定木の可視化

dtreevizは決定木関係のアルゴリズム結果を、可視化するライブラリです。対応ライブラリーとしては、scikit-learn, XGBoost, Spark MLlib, LightGBMにおいて利用できます。

 

Dtreevizは複数プラットフォームに対応されています。

pip install dtreeviz             # sklearn

pip install dtreeviz[xgboost]    # XGBoost

pip install dtreeviz[pyspark]    # pyspark

pip install dtreeviz[lightgbm]   # LightGBM

 

dtreevizライブラリ:https://github.com/parrt/dtreeviz

 

dtreeviz関数

tree_model決定木のモデル
X_train説明変数データ
y_train目的変数データ
feature_namesX_trainの各特徴量名
target_name目的変数の名前
class_names(分類木の時必須)各クラスに対応する名前
precision特徴量の境界値を表示する小数点以下の桁数
orientation木が分岐する方向 TD: top-down or LR: left-right
show_root_edge_labelsルートからノードへの分岐の値関係を表示するか
show_node_labelsノード番号を表示するか
fancy特徴量の決定境界を可視化するか
histtype分類木の時、ヒストグラムの表示形式
X推論過程を可視化するサンプルデータ
max_X_features_LRorientation=’LR’の時、表示するサンプルデータの特徴量数
max_X_features_TDorientation=’TD’の時、表示するサンプルデータの特徴量数

 

2.実験

環境:Google Colab

データセット:sklearnのワインのデータ

ワインの品種に関するデータセット 178データ含まれている。3クラス分類で予測したりする

モデル:RandomForestClassifier

可視化:RandomForestの決定木の図、dtreeviz決定木の図

 

2.1 環境設定

ライブラリのインストール

! pip install dtreeviz

 

ライブラリのインポート

# Load packages

import numpy as np

import pandas as pd

from sklearn.datasets import load_wine

from sklearn.ensemble import RandomForestClassifier

from sklearn import tree

from dtreeviz.trees import *

from matplotlib import pyplot as plt

plt.rcParams.update({‘figure.figsize’: (12.0, 8.0)})

plt.rcParams.update({‘font.size’: 14})

 

2.2 データロード

ワインのデータセットを読み込みます。

wine = load_wine()

X = pd.DataFrame(wine.data, columns=wine.feature_names)

y = wine.target

class_names = wine.target_names

feature_names = wine.feature_names

 

 

2.3 RandomForestClassifierモデル

モデル学習します。

# max_depth=3のRandomForest

 

rf = RandomForestClassifier(n_estimators=100, max_depth=3)

rf.fit(X, y)

RandomForestClassifier(bootstrap=True, ccp_alpha=0.0, class_weight=None,

criterion=’gini’, max_depth=3, max_features=’auto’,

max_leaf_nodes=None, max_samples=None,

min_impurity_decrease=0.0, min_impurity_split=None,

min_samples_leaf=1, min_samples_split=2,

min_weight_fraction_leaf=0.0, n_estimators=100,

n_jobs=None, oob_score=False, random_state=None,

verbose=0, warm_start=False)

2.4 決定木の図

# The plot of first Decision Tree

 

_ = tree.plot_tree(rf.estimators_[0], feature_names=X.columns, filled=True)

2.5 dtreeviz決定木の図

# dtreeviz decision tree

 

dtreeviz(rf.estimators_[0], X, y, feature_names=X.columns, target_name=”Target”)

対象データを作成します。

# random sample

X_ = wine.data[np.random.randint(0, len(wine.data)),:]

X_

 

dtreeviz決定木の図 + 対象データ

# dtreeviz decision tree with random sample

dtreeviz(rf.estimators_[0], X, y, feature_names=X.columns, X=X_, target_name=”Target”)

dtreeviz水平決定木の図

 # Left-right dtreeviz decision tree

dtreeviz(rf.estimators_[0], X, y, feature_names=X.columns, orientation =’LR’, X=X_, target_name=”Target”)

対象データを注目してdtreeviz決定木の図

 # dtreeviz decision tree with random sample + show_just_path

dtreeviz(rf.estimators_[0], X, y, feature_names=X.columns,

target_name=”Target”, orientation =’TD’,

X=X_, show_just_path=True)

2.6 葉の純度

Random Forestの別れていった葉のデータの割合は予測の信頼性に影響します。分類の場合、葉の純度は多数派のターゲットクラス(ジニ、エントロピー)に基づいて計算されます。予測した結果の分散が小さい葉(回帰も含む)つまり分類が偏っている時(分類)は、はるかに信頼性の高い予測値です(回帰も含む)。

# Leaf node purity

 

viz_leaf_criterion(rf.estimators_[0], display_type = “plot”)

2.7 ターゲットクラスの分布

分類のための視覚化です。葉のサンプルからターゲットクラス値の分布を確認できます。

# Leaf node samples for classification

 

ctreeviz_leaf_samples(rf.estimators_[0], X, y)

 

担当者:HM

香川県高松市出身 データ分析にて、博士(理学)を取得後、自動車メーカー会社にてデータ分析に関わる。その後コンサルティングファームでデータ分析プロジェクトを歴任後独立 気が付けばデータ分析プロジェクトだけで50以上担当

理化学研究所にて研究員を拝命中 応用数理学会所属