検索
連載

遺伝的プログラミングを採用、ニューラルネットワークモデルも利用できるAutoML OSS「TPOT」AutoML OSS入門(3)(1/3 ページ)

AutoML OSSを紹介する本連載第3回はTPOTを解説します。TPOTは「遺伝的プログラミング(Genetic Programming)」と呼ばれる手法を適用し、効率的なパイプラインの最適化を目指しています。

Share
Tweet
LINE
Hatena

本記事で紹介したノートブックはGitHubにて公開しています。すぐに実行できますので、ぜひご利用ください。


 本連載第2回では、AutoML OSS(オープンソースソフトウェア)の老舗ともいえる「auto-sklearn」を紹介しました。今回は、遺伝的プログラミングと呼ばれる手法を適用しているAutoML OSSの「TPOT」を紹介します。

 Tree-based Pipeline Optimization Tool(TPOT)は米ペンシルベニア大学のComputational Genetics Laboratoryが中心となって開発しているAutoML機能を提供するOSSです。TPOTはRandal S. Olson博士らによって2016年の論文「Automating biomedical data science through tree-based pipeline optimization」で発表されました。

開発元 ペンシルベニア大学
GitHub公開日 2015年11月
リポジトリ https://github.com/EpistasisLab/tpot
実装言語 Python
ライセンス LGPL-3.0 License
公式サイト http://epistasislab.github.io/tpot/
表1 TPOTの基本情報

 TPOTでは、前処理、特徴量選択、分類器からなる機械学習の処理を「パイプライン」と呼びます。パイプラインを構成する各処理やハイパーパラメーターのさまざまな組み合わせを探索し、最適なパイプラインの発見を目指します。

 TPOTは複数のPythonライブラリを利用して実装されており、パイプラインを構成する各処理を実現するためにscikit-learnやXGBoostを、パイプラインの最適化手法である遺伝的プログラミングを実現するためにDEAPを利用しています。

主な特徴

 TPOTは、AutoMLができる他のOSSと比較して次のような特徴があります。

  • 遺伝的プログラミングを利用した効率的な最適化
  • 木構造のパイプラインも含めた最適化
  • パイプラインで利用するオペレーターの柔軟な拡張

 それぞれの特徴をもう少し詳しく見ていきましょう。

遺伝的プログラミングを利用した効率的な最適化

 TPOT APIのパラメーターを見ると、generations(世代数)、population_size(個体数)、mutation_rate(変異率)、crossover_rate(交叉率)といった、他のAutoMLではあまり見慣れないものが並んでいます。これはTPOTが遺伝的プログラミングを最適化の手法として採用しているためです。

 遺伝的プログラミングでは、生物の進化の仕組みを模倣して最適なパイプラインを探索します。遺伝的プログラミングの詳しい説明は省略しますが、始めにランダムで生成したパイプライン群を生物の個体群と見なし、世代ごとにこれらの掛け合わせ(交叉)や突然変異を適用して進化させていくことで最適解を探します。

 優秀な個体(=精度の良いパイプライン)を中心に次の世代へと進化を続けることにより、ランダムな探索と比較して効率的に最適解にたどり着くことが期待できます。

 以下に遺伝的プログラミングに関連するTPOTのパラメーターの一部を紹介します。表で示した以外のパラメーターもありますが、遺伝的プログラミングの考え方をよく理解しない限りはデフォルト値のままで使用することが推奨されています。

パラメーター名 デフォルト値 説明
generations 100 世代数。パイプラインの最適化を実行する試行回数に相当する。一般的に数が多いほど精度は高くなるが処理時間もかかる
population_size 100 世代ごとに保持するパイプライン数。一般的に数が多いほど精度は高くなるが処理時間もかかる
offspring_size None(population_sizeと同じ値) 子孫数。世代ごとに幾つのパイプラインが生成されるかに相当する
表2 遺伝的プログラミングに関連するTPOTのパラメーター例

 population_sizeと異なる値をoffspring_sizeに指定した場合、初期のパイプライン数はpopulation_size、それ以降の各世代で生成されるパイプライン数はoffspring_sizeで決まることになります。従って、TPOTが探索するパイプラインの総数は以下の通りです。

  • pupulation_size + generations × offspring_size

木構造パイプラインも含めた最適化

 一般に遺伝的プログラミングは、木構造(ツリー構造)の個体を扱うことができる特徴を持ちます。遺伝的プログラミングをパイプラインの最適化に適用したTPOTにおいても、直列的なパイプラインだけでなく、図1に示すような出力結果を根ノードとする木構造のパイプラインの探索が可能です。この特徴はTPOTのOSS名称(Tree-Based Pipeline Optimization Tool)にも表れています。

図1 TPOT pipelineの例
図1 TPOT pipelineの例

 図1で示した例を見てみましょう。入力データセットに対して、上段ではPolynomial Features(多項式特徴量抽出処理)を、下段ではPCA(主成分分析で得られた特徴量抽出処理)を行い、この2つを組み合わせることで分類モデルの入力を作っています。このように複数の前処理結果を組み合わせて利用することで、より最適なパイプラインが生成できる可能性があります。

 ただし複雑な構造のパイプラインはそれだけ組み合わせの数も増え、計算負荷も高くなるため、解探索の時間が長くかかってしまいます。処理時間が長くなりすぎないよう、学習時のパラメーターとしてmax_eval_time_mins(1パイプラインごとの所要時間上限)を短く設定したりtemplate(パイプラインの構造)を固定したりすることも合わせて検討しましょう。

パイプラインで利用するオペレーターの柔軟な拡張

 TPOTではパイプラインを構成する各処理を「オペレーター」と呼んでいます。オペレーターにはPreprocessors(前処理)、Selectors(特徴量選択)、Classifiers(分類器)といったものがあり、これらを部品として組み合わせることでパイプラインを構成します。図1で示した例で説明すると、以下のようになります。

  1. Preprocessors:「Polynomial Features」「PCA」で新たな特徴量を生成する
  2. Selectors:「Recursive Feature Elimination」で有用な特徴量に絞り込む
  3. Classifiers:「Random Forest Classifier」で分類する

 分類モデル向けのデフォルトの設定は表3で示す通り、Preprocessorsとして14種類、Selectorsとして5種類、Classifiersとして13種類のオペレーターが用意されています。デフォルトの設定ではなく事前に用意された複数パターンから引数config_dictで選択することもできます。後述しますが利用する処理やパラメーターをユーザー自らが指定して利用することも可能です。

Preprocessors sklearn.preprocessing.Binarizer
sklearn.decomposition.FastICA
sklearn.cluster.FeatureAgglomeration
sklearn.preprocessing.MaxAbsScaler
sklearn.preprocessing.MinMaxScaler
sklearn.preprocessing.Normalizer
sklearn.kernel_approximation.Nystroem
sklearn.decomposition.PCA
sklearn.preprocessing.PolynomialFeatures
sklearn.kernel_approximation.RBFSampler
sklearn.preprocessing.RobustScaler
sklearn.preprocessing.StandardScaler
tpot.builtins.ZeroCount
tpot.builtins.OneHotEncoder
Classifiers sklearn.naive_bayes.GaussianNB
sklearn.naive_bayes.BernoulliNB
sklearn.naive_bayes.MultinomialNB
sklearn.tree.DecisionTreeClassifier
sklearn.ensemble.ExtraTreesClassifier
sklearn.ensemble.RandomForestClassifier
sklearn.ensemble.GradientBoostingClassifier
sklearn.neighbors.KNeighborsClassifier
sklearn.svm.LinearSVC
sklearn.linear_model.LogisticRegression
xgboost.XGBClassifier
sklearn.linear_model.SGDClassifier
sklearn.neural_network.MLPClassifier
Selectors sklearn.feature_selection.SelectFwe
sklearn.feature_selection.SelectPercentile
sklearn.feature_selection.VarianceThreshold
sklearn.feature_selection.RFE
sklearn.feature_selection.SelectFromModel
表3 分類モデルのパイプラインオペレーター(デフォルト)
       | 次のページへ

Copyright © ITmedia, Inc. All Rights Reserved.

ページトップに戻る