タイトルのテキスト
タイトルのテキスト
タイトルのテキスト
タイトルのテキスト

サイキットラーンを使った決定木によるデータ推測

AI Python

t f B! P L

 

パソコンの画像

機械学習の中でも、決定木は直感的で理解しやすいモデルの一つです。この記事では、Pythonの機械学習ライブラリであるサイキットラーンを使用して、決定木によるデータの推測を実装してみましょう。

〇コードの実装

1インストールとライブラリの準備

まず最初に、サイキットラーンをインストールしましょう。また、グラフの可視化に使うためにmatplotlibもインストールします。

pip install scikit-learn matplotlib

そして、以下のように必要なライブラリをインポートします。

import numpy as np

import matplotlib.pyplot as plt

from sklearn.datasets import make_classification

from sklearn.model_selection import train_test_split

from sklearn.tree import DecisionTreeClassifier

from sklearn.metrics import accuracy_score, confusion_matrix

2データの生成と分割

決定木の例として、仮想的なデータを生成してみましょう。以下のコードでは、make_classification関数を使用してランダムなデータを生成します。

3データ生成

実際は自分のデータを使いますが、ここでは仮です。

X,y = make_classification(n_samples=1000, n_features=20, n_classes=2, random_state=42)

4データ分割

データを学習用と予測用に分けています。

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

サイキットラーンのDecisionTreeClassifierを使って決定木モデルをトレーニングします。

5モデルの作成とトレーニング

model = DecisionTreeClassifier(random_state=42)

model.fit(X_train, y_train)

トレーニングが終わったら、テストデータを使ってモデルの予測を行い、性能を評価します。

6予測

y_pred = model.predict(X_test)

 〇モデルの性能評価

accuracy = accuracy_score(y_test, y_pred)

conf_matrix = confusion_matrix(y_test, y_pred)

print(f"Accuracy: {accuracy}")

print(f"Confusion Matrix:\n{conf_matrix}")

〇決定木の可視化

最後に、トレーニングされた決定木を可視化してみましょう。

from sklearn.tree import plot_tree

plt.figure(figsize=(12, 8))

plot_tree(model, filled=True, feature_names=[f"Feature {i+1}" for i in range(20)], class_names=['Class 0', 'Class 1'])

plt.show()

〇コードをまとめると

import numpy as np

import matplotlib.pyplot as plt

from sklearn.datasets import make_classification

from sklearn.model_selection import train_test_split

from sklearn.tree import DecisionTreeClassifier

from sklearn.metrics import accuracy_score, confusion_matrix

X, y =make_classification(n_samples=1000, n_features=20, n_classes=2, random_state=42)

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

model = DecisionTreeClassifier(random_state=42)

model.fit(X_train, y_train)

y_pred = model.predict(X_test)

accuracy = accuracy_score(y_test, y_pred)

conf_matrix = confusion_matrix(y_test, y_pred)

print(f"Accuracy: {accuracy}")

print(f"Confusion Matrix:\n{conf_matrix}")

で、決定木による分類とその評価を行うことができます。

〇注意点

Scikit-learnの決定木モデルを使用して分類を行う際には、以下の注意点に留意することが重要です。

・過剰適合への対策:

決定木はトレーニングデータに対して過剰に適合しやすい傾向があります。木の深さを適切に設定するか、枝刈りを行うなどして、過学習を抑制する必要があります。

・可解性の損失:

決定木は非常に複雑なモデルを構築することができますが、これによりモデルの可解性が損なわれることがあります。ツリーが非常に深くなると、解釈が難しくなり、説明が困難になる可能性があります。

・特徴量の重要性:

決定木モデルでは、各特徴量の重要性を評価することができます。トレーニング後にfeature_importances_属性を確認して、モデルにとって重要な特徴量を把握しましょう。

# トレーニング後に重要性を取得

importances = dt_model.feature_importances_

・カテゴリカル変数のエンコーディング:

決定木は通常、数値データに対して動作します。カテゴリカル変数が含まれている場合、適切なエンコーディング(例: ワンホットエンコーディング)を施してください。

# カテゴリカル変数をワンホットエンコーディング

X_encoded = pd.get_dummies(X)

・クラスの不均衡:

クラスが不均衡な場合、モデルは多数派クラスにバイアスをかける傾向があります。適切なサンプリング手法やクラスの重み付けを検討して、不均衡なデータに対処しましょう。

# クラスの重み付け

dt_model = DecisionTreeClassifier(class_weight='balanced')

・ランダム性の制御:

決定木のトレーニングにはランダム性が関与する場合があります。結果を再現したい場合は、random_stateパラメータを設定するなどしてランダム性を制御しましょう。

# ランダム性の制御

dt_model = DecisionTreeClassifier(random_state=42)

これらの注意点を考慮して、決定木モデルを適切に構築し、解釈可能で信頼性の高い分類モデルを作成することが重要です。

〇まとめ

これで、サイキットラーンを使った決定木によるデータ推測が完了しました。決定木は、分類問題において直感的で理解しやすいモデルであり、サイキットラーンを利用することで簡単に実装できます。データの生成、モデルのトレーニング、予測、評価、可視化といった手順を順に実行することで、機械学習の基本的な流れを体験できます。これをベースに、実際のデータに対して決定木を適用してみると良いでしょう。

koneka1208

koneka1208

自己紹介

自分の写真
エクセル好きの窓際会社員です。 エクセルの操作法や日々の会社で得た知見などを発信していきます。 よろしくお願いします。

ブログ アーカイブ

連絡フォーム

名前

メール *

メッセージ *

QooQ