TPOTは、最適な機械学習の一連の流れ(パイプライン)を自動で構築する自動機械学習(AutoML)です。
では、どのようにして最適なパイプラインを得るのでしょうか?
あらゆるパイプラインの構築パターンを試せば、最適なパイプラインを得ることは出来ますが、現実的ではありません。パイプラインの構築パターンは、無限にあるからです。
では、どうすればいいのでしょうか?
幾つかやり方があります。そのやり方の1つが、遺伝的アルゴリズムを使い最適なパイプラインを探索する方法です。
TPOTでは遺伝的アルゴリズムでこのパイプラインを進化させて、精度が高い機械学習パイプラインを得ます。
今回は、「遺伝的アルゴリズムを使ったAutoML【TPOT】の仕組み」というお話しをします。
Contents
木構造で表現されるパイプライン
TPOTのパイプラインは、左から最初複数の部品をもち最後に一つだけの部品で終わります。この部品をノードと呼びます。
この図でいう最初に複数存在するノードのことをリーフと呼び、最後に一つだけ存在するノードをルートと呼びます。
そして、それぞれのノード(部品)は順番に線でつながっています。
リーフに始まり、ノードが線でつながり、最後にルートで終わるこのような構造を木構造と呼びます。TPOTのパイプラインは木構造で表されます。
木構造の形を色々と変えていって、精度の高い木構造を得るために遺伝的アルゴリズムを使います。
遺伝的アルゴリズムを使ったパイプライン最適化
TPOTの、遺伝的アルゴリズムを使ったパイプライン最適化の全体像です。
パイプラインをたくさん作り、そのうち良いパイプラインをいくつか残します。残したパイプラインをもとに次世代のパイプラインを作ります。これを決められた回数繰り返して、最後に最も良いパイプラインを最適なパイプラインとして選択します。
具体的には次のステップでおこないます。
それぞれのステップを見ていきます。
①パイプラインをランダムに生成する
TPOTでは、最初に100個(初期値)のパイプラインをランダムに生成します。
②パイプラインのCVスコアを計算する
100個のパイプラインのそれぞれのCrossValidationスコアを計算します。
例えば、f1スコアを最大化するようTPOTで指定したときは、f1スコアをCrossValidationで計算します。
③複雑すぎずCVスコアの高いパイプラインを残す
100個のパイプラインを生成した後、複雑すぎずCVスコアの高い20個のパイプラインを残します。他のパイプラインは捨てます。
④次の世代のパイプラインを生成する
20個のパイプラインを残したあと、さらに次の2ステップで次の世代のパイプラインを生成します。
先ず、20個のパイプラインから合計5つのコピーを作り、100個のパイプラインを作ります。
次に、パイプラインの10%は交叉により新しいパイプラインを生成、残りの90%はポイント変異、インサート変異、シュリンク変異により新しいパイプラインを生成します。
この新しいパイプラインを子孫(offspring)と呼びます。
設定した世代数繰り返す
今説明した……
- ①パイプラインをランダムに生成する
- ②各パイプラインのCVスコアを計算する
- ③複雑すぎずCVスコアの高いパイプラインを残す
- ④次の世代のパイプラインを生成する
……を繰り返すことで、徐々に精度の良いパイプラインを得ます。
以上がTPOTの仕組みのかんたんな説明でした。
最後に、交叉、ポイント変異、インサート変異、シュリンク変異について簡単に説明しておきます。
新しいパイプラインを生成する
交叉・ポイント変異・インサート変異・シュリンク変異
交叉
交叉(crossover)とは、2つのパイプラインを用意し、突然変異点から先の部分のパイプラインを交換して新しい子孫パイプラインを生成することです。
ポイント変異
部分木(パイプラインのリーフを含む一部分)がランダムな別のパイプラインに変わることをポイント変異(point mutation)といいます。
インサート変異
パイプラインの途中に、ランダムに生成されたパイプラインが挿入されることをインサート変異(insert mutation)と言います。
シュリンク変異
パイプラインの一部分が削除されることをシュリンク変異(shrink mutation)と言います。
まとめ
今回は、「遺伝的アルゴリズムを使ったAutoML【TPOT】の仕組み」というお話しをしました。
今回で、AutoML【TPOT】の説明はいったん終了します。
AutoML【TPOT】は日々進化していますので、今回の一連の連載以上の機能が追加されている可能性は大きいです。
Pythonを使い非常に簡単に高精度な予測モデルを構築することができますので、興味のある方は一度試してみてください。
次回以降では、PythonやRなどから使えるH2O AutoMLについて説明していきます。