Pythonの機械学習ライブラリであるscikit-learn(sklearn)は、アルゴリズムの実装からデータセットの提供まで、高度なデータ分析を行うための機能が多数備わっています。今回はその中から、アンサンブル学習の一種であるランダムフォレストを使用し、グリッドサーチと交差検証によるハイパーパラメータチューニング、さらには特徴量の重要度を可視化する方法について紹介します。
1.Random Forestとは
ランダムフォレストは、アンサンブル学習の一種で、多数の決定木を生成し、その予測結果の多数決で最終的な予測を行う方法です。各決定木はデータセットの一部の特徴量から構築され、個々の決定木がデータの異なる側面を学習することで、全体として過学習を抑えつつ精度の高いモデルを構築します。
ランダムフォレストは特徴量の重要度を算出できるという利点もあります。これは、各決定木で利用される特徴量とその特徴が予測にどれだけ寄与したかを評価することで得られます。
では、具体的な実装を見てみましょう。
2.データの準備
まずはsklearn.datasetsからirisデータセットをロードします。このデータセットは4つの特徴量を持つ150のサンプルで、アヤメの3つの品種に分類されます。
from sklearn import datasets
# irisデータセットのロード
iris = datasets.load_iris()
X = iris.data
y = iris.target
3. データセットの分割
データセットはtrain_test_split関数を使用し、訓練用とテスト用に分割します。test_size=0.2と設定することで、全データの20%をテストデータとし、80%を訓練データとします。
from sklearn.model_selection import train_test_split
# データセットを訓練用とテスト用に分割
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
4. モデルの作成と訓練
RandomForestClassifierのインスタンスを作成します。次に、チューニングしたいパラメータのリストを設定し、GridSearchCVのインスタンスを作成します。GridSearchCVは与えられたパラメータの全ての組み合わせでモデルを訓練し、最適なパラメータを自動で見つけ出します。
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import GridSearchCV
# RandomForestClassifierのインスタンスを作成
rfc = RandomForestClassifier(random_state=42)
# チューニングしたいパラメータの設定
parameters = {'n_estimators':[10, 50, 100], 'max_depth':[2, 4, 6, 8, 10]}
# GridSearchCVのインスタンスを作成
clf = GridSearchCV(rfc, parameters, cv=5)
# モデルの訓練
clf.fit(X_train, y_train)
5.モデルの評価
テストデータを使用してモデルの予測を行い、classification_report関数を用いてモデルの性能を評価します。この関数は、精度(Precision)、再現率(Recall)、F値(F1-score)など、分類問題の評価に必要な各種指標を計算します。
from sklearn.metrics import classification_report
# テストデータを使って予測
y_pred = clf.predict(X_test)
# モデルの性能を評価
print(classification_report(y_test, y_pred))
コマンドに以下の数値が出力されます。
6.特徴量の重要度の可視化
最後に、ランダムフォレストの特性を利用して、特徴量の重要度を可視化します。feature_importances_属性を使用することで、各特徴量が予測にどれだけ寄与しているかを確認することができます。
import matplotlib.pyplot as plt
import pandas as pd
# 特徴量の重要度を可視化
feature_imp = pd.Series(clf.best_estimator_.feature_importances_, index=iris.feature_names).sort_values(ascending=False)
# 特徴量の重要度をプロット
plt.figure(figsize=(12, 6))
plt.title("Feature importances")
plt.bar(feature_imp.index, feature_imp.values, color="b", align="center")
plt.show()
特徴量の重要度をプロットした図が出力されます。
7.まとめ
本記事では、Pythonの機械学習ライブラリscikit-learn及びランダムフォレストを活用した分析について解説しました。ランダムフォレストはアンサンブル学習の一種で、多数の決定木を組み合わせることで汎化性能の高いモデルを構築します。また、特徴量の重要度も算出することも可能です。
scikit-learnはその豊富な機能と使いやすさから、データ分析を行う上で非常に便利なツールです。これらの知識を活用し、さまざまなデータに対して高度な分析を行ってみてください。
Python学習のお悩み、ビデオチャットにて解決します!
独学でPythonを学ぼうとしたけれども、どこから始めていいのか見当がつかない。Pythonを学んだ後で何ができるのか具体的にイメージができていない。そんなあなたのお悩み、お任せください!初心者から経験者まで、Python学習に関するお悩みをビデオチャットを通じて解決します。
学び始めの一歩を踏み出す方、すでに学習を始めている方、どんな方でも大歓迎です。ぜひ気軽にご相談ください!
あなたのコード開発をサポートします!
コードのバグ修正から新機能の追加まで、あなたのプロジェクトが直面するあらゆる課題を解決するためのサポートをします!