AutoML OSSを紹介する本連載第2回は、AutoML OSSの老舗ともいえる「auto-sklearn」を解説します。auto-sklearnは、scikit-learnを拡張した形で、効率的なベイズ最適化手法を用いたAutoML機能を提供するツールです。
この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。
本記事で紹介したノートブックはGitHubにて公開しています。すぐに実行できますので、ぜひご利用ください。
本連載第1回では、そもそもAutoMLとはどういうもので、どういった機能やメリットがあるのか解説しました。第2回からはAutoML OSS(オープンソースソフトウェア)を一つずつ紹介していきます。今回紹介するのは、AutoML OSSの老舗ともいえる「auto-sklearn」です。
auto-sklearnは2016年5月にGitHubリポジトリが作成されてからAutoMLをリードしてきたOSSの一つです。Matthias Feurer氏らが2015年に公開した論文「Efficient and Robust Automated Machine Learning」がベースになっています。
開発元 | アルベルト・ルートヴィヒ大学フライブルク |
---|---|
GitHub公開日 | 2016年5月 |
リポジトリ | https://github.com/automl/auto-sklearn |
実装言語 | Python |
ライセンス | 三条項BSDライセンス(scikit-learnと同じ) |
公式サイト | https://automl.github.io/auto-sklearn/master/ |
表1 auto-sklearnの基本情報 |
auto-sklearnは、Pythonの機械学習ライブラリであるscikit-learnに含まれる前処理や予測モデルなどから、入力データに適したものを制限された計算リソースの中で自動的に選択します。さらに、効率的なベイズ最適化手法を用いてハイパーパラメーターも自動決定します。これにより、ユーザーをアルゴリズムの選択とハイパーパラメーターの調整から解放してくれます。
auto-sklearnのアーキテクチャを図1に示します。auto-sklearnの自動化部分は、図中のAutoML systemの部分に該当します。
auto-sklearnのアーキテクチャは、メタ学習、ベイズ最適化、アンサンブル構築の3つのフェーズで構成されています。
auto-sklearnでは、メタ学習とアンサンブル構築を導入することにより、AutoMLアプローチの効率性と堅牢(けんろう)性を向上させています。
auto-sklearnには次のような特徴があります。
それぞれの特徴をもう少し詳しく見ていきましょう。
AutoML機能を有するOSSは、どれも基本的には簡単なコードで利用できるようになっています。公開された2016年当時の機械学習で必要なコードの実装量を踏まえると、auto-sklearnは非常に簡単なコードで学習や予測ができることが特徴の一つといえます(auto-sklearnのコードの具体例は次の章で説明します)。
import autosklearn.classification cls = autosklearn.classification.AutoSklearnClassifier() # 学習 cls.fit(X_train, y_train) # 予測 predictions = cls.predict(X_test)
機械学習モデルを自動的に構築する場合、データ前処理、特徴量前処理、分類器、ハイパーパラメーターのチューニングといった膨大な選択肢を探索する必要があります。しかし、実際にはCPUやメモリ使用量など計算リソースの制約の中で効率的にできるだけ良いモデルを探索することがほとんどです。
auto-sklearnでは、前述のアーキテクチャで紹介したメタ学習を導入し、探索を効率化しています。15種類の分類器、14種類の特徴量前処理、4種類のデータ前処理を使用して、110個のハイパーパラメーターを持つ構造化された仮説空間を生成し、効率的なベイズ最適化手法を用いてハイパーパラメーターを決定します。
図2は、auto-sklearnの論文に掲載されている分類アルゴリズムと前処理手法の一覧です。
auto-sklearnは、ユーザーが指定した計算リソースの制限の中で、最適なアルゴリズムを選定しハイパーパラメーターを自動で決定します。
表2に、メモリ使用量や制限時間のパラメーターだけでなく、auto-sklearnモデルのインスタンス生成時に指定できるパラメーターの一部を紹介します。
パラメーター名 | デフォルト値 | 説明 |
---|---|---|
time_left_for_this_task | 3600 | モデルを探索するための制限時間(秒単位)。この値を増やすことにより、より良いモデルを見つける可能性が増す |
per_run_time_limit | time_left_for_this_taskの1/10 | 1回の呼び出しの時間制限(秒単位)。学習アルゴリズムが制限時間を越えて実行されると、モデルのフィッティングが終了 |
memory_limit | 3072 | 機械学習アルゴリズムのメモリ制限(MB単位)。メモリ制限を越えて割り当てようとすると、フィッティングが終了。Noneの場合、メモリ制限なし |
ensemble_size | 50 | アンサンブルをさせるモデルの最大数。0をセットすると、アンサンブルをしない |
ensemble_nbest | 50 | ユーザーがアンサンブルで考慮されるモデル数を直接指定 |
include_estimators | None | Noneの場合、全ての推定器を使用。それ以外の場合は、使用する推定器のセットを指定 |
exclude_estimators | None | Noneの場合、全ての推定器を使用。それ以外の場合は、使用しない推定器のセットを指定 |
include_preprocessors | None | Noneの場合、全てのプリプロセッサを使用。それ以外の場合、使用するプリプロセッサのセットを指定 |
exclude_preprocessors | None | Noneの場合、全てのプリプロセッサを使用。それ以外の場合、使用しないプリプロセッサのセットを指定 |
表2 パラメーターの一例 |
他にも複数のパラメーターがあります。詳しくは公式ドキュメント参照してください。
Copyright © ITmedia, Inc. All Rights Reserved.