どうもニコイチです。前回はROC曲線について学びました。この記事では、Pythonを使ったデータ分析の基本として「決定木」の作成と可視化を学びます。今回は、具体的な例として「定期貯金契約に関するデモデータ」を使用し、ステップバイステップで解説します。特に決定木の描画は重要な要素となりますのでぜひ抑えてください。
目次
決定木とは?
「決定木」とは、データを条件に基づいて分類するモデルです。例えば、質問「今日は傘が必要ですか?」に答える際に「天気はどうか」「雨が降りそうか」といった条件を枝分かれさせて結論を出すのに似ています。
ステップ1:必要なライブラリをインストール・インポート
以下のコードを実行して、必要なライブラリをインストールし、インポートします。
# データ解析ライブラリ
import pandas as pd
# データ分割と決定木作成
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier, export_graphviz
# 可視化ライブラリ
import pydotplus
from matplotlib import pyplot as plt
from PIL import Image
import io
ステップ2:データの読み込みと準備
CSVファイルを読み込み、データを準備します。
# データ読み込み
data = pd.read_csv('/mnt/data/data.csv')
# データの内容を確認
print(data.head())
# 特徴量と目的変数に分ける
X = data.drop("目的変数列名", axis=1) # 目的変数列名を実際の名前に変更
y = data["目的変数列名"]
# 訓練データとテストデータに分割
train_X, test_X, train_y, test_y = train_test_split(X, y, test_size=0.3, random_state=0)
ステップ3:決定木モデルの作成
モデルを作成し、訓練データを用いて学習させます。
# 決定木モデルの作成
tree = DecisionTreeClassifier(max_depth=2, random_state=0)
tree.fit(train_X, train_y)
ステップ4:決定木の可視化
以下の手順で、作成した決定木を視覚的に確認します。
# 中間ファイルとして決定木を出力
export_graphviz(
tree,
out_file="tree.dot",
feature_names=train_X.columns,
class_names=["クラス1", "クラス2"], # クラス名を変更
filled=True,
rounded=True
)
# グラフを画像として表示
g = pydotplus.graph_from_dot_file(path="tree.dot")
gg = g.create_png()
img = io.BytesIO(gg)
img2 = Image.open(img)
plt.figure(figsize=(img2.width/100, img2.height/100), dpi=100)
plt.imshow(img2)
plt.axis("off")
plt.show()
よくある質問とつまづきポイント
- データの列名がわからない場合
データを読み込んだ後に、data.columns
を使って列名を確認しましょう。 - ライブラリのエラー
ライブラリがインストールされていない場合は、pip install
コマンドを使ってインストールしてください。 - 決定木の深さ(max_depth)とは?
深さは、枝分かれの階層を示します。小さすぎると単純すぎるモデルに、大きすぎると過剰適合する可能性があります。
コメント