前回に引き続き、こちらを教材に機械学習の勉強を行っていきます。

 

https://www.amazon.co.jp/%E5%AE%9F%E8%B7%B5Data-Science%E3%82%B7%E3%83%AA%E3%83%BC%E3%82%BA-Python%E3%81%A7%E3%81%AF%E3%81%98%E3%82%81%E3%82%8BKaggle%E3%82%B9%E3%82%BF%E3%83%BC%E3%83%88%E3%83%96%E3%83%83%E3%82%AF-KS%E6%83%85%E5%A0%B1%E7%A7%91%E5%AD%A6%E5%B0%82%E9%96%80%E6%9B%B8-%E7%A5%A5%E5%A4%AA%E9%83%8E/dp/4065190061

 

第2章 Titanicに取り組む

 2.6 機械学習アルゴリズムのお気持ち?!ハイパーパラメータを調整してみよう

 

前回、そこそこ良い結果を出したアルゴリズムであるLightGBMには、様々なパラメータがあり、その値次第で予測結果は変わります。

今日は、パラメータ調整を手動と自動の2つで行う方法について試してみます。

 

ちなみに、パラメータチューニングと特徴量エンジニアリングでは、後者の方がスコアが上がりやすいそうなので、かける労力としては程々で良さそう。

とはいえ、影響があるのは間違い無いので調整の仕方は習得しておこう。

 

パラメータチューニングの指針として、公式ドキュメントに詳しく書いてある。

https://lightgbm.readthedocs.io/en/latest/Parameters-Tuning.html

 

このドキュメント内に、性能を高めるために、ということで「For Better Accuracy」の項目にこのようにある。

 

・大きめのmax_bin(ヒストグラムの最大分割数)を使え(defaultは255)

・小さめのlearning_rate(学習率)を使え(defaultは0.1)

・大きめのnum_leaves(決定木における分岐の末端の最大数)を使え(defaultは31)

 

以上より、max_bin=300、learning_rate=0.05、num_leaves=40に変更させたコードがこちら。

 

 

 

こちらの結果をkaggleにsubmitしたところ、スコアは0.77033となり、パラメータ変更前よりも少し向上しました。

ここでは、パラメータを3つ一気に変化させているけど、それぞれがどのように効いているかをみるには1つずつ変更させた方が良い、という注意書きもありました。

 

続いて、今度はある程度自動的にパラメータを与えて最適なパラメータを探索する方法について、Optunaというパッケージを使って行います。

 

初めて使う場合は、

pip install optuna

を実行する。


その後、このようなコードでobjective関数を定義。

 

 

7行目と9行目でtrial.suggest_intを用いてmax_binは255から500までの値、num_leavesを32から128までの値の中の整数値の中からランダムにセレクトされる。

その上で、最終的にスコアをreturnする。

例えば、今回はmax_bin=300, num_leaves=50、次回はmax_bin=400, num_leaves=100・・・のように。

 

 

sampler=optuna.samplers.RandomSampler(seed=0)で、変数選択のための乱数のシードを固定。(固定しないと毎回結果が変わってしまう。)

n_trialsで試行回数を指定。

私が少し勘違いしていたのは、各パラメータごとに網羅的に調べるのかと思っていたけどそうではない、ということ。

なので、試行回数が少ないと当然あまり信用できない結果になる。

 

公式ドキュメントはこちら。

https://optuna.readthedocs.io/en/latest/reference/trial.html

 

study.best_paramsで、こんな風にscoreが最小値だった時のパラメータを表示してくれる。

 

 

ちなみに、scoreであるloglossはモデルの性能を測る指標で0から1の値をとり、少ないほど良いことを示す。

なので、scoreが最小である方が良い、ということ。

 

このパラメータで再度計算した結果をkaggleにsubmitしたところ、スコアは0.77033となり、結局手動で与えたときと変わらない結果となりました。

試行回数をもっと上げれば変わるのかも知れないけど、でも確かに、パラメータチューニングはそこまで影響は大きくない模様・・・。

 

なかなか勉強になりました。