機械学習の中でも、決定木は直感的で理解しやすいモデルの一つです。この記事では、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)
これらの注意点を考慮して、決定木モデルを適切に構築し、解釈可能で信頼性の高い分類モデルを作成することが重要です。
〇まとめ
これで、サイキットラーンを使った決定木によるデータ推測が完了しました。決定木は、分類問題において直感的で理解しやすいモデルであり、サイキットラーンを利用することで簡単に実装できます。データの生成、モデルのトレーニング、予測、評価、可視化といった手順を順に実行することで、機械学習の基本的な流れを体験できます。これをベースに、実際のデータに対して決定木を適用してみると良いでしょう。
0 件のコメント:
コメントを投稿