【応用①】クロスバリデーションとグリッドサーチで精度を上げる方法

はじめに

これまでの記事では、様々な機械学習モデルの実装方法と、過学習を防ぐための正則化について学んできました。

本記事では、モデルの性能をさらに高めるためのテクニックである「クロスバリデーション(Cross Validation)」と「グリッドサーチ(GridSearchCV)」を紹介します。

これらは、ハイパーパラメータを最適化しつつ、汎化性能の高いモデルを作るための重要な方法です。


クロスバリデーションとは?

基本の考え方

クロスバリデーションとは、データを複数の分割パターンで学習・評価することで、モデルの汎化性能(未知データへの対応力)をより正確に見積もる方法です。

K分割交差検証(K-Fold CV)

  • データをK個に分割し、K回にわたって学習と評価を繰り返す
  • 各回で1つを検証用(バリデーション)、残りを訓練用に使う
  • 最終的に各回のスコアの平均を取る
from sklearn.model_selection import cross_val_score
from sklearn.linear_model import Ridge
from sklearn.datasets import load_diabetes
from sklearn.preprocessing import StandardScaler
from sklearn.pipeline import make_pipeline
import numpy as np

# データ準備
X, y = load_diabetes(return_X_y=True)

# パイプラインで標準化 + モデル構築
model = make_pipeline(StandardScaler(), Ridge(alpha=1.0))

# クロスバリデーション(5分割)
scores = cross_val_score(model, X, y, cv=5, scoring='r2')
print("各foldのR²スコア:", scores)
print("平均スコア:", np.mean(scores))

グリッドサーチ(GridSearchCV)とは?

基本の考え方

グリッドサーチとは、あらかじめ指定した複数のハイパーパラメータの組み合わせを全て試し、その中で最も性能の高い組み合わせを選ぶ方法です。

クロスバリデーションと組み合わせることで、過学習を防ぎながら最適なモデルを選ぶことができます。


実装:グリッドサーチ + クロスバリデーション

from sklearn.model_selection import GridSearchCV
from sklearn.linear_model import Ridge
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler

# パイプライン構築
pipeline = Pipeline([
    ('scaler', StandardScaler()),
    ('ridge', Ridge())
])

# 探索するパラメータ(リッジのalpha)
param_grid = {
    'ridge__alpha': [0.01, 0.1, 1, 10, 100]
}

# グリッドサーチ + クロスバリデーション(5分割)
gs = GridSearchCV(pipeline, param_grid, cv=5, scoring='r2')
gs.fit(X, y)

print("ベストパラメータ:", gs.best_params_)
print("ベストスコア(平均R²):", gs.best_score_)

なぜパイプラインを使うのか?

  • データ前処理(標準化など)とモデルを一体化することで、CVの各foldでデータ漏洩を防げる
  • 処理が再現可能で、コードが整理される

おわりに

クロスバリデーションは、モデルの信頼性を高める評価手法であり、グリッドサーチはその上でハイパーパラメータを最適化するための強力な手段です。

この2つを組み合わせることで、機械学習モデルの精度と汎化性能を両立させることができます。

次回は、評価指標や混同行列など、分類問題での性能の正しい読み取り方について学びます。


練習問題

Q1. クロスバリデーションの目的は何ですか?

  • A. 訓練データのサイズを増やすこと
  • B. ハイパーパラメータをランダムに決めること
  • C. モデルの汎化性能を安定して評価すること

Q2. グリッドサーチはどのような処理を行う?

  • A. データの並び順を変える
  • B. パラメータのすべての組み合わせを試す
  • C. 学習済みモデルの可視化を行う

Q3. パイプラインを使うメリットは?

  • A. データ漏洩を防ぎ、処理を統一できる
  • B. 訓練時間を短縮できる
  • C. データをシャッフルするため

🔗 機械学習シリーズ 関連リンク

▶ 入門〜分類編

▶ 回帰編

▶ 応用編

コメント

タイトルとURLをコピーしました