別名・略称:(なし)
グリッドサーチ(Grid Search):ハイパーパラメータの組合せを網羅的に試す手法
GridSearchCV が定番。 内部で交差検証と組み合わせて評価する。各パラメータの候補数の積。 4変数×5候補で 625 通り → 計算コスト爆発に注意。α、 ランダムフォレストの n_estimators、 SVM の C や gamma など。 これらを「総当たり」で試して最良を選ぶのがグリッドサーチ。 論文の 「best parameters were selected via grid search with 5-fold CV」 という記述が出てきたら、 これのことです。Ridge回帰の正則化強度 α を選びたいとします。 候補:[0.01, 0.1, 1, 10, 100]。
α=0.01 で学習 → 5-fold CV で平均 RMSE を測定α=0.1 で学習 → 平均 RMSE を測定2 パラメータなら格子状(grid)に組合せが並ぶので「グリッドサーチ」。
| α \ C | 0.01 | 0.1 | 1 | 10 |
|---|---|---|---|---|
| linear | 0.52 | 0.48 | 0.41 | 0.45 |
| rbf | 0.55 | 0.50 | 0.43 | 0.47 |
上記の例なら (C=1, kernel=linear) で CV-RMSE = 0.41 が最小なのでこれを採用。
SSDSE データで Ridge 回帰の最適な α を選ぶ:
| α | 5-fold CV の RMSE 平均 |
|---|---|
| 0.01 | 0.512 |
| 0.1 | 0.488 |
| 1.0 | 0.475 ← 最小 |
| 10 | 0.503 |
| 100 | 0.621 |
α=1.0 が最良 → モデル最終化はこの α で全訓練データを使って再学習し、 ホールドアウトしておいたテストで最終評価。
SSDSE-B-2026(47 都道府県・2023 年データ)を題材にした最小コード:
1 2 3 4 5 6 7 8 9 | from sklearn.model_selection import GridSearchCV from sklearn.linear_model import Ridge param_grid = {'alpha': [0.01, 0.1, 1, 10, 100]} gs = GridSearchCV(Ridge(), param_grid, cv=5, scoring='neg_root_mean_squared_error') gs.fit(X_train, y_train) print('Best:', gs.best_params_, '| CV RMSE:', -gs.best_score_) best_model = gs.best_estimator_ |
neg_ プレフィックスを使う。本ページは グリッドサーチ(Grid Search)を 12 のセクションで多角的に解説します。 上のチップは検索・関連語の手がかりです。 以下のリンクで各セクションに直接ジャンプできます:
グリッドサーチは ハイパーパラメータの候補を格子状に並べ、 全組合せを試して最良を選ぶ手法。 シンプルで実装容易だが、 候補数が指数的に増えるため 3–4 ハイパラまでが現実的。 それ以上は Random Search や Bayesian Optimization に切り替える。
Grid Search は「地図上の格子点を全部歩いてみる」イメージ。 確実だが時間がかかる。 一方、 ハイパラの一部だけが性能に影響することが多い(Bergstra & Bengio 2012)ため、 Random Search の方が同じ計算量で良い解に到達することが知られる。 とはいえ Grid は「結果が再現的・説明しやすい」ため、 候補が少ない時の標準。
グリッドサーチを数式 / 形式定義で表す:
ハイパーパラメータ集合 $\Lambda$ の中で、 交差検証損失を最小にする組合せ $\hat{\boldsymbol{\lambda}}$ を選ぶ。 Grid は $\Lambda$ を直積(格子)で構成する。
上の数式に出てきた記号を 1 つずつ解説します。 数式が出てくる試験問題(統計検定・G 検定・基本情報)では、 各記号の意味を答えられるかが分岐点:
| 記号 | 意味 |
|---|---|
| $\boldsymbol{\lambda}$ | ハイパーパラメータベクトル |
| $\Lambda$ | 候補集合(格子) |
| CV-Loss | 交差検証損失 |
| $\hat{\boldsymbol{\lambda}}$ | 選ばれた最適ハイパラ |
SSDSE-B-2026 の 「総人口 → 出生数」回帰で、 ランダムフォレストの 3 ハイパラ(n_estimators / max_depth / min_samples_leaf)を Grid Search し、 最良 R² を出すパラメータを発見する。
使用データ:SSDSE-B-2026.csv(独立行政法人 統計センター提供、 47 都道府県 × 100 超の社会経済指標)。 出典
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | import pandas as pd from sklearn.ensemble import RandomForestRegressor from sklearn.model_selection import GridSearchCV df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=1) df = df.rename(columns={df.columns[2]: 'pref'}) X = df[['A1101', 'A1303', 'F3101']].fillna(0).values y = df['A4101'].values param_grid = { 'n_estimators': [50, 100, 200], 'max_depth': [3, 5, 7, None], 'min_samples_leaf': [1, 2, 4], } gs = GridSearchCV(RandomForestRegressor(random_state=42), param_grid, cv=5, scoring='r2', n_jobs=-1) gs.fit(X, y) print(f'Best params: {gs.best_params_}') print(f'Best CV R² : {gs.best_score_:.4f}') |
▲ 上記コードはそのまま実行可能。 CP932 エンコーディング・skiprows=1(英語ヘッダ行をスキップ)・列名の英数字コード(A1101 = 総人口 など)に注意。
「グリッドサーチ」を扱う代表的なライブラリ別実装。 同じ目的でも書き方が違うため、 自分のプロジェクトの依存関係に合わせて選択する:
1 2 3 4 5 6 7 8 | import pandas as pd import numpy as np df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=1) df = df.rename(columns={df.columns[2]: 'pref'}) print('行数:', len(df), '列数:', df.shape[1]) print(df[['pref', 'A1101', 'A4101', 'A5101', 'F3101']].head()) |
1 2 3 4 5 6 7 8 9 10 11 12 | from sklearn.linear_model import LinearRegression from sklearn.metrics import r2_score, mean_squared_error from sklearn.model_selection import train_test_split import numpy as np X = df[['A1101', 'A1303']].fillna(0).values y = df['A4101'].values X_tr, X_te, y_tr, y_te = train_test_split(X, y, test_size=0.2, random_state=42) m = LinearRegression().fit(X_tr, y_tr) pred = m.predict(X_te) print(f'R² = {r2_score(y_te, pred):.3f}') print(f'RMSE = {np.sqrt(mean_squared_error(y_te, pred)):.2f}') |
1 2 3 4 5 6 7 8 9 | from scipy import stats # 例: 2 変数の Pearson 相関 + p 値 r, p = stats.pearsonr(df['A1101'], df['A4101']) print(f'相関係数 r = {r:.3f}, p 値 = {p:.2e}') # 例: 1 標本 t 検定(平均が一定値と異なるか) t, p = stats.ttest_1samp(df['A4101'], popmean=df['A4101'].mean()) print(f't = {t:.3f}, p = {p:.3f}') |
1 2 3 4 5 6 7 8 9 10 11 | import matplotlib.pyplot as plt import seaborn as sns fig, ax = plt.subplots(figsize=(8,5)) sns.scatterplot(data=df, x='A1101', y='A4101', ax=ax) ax.set_xlabel('総人口') ax.set_ylabel('出生数') ax.set_title(f'{len(df)} 都道府県の関係') plt.tight_layout() plt.savefig('out.png', dpi=120) plt.close() |
「グリッドサーチ」を実務・試験で扱うときに頻発する典型的なミスです。 各項目を 1 度読んでおけば 9 割の事故が防げます:
| 用語 | グリッドサーチ |
| 英語 | Grid Search |
| カテゴリ | ML基礎 |
| 一言定義 | |
| 出題されやすい論点 | 隣接概念との違い・典型手法・落とし穴 |
| 使用データ例 | SSDSE-B-2026.csv(47 都道府県社会経済指標) |
本用語の主要なマイルストーン:
| 年 | 出来事 |
|---|---|
| 1990s | ハイパラ網羅探索の概念定着 |
| 2007 | scikit-learn が GridSearchCV を実装 |
| 2012 | Random Search が Grid を上回る(Bergstra & Bengio) |
| 2013 | ベイズ最適化(Spearmint) |
| 2019 | Optuna 公開で TPE が標準化 |
「グリッドサーチ」と関連する手法・概念を比較しておくと、 使い分けに迷わない:
| 項目 | 特徴 | 補足 |
|---|---|---|
| Grid Search | 格子全列挙 | 再現性・解釈容易 |
| Random Search | 確率的サンプリング | 効率良し・連続値可 |
| Bayesian Opt (TPE) | 事前分布更新 | 少 trial で良解 |
| Hyperband / BOHB | 早期打切 + Bayes | 深層学習で標準 |
| Evolutionary | 遺伝的アルゴ | 並列性高い |
「グリッドサーチ」について試験対策・実務で頻出する質問とその回答:
本ページの理解を確認する 5 問の練習問題です。 紙とペン、 もしくは Python で取り組んでみてください:
💡 ヒント:練習問題の答えは正解が 1 つではありません。 思考プロセスを書き残すことが学習効果を高めます。
「グリッドサーチ」を入門レベルで習得した次に進むべき発展テーマ:
基本概念を 確率論・情報理論・最適化理論の観点で再定式化すると、 隣接する手法との理論的な関係が見えてきます。 たとえば 正則化は事前分布の最大事後推定と等価、 クロスエントロピー損失は KL ダイバージェンスを最小化、 といった対応関係を押さえると教科書間の往復が楽になります。
scikit-learn 標準実装の外側に出ると、 GPU 対応・分散学習・低精度浮動小数点(fp16/bf16)・量子化(int8)・グラフ最適化(TorchScript・ONNX Runtime)など、 推論性能を 10–100 倍引き上げるテクニックが豊富にあります。 本番運用では モデル精度と推論コストのトレードオフを意識した実装が鍵。
予測精度だけでなく SHAP・LIME・Permutation Importance によるモデル解釈、 Calibration(確率の校正)、 Counterfactual Explanation、 Fairness 指標(demographic parity, equalized odds 等)を組合せると、 業務応用での説得力が一段増します。
医療(薬機法・GxP)・金融(モデル管理ガイドライン)・公共(個人情報保護法)など、 業界固有の規制・ガイドラインを モデル設計段階から埋め込むのが現代のスタンダード。 「グリッドサーチ」を業務適用するときは、 ドメインの専門家・法務との早期コラボレーションが成否を分けます。
「グリッドサーチ」をさらに深掘りするための一次資料・教科書・オンラインコース:
Grid Search は「確実だが計算量が指数爆発する」探索法。 ハイパラが 3 個・各 5 値なら 125 通り、 さらに 5-Fold CV なら 625 学習。 これが現実的なのは古典 ML までで、 深層学習では Random Search や Optuna の方が効率良い。 Grid の真価は「結果の再現性・説明容易性」にあり、 学術論文や監査対象モデルで好まれる。
Grid Search のチューニング対象:
| シナリオ | 概要 | データ/環境 | 評価指標 |
|---|---|---|---|
| Ridge / Lasso | alpha(正則化強度) | 対数スケール 5-10 点 | 10 倍ステップ |
| SVM | C, gamma | 対数スケール 5 点 × 2 = 25 | RBF kernel が標準 |
| Random Forest | n_estimators, max_depth, min_samples_leaf | 3 × 4 × 3 = 36 | 並列化可能 |
| XGBoost | learning_rate, max_depth, n_estimators | Random Search 推奨 | Optuna が現代標準 |
| Neural Net | lr, batch_size, layers | Hyperband / BOHB | Grid は非現実的 |
「グリッドサーチ」を業務適用する際は、 (1) 業務 KPI と評価指標の対応、 (2) データの収集・保管・更新コスト、 (3) 社内承認とコンプライアンス、 (4) 運用人員の確保、 (5) 失敗時のロールバック計画の 5 観点をプロジェクト計画書に必ず明記してください。 技術検証(PoC)の段階で 本番運用要件を逆算しておくと、 後の本番化フェーズで詰まる確率が下がります。
「グリッドサーチ」を学ぶ過程で頻出する関連語を 12 個、 短文定義でまとめます。 知らない語があれば各ページにジャンプしてください:
本用語集は 484 用語を 100 グループ教材と連動して整理しています。 周辺概念を 1 つずつ辿ると、 「グリッドサーチ」の位置づけと使い分けが立体的に理解できます。