🌲

Scikit-learnで分類用の決定木を作ってみよう

2024/10/21に公開

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

import numpy as np 
import pandas as pd 
import matplotlib.pyplot as plt 
from sklearn import datasets 
from sklearn.model_selection import train_test_split 
from sklearn.tree import DecisionTreeClassifier, plot_tree 
from sklearn.metrics import accuracy_score, classification_report, confusion_matrix

データセットを読み込む

今回は Breast cancer wisconsin (diagnostic) dataset という Scikit-learn が提供している乳がんのデータセットを使います。(詳細はこちらのScikit-learnのページで確認できます。)

cancer = datasets.load_breast_cancer(as_frame=True)

乳がんのデータってどんなデータ?

データがどんなものか理解しないで決定木を作っても意味がないので、まずはデータの中身を確認しましょう。

df = cancer.frame

今回は、このデータの中から乳がんがある人を当てる決定木を作ります。

特徴量とラベルにデータを分ける

特徴量の数値からラベル(「乳がんがる」か「乳がんがない」)を選択していきます。

X = cancer.data  # 特徴量
y = cancer.target  # ラベル

学習データとテストデータを分ける

決定木を作る時は、モデルの学習用データとモデルのテスト用データに受領データを分けます。

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

決定木を作成

clf = DecisionTreeClassifier(random_state=42)
clf.fit(X_train, y_train)

モデルを使ってテストデータの結果を予測

y_pred = clf.predict(X_test)

モデルを評価

精度 (Accuracy)

正しく分類されたサンプルの割合をパーセンてーじ形式で示します。

accuracy = accuracy_score(y_test, y_pred)
print(f"Accuracy: {accuracy * 100:.2f}%")

分類レポート (Classification Report)

精度、再現率、F1スコアなどが含まれているモデルの性能を詳細に評価するレポートを生成します。

print("\nClassification Report:\n", classification_report(y_test, y_pred))

混同行列 (Confusion Matrix)

モデルの予測と実際のクラスとの関係を視覚的に表現し、正しく分類されたサンプルと誤分類されたサンプルの数を示します。

print("Confusion Matrix:\n", confusion_matrix(y_test, y_pred))

決定木を書く

plt.figure(figsize=(12, 8)) 
plot_tree(clf, filled=True, feature_names=cancer.feature_names, class_names=cancer.target_names) 
plt.title("Decision Tree Visualization") 
plt.show()

GitHubで編集を提案

Discussion