前回のおさらいと今回のテーマ
こんにちは!前回は、機械学習モデルの評価方法について詳しく解説しました。正解率、精度、再現率、F1スコア、ROC曲線、AUCスコアといった指標を使うことで、モデルの性能を多角的に評価する方法を学びましたね。
今回は、モデルの性能をさらに向上させるためのハイパーパラメータチューニングについて解説します。ハイパーパラメータは、モデルの学習プロセスにおいてあらかじめ設定する必要があるパラメータであり、その値によってモデルの精度が大きく変わることがあります。そこで、最適なハイパーパラメータを見つけるために、グリッドサーチを用いたチューニング方法を学びましょう!
ハイパーパラメータとは?
ハイパーパラメータは、モデルの訓練前に設定するパラメータのことで、例えば以下のようなものが含まれます。
- 決定木: 木の深さ(
max_depth
)、分割する最小サンプル数(min_samples_split
)など - ロジスティック回帰: 正則化パラメータ(
C
)、ソルバ(solver
)など - サポートベクターマシン(SVM): カーネルの種類(
kernel
)、正則化パラメータ(C
)など
ハイパーパラメータはモデルごとに異なり、それぞれ適切な値を設定することでモデルの性能を最大化できます。
グリッドサーチとは?
グリッドサーチ(Grid Search)は、指定したハイパーパラメータの範囲や組み合わせを網羅的に検索し、最も性能が良い組み合わせを見つける方法です。Scikit-learnのGridSearchCV
を使うと、簡単にグリッドサーチを実装できます。
グリッドサーチの流れ
- 調整したいハイパーパラメータの範囲や候補を設定する。
- 各組み合わせに対してモデルを訓練し、交差検証で性能を評価する。
- 最も性能が良いハイパーパラメータの組み合わせを選択する。
グリッドサーチの実装
それでは、ロジスティック回帰モデルを例に、グリッドサーチを実装していきます。
1. データセットの準備
まずは、Scikit-learnのbreast_cancer
データセットを使用して、ロジスティック回帰モデルを訓練する準備をします。
import pandas as pd
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
# データの読み込みと準備
cancer = load_breast_cancer()
df = pd.DataFrame(cancer.data, columns=cancer.feature_names)
df['target'] = cancer.target
# 特徴量とターゲットの分離
X = df.drop('target', axis=1)
y = df['target']
# データの標準化
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)
# データの分割
X_train, X_test, y_train, y_test = train_test_split(X_scaled, y, test_size=0.2, random_state=42)
2. グリッドサーチの設定
次に、グリッドサーチの設定を行います。ロジスティック回帰のハイパーパラメータとして、C
(正則化パラメータ)とsolver
(最適化アルゴリズム)を調整します。
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import GridSearchCV
# モデルの定義
model = LogisticRegression()
# ハイパーパラメータの設定
param_grid = {
'C': [0.01, 0.1, 1, 10, 100],
'solver': ['newton-cg', 'lbfgs', 'liblinear']
}
# グリッドサーチの定義(交差検証は5分割で実施)
grid_search = GridSearchCV(model, param_grid, cv=5, scoring='accuracy')
# グリッドサーチの実行
grid_search.fit(X_train, y_train)
- param_grid: ハイパーパラメータの候補値を辞書形式で指定します。
- GridSearchCV(): グリッドサーチを実行するための関数です。
cv
で交差検証の分割数(ここでは5分割)を指定し、scoring
で評価指標(ここではaccuracy
)を設定します。
3. 結果の確認
最適なハイパーパラメータの組み合わせを確認し、モデルの性能を評価します。
# 最適なパラメータの表示
print(f"Best Parameters: {grid_search.best_params_}")
# テストデータでのスコア
best_model = grid_search.best_estimator_
accuracy = best_model.score(X_test, y_test)
print(f"Test Accuracy: {accuracy:.2f}")
- best_params_: グリッドサーチによって見つかった最適なハイパーパラメータを表示します。
- best_estimator_: 最適なハイパーパラメータで再訓練されたモデルを取得します。
他のモデルでのグリッドサーチ例
グリッドサーチは他のモデルにも適用可能です。例えば、決定木やサポートベクターマシン(SVM)での例を見てみましょう。
決定木でのグリッドサーチ
from sklearn.tree import DecisionTreeClassifier
# モデルの定義
tree_model = DecisionTreeClassifier()
# ハイパーパラメータの設定
tree_param_grid = {
'max_depth': [3, 5, 7, 10],
'min_samples_split': [2, 5, 10]
}
# グリッドサーチの定義
tree_grid_search = GridSearchCV(tree_model, tree_param_grid, cv=5, scoring='accuracy')
# グリッドサーチの実行
tree_grid_search.fit(X_train, y_train)
# 最適なパラメータの表示
print(f"Best Parameters for Decision Tree: {tree_grid_search.best_params_}")
SVMでのグリッドサーチ
from sklearn.svm import SVC
# モデルの定義
svm_model = SVC()
# ハイパーパラメータの設定
svm_param_grid = {
'C': [0.1, 1, 10],
'kernel': ['linear', 'rbf'],
'gamma': ['scale', 'auto']
}
# グリッドサーチの定義
svm_grid_search = GridSearchCV(svm_model, svm_param_grid, cv=5, scoring='accuracy')
# グリッドサーチの実行
svm_grid_search.fit(X_train, y_train)
# 最適なパラメータの表示
print(f"Best Parameters for SVM: {svm_grid_search.best_params_}")
グリッドサーチの注意点
- 計算コスト: グリッドサーチは全ての組み合わせを試すため、パラメータの候補が多いと計算時間が増加します。適切な範囲や候補数を設定することが重要です。
- 評価指標の選定: モデルの目的に応じて適切な評価指標(例:精度、再現率、F1スコア)を設定することで、実際のタスクに合った最適なモデルを見つけることができます。
まとめ
今回は、グリッドサーチを用いてモデルのハイパーパラメータチューニングを行う方法を解説しました。最適なハイパーパラメータを見つけることで、モデルの性能が大幅に向上する可能性があります。Scikit-learnのGridSearchCV
を活用することで、効率的に最適なパラメータを探索できるので、様々なモデルで試してみてください。
次回予告
次回は、
ニューラルネットワークの実装として、基本的なニューラルネットワークを構築する方法を解説します。AI開発の基礎となるニューラルネットワークの仕組みを学び、実際に構築していきましょう!
注釈
- ハイパーパラメータ: モデルの学習プロセスにおいて、事前に設定する必要があるパラメータ。
- グリッドサーチ(Grid Search): ハイパーパラメータの候補を網羅的に検索し、最適な組み合わせを見つける手法。
コメント