機械学習

グリッドサーチによるパラメータ決定の最適化

今日はグリッドサーチに関して簡単にまとめていきます。

グリッドサーチとは?

モデルを作成していく過程で必ず行うこととしてパラメータのチューニングがあります。

使用するモデルにより設定するパラメーターの数は異なりますが、最適解を探すために何度もパラメータをいじるのは時間がかかるため、自動で行うアルゴリズムが用意されています。

行うことは単純で最初にチェックするパラメータを設定して、イタレーションを回して全てのパラメータの組み合わせを確かめて最適解を記録するだけです。

単純なグリッドサーチ

ここでは例としてカーネル法を用いたSVMを例に実装を見ます。

例ではgamma関数と正則パラメータCの値を組み合わせて最適スコアを記録していて、for文を2つ作成して都度スコアを算出しています。

訓練データをさらに分割する

ただ上で示した例はパラメータ最適化のためにテストデータを使用してしまっています。

テストデータを用いてパラメータの最適化を行ってしまうと汎化性能が落ちるため、モデルを作る時はデータセットを訓練データ、検証データ、テストデータに分割するのが一般的です。

訓練データと検証データを用いて最適なパラメータチューニングした後に、テストデータを用いて汎化性能(新しいデータに対してのモデルの性能)評価することが可能になります。

交差検証を用いたグリッドサーチ

上で紹介した方法ではtrain_test_split関数を用いましたが、これはランダムにデータを分割するため分割されたデータがそれぞれ全く違う分布になる可能性があります。

そこで交差検証を用いてそれぞれのパラメータの組み合わせの際に別々の訓練・検証データを用いてチューニングするのが交差検証を用いたグリッドサーチとなります。

交差検証はグリッドサーチを用いたものとして言われることが多く、単に交差検証と言うだけでグリッドサーチのことも指していることが多いそうです。

scikit-learnではGridSearchCVクラスがあり短いコードで実装することができます。

GridSearchCVに最初にパラメータを辞書型で分割数をcvで渡してあげるだけでfitメソッドで訓練セットに対して交差検証を用いてパラメータを学習してくれて、scoreメソッドを用いることでテストセットを評価することができます。(上の一連の動作を全部やってくれます)

この時のパラメータに関してはbest_params_属性に、交差検証精度はbest_score_属性に格納されています。

まとめ

簡単な実装でパラメータチューニングが可能ですが、複雑なモデルだと計算コストが大変なことになってしまうため、予測値を算出するためのグリッドサーチはあまり行われていないように思います。

kaggleでは評価関数の閾値を決める際に用いられているkernelがあったので部分的に使う場所はありそうですね。

yaaku

勉強頑張りましょう~