Python

グリッドサーチとは?ランダムサーチとの違いもあわせてPythonで実装していこう!

グリッドサーチとランダムサーチ
記事内に商品プロモーションを含む場合があります
ウマたん
ウマたん
当サイト【スタビジ】の本記事では、ハイパーパラメータチューニングの手法であるグリッドサーチとランダムサーチについて、中身とその違いを解説していきます!

こんにちは!スタビジ編集部です!

機械学習モデルの性能を向上させるために欠かせない手法の1つが、ハイパーパラメータチューニングです。

今回はハイパーパラメータチューニングの中でも代表的なグリッドサーチランダムサーチについて取り上げ、解説&実装を行っていきます!

・ハイパーパラメータとは?ハイパーパラメータチューニングとは?
・グリッドサーチとランダムサーチとは?
・それぞれのメリットデメリット
・Pythonを用いた両者の実装と比較

ハイパーパラメータチューニングとは

Social strategy

まずはじめに、そもそもハイパーパラメータチューニングとは?について解説していきます!

ハイパーパラメータチューニングとは、機械学習モデルの性能を最適化するためにモデルのハイパーパラメータを調整する手法です。

ハイパーパラメータは、モデルの学習において設定される値であり、モデルの振る舞いや性能に影響を与えます。

例えば、決定木モデルの深さや学習率などがハイパーパラメータの一例です!

チューニングのイメージについては、もう少しかみ砕いた簡単な例をもとに以下の記事で紹介していますのでこちらも合わせて参照頂くとよりイメージが湧きやすいかと思います!

ハイパーパラメータチューニング
ハイパーパラメータのチューニングについて解説!Pythonでの実装と一緒に見ていこう!当サイト【スタビジ】の本記事では、機械学習モデルの精度を上げるのに必要なハイパーパラメータのチューニングについて徹底的に解説していきます!各種機械学習手法には複数のパラメータがありそれらを細かくチューニングすることで精度を上げることが可能なんです!...

ハイパーパラメータチューニングの目的は、与えられたデータに対して最適なモデルを構築するために、最適なハイパーパラメータの組み合わせを見つけることです。

しかし実際には、適しているハイパーパラメータの組み合わせを手動で見つけるのは困難であり、効率的な探索手法が必要です。

ウマたん
ウマたん
ここで登場するのが、グリッドサーチやランダムサーチといったハイパーパラメータチューニングの手法なんだ!
ロボたん
ロボたん
なるほど!ハイパーパラメータチューニングを行うことで効率よくモデルの性能を向上させることが出来るんだね!
ウマたん
ウマたん
その通り!適切なハイパーパラメータを選択を選択することで、過学習などの問題を軽減し、モデルの汎化性能を高めることが可能になるよ!

チューニングされたモデルは、与えられたデータに対してより適切な予測を行うことができます。

このように、ハイパーパラメータチューニングは機械学習モデルの性能を向上させるために重要な手法であり、効率的な探索手法を適用して最適なハイパーパラメータの組み合わせを見つけることが求められるため、重要なのです!

グリッドサーチとは

stories data

グリッドサーチはハイパーパラメータチューニングの一つの手法であり、設定した幅において網羅的な探索を行います

具体的には、事前に設定した複数のハイパーパラメータの値の組に対して、全ての組み合わせを試行します。

例えば、決定木モデルの深さや学習率などのハイパーパラメータが候補として与えられた場合、それぞれの値の組み合わせを全て試行し、最適な組み合わせを見つけることを目指します!

グリッドサーチの利点は、網羅的な探索を行うため、設定された候補のハイパーパラメータの組み合わせの中から最適なものを見つけることができる点です!

つまり、探索空間内のすべての値の組み合わせを試行するため、最適なハイパーパラメータの組み合わせが見つかる保証があります。

ロボたん
ロボたん
でもそれだと手動で探していくみたいなイメージで、果たして効率の良い探し方なのか?とは思っちゃったんだけど・・
ウマたん
ウマたん
良い着眼点だね!その通りなんだ・・!コンピュータが代わりにやってくれるだけで手動でパラメータの組み合わせを全通り試してみるのと変わらないよね!

グリッドサーチのデメリットとしては、探索空間が大きい場合には計算コストが高くなるという点が挙げられます!

つまり、候補となるハイパーパラメータの組み合わせの数が増えると、計算時間やリソースがかなり増加します。

そのため、探索空間が広い場合には、計算時間が膨大になり、効率が悪くなる可能性があります。

以上の理由から、グリッドサーチは比較的小規模な探索空間や少数のハイパーパラメータに対するチューニングを行うのに適しています

ランダムサーチとは(グリッドサーチとの違い)

そもそも推定とは?

ランダムサーチは、先ほどのグリッドサーチとは異なり、ハイパーパラメータの組み合わせをランダムに選択して試行します!

ハイパーパラメータの組み合わせをランダムに探索的に抽出し、指定した回数分繰り返して最適な組み合わせを探る流れになります!

そのため、探索空間が大きい場合や計算リソースが限られている場合にも、計算コストが低くて済みます!

一方で、ランダムサーチは網羅的な探索ではないため、最適な解にたどり着くまでには試行回数が増える可能性があります。

ランダムサーチの利点は、ランダムな探索を行うため、探索空間全体を網羅する必要がない点です!

候補となるハイパーパラメータの組み合わせをランダムに選択していくため、探索空間が大きい場合でもグリッドサーチと比べて実行時間を抑えることができます!

一方で、ランダムサーチのデメリットは、試行回数を少なく設定すると最適なハイパーパラメータを見つけにくいといった点です。

試行回数を増やすと最適な解に近付きやすいですが、その分計算コストが増えてしまうため、そこのバランスを取る必要があります!

これらから、ランダムサーチは探索空間が広い場合や計算リソースが限られている場合に有用ですが、最適な解にたどり着くまでには試行回数が増えてしまう可能性があることを考慮する必要があります

Pythonで実装してみよう

信頼区間の計算方法

ここからは、Pythonで実際にグリッドサーチとランダムサーチを実装し比較してみます!

それぞれの特徴について実装しながら掴んでいきましょう!

以下の流れで進めていきます。

1. ライブラリをインストール
2. データの読み込みと前処理
3. モデルの定義とパラメータの設定
4. グリッドサーチの実行
5. ランダムサーチの実行
6. 各ハイパーパラメータを使用したモデルの精度比較

1. ライブラリのインストール

まずは必要なライブラリをインポートし、データを読み込みます。

#ライブラリのインストール
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import GridSearchCV, RandomizedSearchCV

2. データの読み込み・前処理

今回は、Breast Cancer Wisconsin(乳がんデータセット)を使用します!

このデータセットは、患者の乳がん細胞に関するデータから悪性か良性かを予測するためのものです。

データセットには30の特徴量が含まれており、サンプル数は約600です。

学習データとテストデータをここでは単純に8:2に分けています。

学習データとテストデータを分割する手法の1つである交差検証法についての記事はこちらからご参照ください!

交差検証法(クロスバリデーション)の概要とRで実装方法を解説!当サイト【スタビジ】の本記事では、データ分析の場面で非常に重要である交差検証法についてまとめていきます。過学習を抑え未知データに対しても汎化能力の高いモデルを作成していくことが可能です。ぜひ交差検証法をマスターしてくださいね!...
# データの読み込み
data = load_breast_cancer()
X = data.data
y = data.target

# 学習データとテストデータに分割
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

3. モデルの定義とパラメータの設定

今回はモデルにはランダムフォレストを選定し、グリッドサーチとランダムサーチそれぞれのハイパーパラメータの設定もここで行います!

rf = RandomForestClassifier()

# グリッドサーチ用のパラメータ設定
param_grid = {
    'n_estimators': [100, 200, 300],
    'max_depth': [None, 10, 20],
    'min_samples_split': [2, 5, 10]
}

# ランダムサーチ用のパラメータ設定
random_param_grid = {
    'n_estimators': [100, 200, 300, 400],
    'max_depth': [None, 5, 10, 15],
    'min_samples_split': [2, 3, 5, 7, 10]
}

4. グリッドサーチの実行

ハイパーパラメータの設定が終われば、あとは実行するだけです!

まずはグリッドサーチを実行し、最適なハイパーパラメータも出力させてみましょう!

grid_search = GridSearchCV(estimator=rf, param_grid=param_grid, cv=5)
grid_search.fit(X_train, y_train)

print("Best Parameters for Random Forest (Grid Search):", grid_search.best_params_)

5. ランダムサーチの実行

同じようにランダムサーチも実行していきます!

ランダムサーチなので試行回数も指定しています。(n_iter)

random_search = RandomizedSearchCV(estimator=rf, param_distributions=random_param_grid, n_iter=10, cv=5, random_state=42)
random_search.fit(X_train, y_train)

print("Best Parameters for Random Forest (Random Search):", random_search.best_params_)

 

4と5の出力結果をまとめてみてみましょう!

結果はこのように出力されました!

Best Parameters for Random Forest (Grid Search): {'max_depth': 10, 'min_samples_split': 2, 'n_estimators': 100}
Best Parameters for Random Forest (Random Search): {'n_estimators': 300, 'min_samples_split': 5, 'max_depth': 15}

 

グリッドサーチとランダムサーチの両方でハイパーパラメータの最適組み合わせが出力され、それぞれの手法で異なる結果が得られました。

ウマたん
ウマたん
ここではランダムサーチによって選定されたパラメータの方がより深い決定木と多い決定木数になっているので、より複雑なモデルが構築されそうだね!

6. 各ハイパーパラメータを使用したモデルの精度比較

最後に、グリッドサーチとランダムサーチで選択された最適なハイパーパラメータを使用してモデルを評価していきましょう!

以下でaccuracy_scoreをインポートし、モデル評価を行います!

from sklearn.metrics import accuracy_score

# ベストパラメータを取得
grid_best_params = grid_search.best_params_
random_best_params = random_search.best_params_

# モデルの定義
rf_grid = RandomForestClassifier(**grid_best_params)
rf_random = RandomForestClassifier(**random_best_params)

# グリッドサーチでのモデル評価
rf_grid.fit(X_train, y_train)
y_pred_grid = rf_grid.predict(X_test)
accuracy_grid = accuracy_score(y_test, y_pred_grid)

# ランダムサーチでのモデル評価
rf_random.fit(X_train, y_train)
y_pred_random = rf_random.predict(X_test)
accuracy_random = accuracy_score(y_test, y_pred_random)

print("Accuracy for Grid Search Model:", accuracy_grid)
print("Accuracy for Random Search Model:", accuracy_random)

結果は以下のようになりました!

Accuracy for Grid Search Model: 0.9649122807017544

Accuracy for Random Search Model: 0.956140350877193

ここでは、グリッドサーチの方にやや軍配が上がりましたね!

グリッドサーチは、指定された値の組み合わせに対して網羅的に探索を行うので、より適切なハイパーパラメータの組み合わせを見つけやすい傾向があります。

ただしデータセットや探索する範囲によっては、ランダムサーチの方が優れた結果を示すこともあります!

まとめ

本記事では、ハイパーパラメータチューニングの手法であるグリッドサーチとランダムサーチを取り上げ、解説しました!

ハイパーパラメータチューニングは、機械学習モデルの性能を最適化するための重要なプロセスであり、適切なハイパーパラメータの選ぶことは、モデルの性能に大きな影響を与えます!

グリッドサーチやランダムサーチなどの手法を用いることで、適切なハイパーパラメータの組み合わせを見つけることができましたね!

グリッドサーチとランダムサーチの長所と短所を考慮して、状況に応じた最適なハイパーパラメータ探索手法を選択できるようになりましょう!

また、今回分析に用いたPythonについて勉強したい方は以下の記事を参考にしてみてください!

Python独学勉強法
【Python独学勉強法】Python入門を3ヶ月で習得できる学習ロードマップ当サイト【スタビジ】の本記事では、過去僕自身がPythonを独学を駆使しながら習得した経験をもとにPythonを効率よく勉強する方法を具体的なコード付き実装例と合わせてまとめていきます。Pythonはできることが幅広いので自分のやりたいことを明確にして勉強法を選ぶことが大事です。...

さらに詳しくAIやデータサイエンスの勉強がしたい!という方は当サイト「スタビジ」が提供するスタビジアカデミーというサービスで体系的に学ぶことが可能ですので是非参考にしてみてください!

AIデータサイエンス特化スクール「スタアカ」

スタアカトップ
【価格】ライトプラン:1280円/月
プレミアムプラン:149,800円
【オススメ度】
【サポート体制】
【受講形式】オンライン形式
【学習範囲】データサイエンスを網羅的に学ぶ
実践的なビジネスフレームワークを学ぶ
SQLとPythonを組み合わせて実データを使った様々なワークを行う
マーケティングの実行プラン策定
マーケティングとデータ分析の掛け合わせで集客マネタイズ

データサイエンティストとしての自分の経験をふまえてエッセンスを詰め込んだのがこちらのスタビジアカデミー、略して「スタアカ」!!

当メディアが運営するスクールです。

24時間以内の質問対応と現役データサイエンティストによる複数回のメンタリングを実施します!

カリキュラム自体は、他のスクールと比較して圧倒的に良い自信があるのでぜひ受講してみてください!

他のスクールのカリキュラムはPythonでの機械学習実装だけに焦点が当たっているものが多く、実務に即した内容になっていないものが多いです。

そんな課題感に対して、実務で使うことの多いSQLや機械学習のビジネス導入プロセスの理解なども合わせて学べるボリューム満点のコースになっています!

Pythonが初めての人でも学べるようなカリキュラムしておりますので是非チェックしてみてください!

ウォルマートのデータを使って商品の予測分析をしたり、実務で使うことの多いGoogleプロダクトのBigQueryを使って投球分析をしたり、データサイエンティストに必要なビジネス・マーケティングの基礎を学んでマーケティングプランを作ってもらったり・Webサイト構築してデータ基盤構築してWebマーケ×データ分析実践してもらったりする盛りだくさんの内容になってます!

・BigQuery上でSQL、Google Colab上でPythonを使い野球の投球分析
・世界最大手小売企業のウォルマートの実データを用いた需要予測
・ビジネス・マーケティングの基礎を学んで実際の企業を題材にしたマーケティングプランの策定
・Webサイト構築してデータ基盤構築してWebマーケ×データ分析実践して稼ぐ

スタビジアカデミーでデータサイエンスをさらに深く学ぼう!

スタアカサービスバナースタビジのコンテンツをさらに深堀りしたコンテンツが動画と一緒に学べるスクールです。

プレミアムプランでは私がマンツーマンで伴走させていただきます!ご受講お待ちしております!

スタビジアカデミーはこちら