こんにちは!スタビジ編集部です!
機械学習モデルの性能を向上させるために欠かせない手法の1つが、ハイパーパラメータチューニングです。
今回はハイパーパラメータチューニングの中でも代表的なグリッドサーチ、ランダムサーチについて取り上げ、解説&実装を行っていきます!
・ハイパーパラメータとは?ハイパーパラメータチューニングとは?
・グリッドサーチとランダムサーチとは?
・それぞれのメリットデメリット
・Pythonを用いた両者の実装と比較
目次
ハイパーパラメータチューニングとは
まずはじめに、そもそもハイパーパラメータチューニングとは?について解説していきます!
ハイパーパラメータチューニングとは、機械学習モデルの性能を最適化するためにモデルのハイパーパラメータを調整する手法です。
ハイパーパラメータは、モデルの学習において設定される値であり、モデルの振る舞いや性能に影響を与えます。
例えば、決定木モデルの深さや学習率などがハイパーパラメータの一例です!
チューニングのイメージについては、もう少しかみ砕いた簡単な例をもとに以下の記事で紹介していますのでこちらも合わせて参照頂くとよりイメージが湧きやすいかと思います!
ハイパーパラメータチューニングの目的は、与えられたデータに対して最適なモデルを構築するために、最適なハイパーパラメータの組み合わせを見つけることです。
しかし実際には、適しているハイパーパラメータの組み合わせを手動で見つけるのは困難であり、効率的な探索手法が必要です。
チューニングされたモデルは、与えられたデータに対してより適切な予測を行うことができます。
このように、ハイパーパラメータチューニングは機械学習モデルの性能を向上させるために重要な手法であり、効率的な探索手法を適用して最適なハイパーパラメータの組み合わせを見つけることが求められるため、重要なのです!
以下の動画でも解説していますのであわせてチェックしてみてください!
グリッドサーチとは
グリッドサーチはハイパーパラメータチューニングの一つの手法であり、設定した幅において網羅的な探索を行います。
具体的には、事前に設定した複数のハイパーパラメータの値の組に対して、全ての組み合わせを試行します。
例えば、決定木モデルの深さや学習率などのハイパーパラメータが候補として与えられた場合、それぞれの値の組み合わせを全て試行し、最適な組み合わせを見つけることを目指します!
グリッドサーチの利点は、網羅的な探索を行うため、設定された候補のハイパーパラメータの組み合わせの中から最適なものを見つけることができる点です!
つまり、探索空間内のすべての値の組み合わせを試行するため、最適なハイパーパラメータの組み合わせが見つかる保証があります。
グリッドサーチのデメリットとしては、探索空間が大きい場合には計算コストが高くなるという点が挙げられます!
つまり、候補となるハイパーパラメータの組み合わせの数が増えると、計算時間やリソースがかなり増加します。
そのため、探索空間が広い場合には、計算時間が膨大になり、効率が悪くなる可能性があります。
以上の理由から、グリッドサーチは比較的小規模な探索空間や少数のハイパーパラメータに対するチューニングを行うのに適しています!
ランダムサーチとは(グリッドサーチとの違い)
ランダムサーチは、先ほどのグリッドサーチとは異なり、ハイパーパラメータの組み合わせをランダムに選択して試行します!
ハイパーパラメータの組み合わせをランダムに探索的に抽出し、指定した回数分繰り返して最適な組み合わせを探る流れになります!
そのため、探索空間が大きい場合や計算リソースが限られている場合にも、計算コストが低くて済みます!
一方で、ランダムサーチは網羅的な探索ではないため、最適な解にたどり着くまでには試行回数が増える可能性があります。
ランダムサーチの利点は、ランダムな探索を行うため、探索空間全体を網羅する必要がない点です!
候補となるハイパーパラメータの組み合わせをランダムに選択していくため、探索空間が大きい場合でもグリッドサーチと比べて実行時間を抑えることができます!
一方で、ランダムサーチのデメリットは、試行回数を少なく設定すると最適なハイパーパラメータを見つけにくいといった点です。
試行回数を増やすと最適な解に近付きやすいですが、その分計算コストが増えてしまうため、そこのバランスを取る必要があります!
これらから、ランダムサーチは探索空間が広い場合や計算リソースが限られている場合に有用ですが、最適な解にたどり着くまでには試行回数が増えてしまう可能性があることを考慮する必要があります。
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つである交差検証法についての記事はこちらからご参照ください!
# データの読み込み
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について勉強したい方は以下の記事を参考にしてみてください!
さらに詳しくAIやデータサイエンスの勉強がしたい!という方は当サイト「スタビジ」が提供するスタビジアカデミーというサービスで体系的に学ぶことが可能ですので是非参考にしてみてください!
AIデータサイエンス特化スクール「スタアカ」
【価格】 | ライトプラン:1280円/月 プレミアムプラン:149,800円 |
---|---|
【オススメ度】 | |
【サポート体制】 | |
【受講形式】 | オンライン形式 |
【学習範囲】 | データサイエンスを網羅的に学ぶ 実践的なビジネスフレームワークを学ぶ SQLとPythonを組み合わせて実データを使った様々なワークを行う マーケティングの実行プラン策定 マーケティングとデータ分析の掛け合わせで集客マネタイズ |
データサイエンティストとしての自分の経験をふまえてエッセンスを詰め込んだのがこちらのスタビジアカデミー、略して「スタアカ」!!
当メディアが運営するスクールです。
24時間以内の質問対応と現役データサイエンティストによる複数回のメンタリングを実施します!
カリキュラム自体は、他のスクールと比較して圧倒的に良い自信があるのでぜひ受講してみてください!
他のスクールのカリキュラムはPythonでの機械学習実装だけに焦点が当たっているものが多く、実務に即した内容になっていないものが多いです。
そんな課題感に対して、実務で使うことの多いSQLや機械学習のビジネス導入プロセスの理解なども合わせて学べるボリューム満点のコースになっています!
Pythonが初めての人でも学べるようなカリキュラムしておりますので是非チェックしてみてください!
ウォルマートのデータを使って商品の予測分析をしたり、実務で使うことの多いGoogleプロダクトのBigQueryを使って投球分析をしたり、データサイエンティストに必要なビジネス・マーケティングの基礎を学んでマーケティングプランを作ってもらったり・Webサイト構築してデータ基盤構築してWebマーケ×データ分析実践してもらったりする盛りだくさんの内容になってます!
・BigQuery上でSQL、Google Colab上でPythonを使い野球の投球分析
・世界最大手小売企業のウォルマートの実データを用いた需要予測
・ビジネス・マーケティングの基礎を学んで実際の企業を題材にしたマーケティングプランの策定
・Webサイト構築してデータ基盤構築してWebマーケ×データ分析実践して稼ぐ