こんにちは,shun(@datasciencemore)です!!
今回はモデリングのSTEP5,ハイパラチューニングについてやっていきます.
STEP5:ハイパラチューニングは,図の赤点線枠で囲った部分に該当します.
学習ルールとレシピを合わせたものがワークフローであったことを思い出してください.
ちょっと見にくいかもしれませんが,学習ルールとレシピの上にワークフローがありますね.
最初は少しわかりづらいかもしれませんが,慣れるとこっちのほうがわかりやすいので頑張って慣れてくださいね.
目次
0.ハイパラチューニングってなに??
ハイパラチューニングは,良さげな学習ルールを発見するためにハイパラを調整することだよ!!
良さげな学習ルールを発見したら,それを使用してモデル作成と予測値算出をするよ!!
良さげなモデルが複数あるなら,アンサンブルしてより良い予測値を算出できるんだ!!
はい,例のごとく,予測モデリングと人間の学習プロセスの比較を見てみましょう.
ハイパラチューニングは,人間の学習プロセスでいうと
- 良い先生と学習計画を見つけ,学習する.
- その後,試験に臨む.
ということに該当しています.
前回までで良い先生と学習計画の候補は選定してあります.
あとは,それらの中から実際にいくつか体験授業などを受けて,ほんとに良いのかを確認すると思います.
良いと決めたらあとはもう信じて勉強するのみですよね!
そして最後に試験に臨むという流れです.
予測モデリングにおけるハイパラチューニングでも同様のことをします.
先生 = アルゴリズム,学習計画 = ハイパラを示しており,それらを合わせて学習ルールが定まるのでした.
ハイパラチューニングは,ハイパラを調整することで色々な学習ルールから良さげな学習ルールを探すことを示しています.
ハイパラチューニングの手順は以下になります.
1.ハイパラ指定
2.探索範囲指定
3.グリッド作成
4.学習と評価
5.モデル選定
6.予測値算出
7.アンサンブル
アルゴリズムの1つであるランダムフォレストを例にとって,それぞれ詳細に見ていきましょう!
1.ハイパラ指定
ハイパラチューニングをするためにまず最初にすることは,チューニングするハイパラを指定することです.
例えば,ランダムフォレストは,mtry,trees,min_nの3種類のハイパラを持っています.
その中から,チューニングするハイパラを指定します.
3種類全部指定してもいいですし,1種類も指定しなくてもOKです.
2.探索範囲指定
前項で指定したハイパラに対し,どこからどこまでを探索するのかを指定する必要があります.
今回の例で言うと対象ハイパラは,mtry, trees, min_nの3種類なので,これらをどこからどこまで探索するか指定してあげましょう.
例えば
mtry:1~10
trees:50~1000
min_n:5~100
みたいな感じです.
3.グリッド作成
前項で指定した探索範囲に対し,グリッド(ハイパラの組み合わせ)を作成します.
グリッドはこんな感じです.
No. | mtry | trees | min_n |
---|---|---|---|
1 | 1 | 50 | 5 |
2 | 4 | 300 | 35 |
3 | 7 | 600 | 70 |
4 | 10 | 1000 | 100 |
代表的なハイパラチューニングの方法を以下に挙げます.
- グリッドサーチ
- ランダムサーチ
- ベイズ最適化
それぞれの手法に対し,グリッドの作成方法が異なります.
3.1.グリッドサーチ
グリッドサーチは,探索範囲内で各ハイパラを均等に分割し,それらの交点をグリッドとします.
イメージはこんな感じです.
グリッドサーチはとにかく様々なパターンのハイパラを試し,評価精度を確認します.
そのため,最適なハイパラを発見できる可能性が高い一方,時間がかかります.
3.2.ランダムサーチ
ランダムサーチは,グリッドサーチで作成したグリッド上の一部の交差点をグリッドとします.
グリッドサーチの簡易版ですね.
イメージはこんな感じ.
ランダムサーチはグリッドサーチとは違い,一部のパターンのハイパラしか試しません.
そのため,時間がかからないですが,良さげなハイパラを見逃す可能性があります.
3.3.ベイズ最適化
ベイズ最適化は,探索範囲を良さそうな箇所に絞り,グリッドを作成します.
イメージはこんな感じ.
ベイズ最適化は,ガウス過程というアルゴリズムを応用しています.
簡単にアルゴリズムを説明すると
① 数ヶ所,ランダムに探索
② ①のうち,精度がよかったところを重点的に探索
③ ②に加え,時々別の場所も探索
グリッドサーチみたいにしらみつぶしではなく,良さそうな可能性が高いところを重点的に調べるので,短時間で良さげなハイパラを発見できる可能性があります.
一方,データが複雑だとアルゴリズムがうまく機能せず,良さげなハイパーパラメータを見逃してしまう可能性があります.
他にもlatin_hypercubeやmax_entropyというアルゴリズムを使用し,ハイパラ空間全体をカバーしたグリッドを作成し,ハイパラチューニングする方法もあります.
4.学習と評価
前項で作成したグリッドの各行にあるハイパラに対し学習することで,モデルができます.
それらモデルを評価することでモデル性能の優劣を判定することができます.
その評価の基準となるものが評価指標です.
評価指標は色々ありますが,回帰と分類で代表的なものを紹介していきます.
4.1.回帰の評価指標
回帰の代表的な評価指標は,RMSEとMAEです.
それぞれの算出式は以下のとおり
RMSEもMAEも実測値と予測値の差(残差)を全部のデータで足して平均をとっています.
違いは,残差を2乗するか絶対値を取るかってとこですね.
RMSEのほうが残差が大きい場合,過大に評価するため,外れ値(極端に外れた値)がある場合,大きくなりがちです.
一方,MAEは,残差が大きい影響をRMSEよりも少なくできますが,絶対値が入っている分,数学的に扱いずらいという欠点があります.
RMSE,MAEのほかにはRMSLEやR2などがありますね.
4.2.分類の評価指標
分類の代表的な評価指標は,accuracyとloglossです.
それぞれの算出式は以下のとおり
accuracyは,予測が的中した割合のことだから簡単ですね!
accuracyは大きいほうが良いです,当然ですね笑
単純で分かりやすいのが魅力ですが,不均衡データがある場合はあまり使える指標ではありません.
※例えば99%くらいで正常,1%くらいで異常が出るデータである場合,どんなデータでも正常と予測すれば正答率は高いです.
しかし,実際にやりたいことは1%くらいしか出ない異常データを正確に判定したい場合が多いので,正答率が高いことは適切な評価指標とは言えません.
loglossは,予測が的中したら小さい値を,予測を外したら大きい値をデータごとに足していくイメージです.
よってloglossは小さいほうが良いということになります.
accuracy,loglossのほかにもF1-score,Fβ-score,AUCなどの評価指標が存在します.
また,上の例では2クラス分類を挙げましたが,多クラス分類用の評価指標も存在します.
accuracyやloglossは多クラスになってもそのまま自然に拡張できます.
評価指標は色々あるのですが,キリがないのでこの辺にしておきましょう!
5.モデル選定
前項でグリッドの各行に対するモデルの評価を実施しました.
その中から良さげなモデルを選定してあげましょう.
良さげなモデルを選定するということは,同時に良さげなワークフローを選定するとも言えます.
何をもって良さげとするのかは難しいです.
案件によっては精度が高いより簡潔なモデルを使用したいということも結構多いです.
また,数値だけでなく,標準誤差(簡単に言うとばらつきのこと)が小さいほうが安定した結果が期待できます.
アンサンブルすることを考えたら,多様性を持たせたほうがいいので,同じようなモデルを選定しないほうが無難です.
ということで分析の目的や算出された結果を合わせ,何が良いのかということを総合的に判断してモデル選定を実施しましょう!!
6.予測値算出
前項で良さそうなモデル(とワークフロー)を選んだら,それに評価データを適用して,予測値を算出します.
以下の2パターンが考えられます.
- 再学習型:選定したワークフローで学習データ全体から新たにモデルを作成し,それを評価データに適用する.
- 再利用型:交差検証時に1つのワークフローに対し,複数のモデルができているので,それらの複数のモデルに評価データを適用し,平均もしくは多数決する.
こちら,Ⅰ.再学習型でもⅡ.再利用型,どちらでもよいです.
Ⅰ.再学習型の場合,全体の学習データを選定したワークフローを用いて新たに学習する必要があるので,時間がかかるというのがデメリットです.
Ⅱ.再利用型の場合,Ⅰ.再学習型と違い,再学習の必要はありませんが,これもモデルの数が多いと予測値の算出に時間がかかるというのがデメリットです.
一般的に学習データが多いとⅠ.再学習型に時間がかかり,評価データが多いとⅡ.再利用型に時間がかかります.
精度はほぼ同じ(適切なワークフローであれば)なので,結論,どちらでもよいです.
7.アンサンブル
前項「5.モデル選定」で良さげなモデルとワークフローを選定しました.
実はここで選定するモデルとワークフローは1つでなくてもいいです.
というかむしろ複数選ぶのが普通です.
なぜかというと万能の学習ルールは存在しないので,良さげなモデルを複数採用して,そいつらからできる予測値を平均(もしくは多数決)することによってできるだけ誤差を小さくする工夫をするのです.
その工夫のことをアンサンブルといいます.
イメージにするとこんな感じです.
ことわざで3人寄れば文殊の知恵というものがあります.
我々の日常でも1つの問題に対し,複数の有識者が検討して,全員の意見を反映したり,多数決を取ったりしますよね.
アンサンブルもイメージとしてはそれらと同じことです.
こうすることでもし1つのワークフローで作成したモデルがとんちんかんな予測値を出したとしても,別のモデルがその間違いをカバーしてくれるわけです!
ということでこうして複数のモデルから作成される予測値をアンサンブルすることで最終予測値が算出されます.
このほかにもスタッキングやpseudo labelingなど,精度向上のテクニックはもっとたくさんあります.
全部紹介したいのですが,時間がかかりすぎてしまうのでこのあたりにしときましょう.
まとめ
今回はハイパラチューニングについて以下のことをやってきました.
1.ハイパラ指定
2.探索範囲指定
3.グリッド作成
4.学習と評価
5.最適なハイパラの選択
6.予測値算出
7.アンサンブル
ハイパラチューニングは,人間の学習プロセスでいうと
- 良い先生と学習計画を見つけ,学習する.
- その後,試験に臨む.
ということに該当しているのでした.
正直,このハイパラチューニングについてはいつも以上にコーディングしないとよく分からないと思います.
なので,何となくわかればOKです.
コーディングしながら徐々に理解を深めていきましょう!
(コーディング講座は近々にアップ予定です.)
それでは,お疲れさまでした!!