情報探索:粗から細へ

Pythonでのハイパーパラメータチューニング

Alex Scriven

Data Scientist

情報探索 vs 非情報探索

 

これまで行ったのはすべて非情報探索です。

非情報探索:ハイパーパラメータ調整の各反復が、前回の結果から学習しないこと。

これにより並列化できますが、効率的とは言えません。

Pythonでのハイパーパラメータチューニング

情報探索 vs 非情報探索

ここまでの流れ:

非情報型プロセス図

別の方法:

情報型プロセス図

Pythonでのハイパーパラメータチューニング

粗から細のチューニング

基本的な情報探索の方法:

最初は粗くランダムに進め、反復的に範囲を絞ります。

手順:

  1. ランダムサーチ
  2. 有望な領域を特定
  3. 絞った範囲でグリッドサーチ
  4. 最適スコアまで継続

(3)の前にランダムサーチを追加しても構いません。

Pythonでのハイパーパラメータチューニング

なぜ粗から細かへ?

粗から細のチューニングの利点:

  • グリッドとランダムの長所を活用
    • 広く探索して開始
    • 良さそうな領域が分かったら深掘り
  • 時間と計算資源を有効活用し、反復を高速化

成果の出ない探索空間に時間を浪費しません。

注:単一モデルではなくバッチ単位での情報活用です。

Pythonでのハイパーパラメータチューニング

粗から細の実施

次のハイパーパラメータ範囲を例にします。

  • max_depth_list 1〜65
  • min_sample_list 3〜17
  • learn_rate_list 0.01〜150の間で150個の値

可能なモデルは何通りでしょうか。

combinations_list = [list(x) for x in product(max_depth_list, min_sample_list, learn_rate_list)]
print(len(combinations_list))
134400
Pythonでのハイパーパラメータチューニング

粗から細の可視化

まずは500通りだけランダムサーチします。

精度スコアを可視化します。

モデルの精度の密度プロット

良いモデルはどれでしょうか。

Pythonでのハイパーパラメータチューニング

粗から細の可視化

上位結果:

max_depth min_samples_leaf learn_rate accuracy
10 7 0.01 96
19 7 0.023355705 96
30 6 1.038389262 93
27 7 1.11852349 91
16 7 0.597651007 91
Pythonでのハイパーパラメータチューニング

粗から細の可視化

max_depth と精度の関係を可視化します。

最大深さと精度の散布図

Pythonでのハイパーパラメータチューニング

粗から細の可視化

min_samples_leaf は8未満が良好

min samples leaf と精度の散布図

learn_rate は1.3超で悪化

学習率と精度の散布図

Pythonでのハイパーパラメータチューニング

次のステップ

1回目で分かったこと:

  • max_depth は8〜30
  • learn_rate は1.3未満
  • min_samples_leaf は8未満が良さそう

次は? 得られた知見でランダムまたはグリッドサーチを再実行。

注意:これは二変量の分析のみです。1枚のグラフで3つ以上のハイパーパラメータも可視化できますが、本コースの範囲外です。

Pythonでのハイパーパラメータチューニング

Let's practice!

Pythonでのハイパーパラメータチューニング

Preparing Video For Download...