035_【分類】決定木

目次

決定木とは?

決定木とは、2択の質問の分岐を繰り返して分類を行うアルゴリズムです。
YESかNOの2択の質問で分岐を行うので、私たち人間にとってとてもわかりやすいアルゴリズムですね!

この分岐している様子が枝分かれしている「木」のように見えるのでツリー構造と呼ばれています。

モデルの使い方

上記の書式を用いて学習させたモデルにpredict命令で説明変数Xを渡すと予測結果が帰ってきます。

ここから

で作成したplot_boundary関数を使っていくためこの関数をあらかじめ実行し、読み込ませておいてください!

決定木

ランダムの種:0
特徴量:2
塊数:3
ばらつき:0.5
点の数:500のデータセットを作成して実際に決定木を確認してみましょう!

#1 ランダムの種:0、特徴量:2、塊数:3、ばらつき:0.5、点の数:500個のデータセットを作成
#2 訓練データとテストデータに分ける
#3 訓練データを使って決定木の学習モデルを作成
#4 テストデータで正解率を調べる
#5 テストデータでこの学習モデルの分類の状態を表示


from sklearn.tree import DecisionTreeClassifier

X, y = make_blobs(
    random_state=0,
    n_features=2,    
    centers=3,
    cluster_std=0.5,
    n_samples=500)

X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=0) 

model = DecisionTreeClassifier(max_depth=None, random_state=0)
model.fit(X_train, y_train)

pred = model.predict(X_test)
score = accuracy_score(y_test, pred)
print("正解率:", score*100, "%")

df = pd.DataFrame(X_test)
plot_boundary(model, df[0], df[1], y_test, "df [0]", "df [1]")

参考資料:Python3年生機械学習のしくみ

実行結果

直線を用いて3つに分けることができました!まるでパズルのように分類していますがどのような状態なのでしょうか。

決定木のツリー構造

表示することができた決定木を用いた分類について、詳しい情報をツリー構造で確認してみましょう!

plot_tree命令を使ってツリー構造を表示してみます!理解を深めるために、学習モデルと特徴量の名前、分類結果の名前を使って表示します。

コード

from sklearn.tree import plot_tree

plt.figure(figsize=(15, 15))
plot_tree(model, fontsize=20, filled=True, 
          feature_names=["df [0]", "df [1]"], 
          class_names=["0","1","2"])
plt.show()

参考資料:Python3年生機械学習のしくみ

実行結果

上図のようなツリー構造になることがわかりました!

前回の分類した状態のグラフと比べると下の画像の順番に分類していることがわかります!

このように分類を繰り返しているのでパズルのような形になるのです。

目次