第26回「近ごろの機械学習ライブラリ(3)Auto-sklearn、H2O AutoML」

こんにちは、小澤です。

前回は、PyTorch(パイトーチ) を使ってニューラルネットワークを構築する基本的な流れを体験しました。「モデルを自分で組む楽しさ」を感じられる内容でしたが、「もっと簡単にモデルを作れないか」と思った方もいるかもしれません。そこで、今回紹介するのがAutoMLという仕組みです。

AutoMLとは、データの前処理から特徴量選定、モデル選択、ハイパーパラメータの調整までを自動でやってくれるツール群のことです。専門知識がそれほどなくても、比較的簡単に精度の高いモデルが作れます。今回は、Pythonの代表的なAutoMLツールである「Auto-sklearn」「H2O AutoML」の2つについて、それぞれの特徴や使い方、用途などを解説していきます。

なお、今回の内容も、教科書『Pythonによる新しいデータ分析の教科書(第2版)』の「近ごろの機械学習ライブラリ」(271ページ) に関連した内容です。

1. AutoMLとは?

機械学習では、通常以下のような手順が必要です。

  1. データの前処理(欠損値処理・標準化など)
  2. 特徴量の選択、エンジニアリング
  3. アルゴリズムの選定(SVM、ランダムフォレスト、ニューラルネットなど)
  4. ハイパーパラメータのチューニング(Grid SearchやBayesian Optimizationなど)
  5. モデルの学習と評価

これらの作業には専門知識や経験が必要で、しかも手間がかかります。AutoMLツールは、これらの工程を自動で最適化し、より少ないコードで精度の高いモデルを構築することを目指しています。

2. Auto-sklearn

Auto-sklearnは、Pythonの機械学習ライブラリscikit-learnに慣れた人にとって、使いやすいAutoMLツールです。

ポイントは次の通りです。

  • scikit-learnと同じAPI(書き方)で使える
    普段使っているfit()やpredict()がそのまま使えます。
  • 内部で多数の機械学習アルゴリズムと前処理を自動で試してくれる
    ロジスティック回帰やランダムフォレスト、SVMなど、いろんなモデルを自動でテストし、精度の高い組み合わせを見つけてくれます。
  • ベイズ最適化(Bayesian Optimization)によって効率よくチューニング
    単純な総当たりよりも賢く探索して、限られた時間内で最適解に近づきます。
  • Pythonコードで完結
    Jupyter NotebookやPythonスクリプトでそのまま使えます。

Auto-sklearnはpipでインストールします。

pip install auto-sklearn

Irisデータセットを使って分類するシンプルな使用例は以下です。

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
import autosklearn.classification

# データ準備
X, y = load_iris(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=42)

# AutoMLモデリング
automl = autosklearn.classification.AutoSklearnClassifier(time_left_for_this_task=60)
automl.fit(X_train, y_train)

# 予測と評価
y_pred = automl.predict(X_test)
print(accuracy_score(y_test, y_pred))

このコードは、わずか10行ほどですが、以下のような処理が自動で行われています。

  1. 特徴量の前処理(標準化や欠損値処理など)
  2. 複数の分類アルゴリズムの試行(ランダムフォレスト、SVMなど)
  3. パラメータ調整(例:木の深さ、学習率など)
  4. 交差検証による精度評価と比較
  5. 最終モデルのアンサンブル(複数の良いモデルの組み合わせ)

したがって、Auto-sklearnは以下のような場面で役立ちます。

  • モデル選定に自信がないとき
  • 精度を上げたいが、チューニングの時間が取れないとき
  • パイプラインの自動化をしたいとき(ワークフローに組み込める)

なお、注意点として以下が挙げられます。

  • 実行にはある程度の計算時間とメモリが必要(それなりにCPUを使う)
  • 出力されるモデルはブラックボックスに近いため、「なぜこの特徴量が重要か」などの解釈性は低い
  • 学習がうまくいかない場合は、明示的にX_trainのスケーリングや前処理をしてみると精度が向上することがある

3. H2O AutoML

Auto-sklearnが「軽量でscikit-learnに慣れた人向け」のツールであるのに対し、H2O AutoMLは「本格的な業務活用」にも耐えうる高機能なAutoMLフレームワークです。特に大規模データセットの処理や、複雑なアンサンブルモデルの構築を自動化したい場面で、H2Oは強力な味方になります。

特徴は以下の通りです。

  • Javaベースで高性能
    エンジンはJavaで実装されており、並列処理やマルチスレッド性能が非常に優れています。また、Pythonから簡単に利用できる Python API(h2o パッケージ)が用意されているので、エンジンの高速性とPythonの使いやすさを両立できます。
  • 多彩なモデルを自動試行
    Gradient Boosting(GBM)、XGBoost、深層学習モデル、Stacked Ensembleなど、複数の手法を同時並列に実行し、最良のモデル(リーダー)を自動で選定してくれます。
  • 柔軟な制御
    最大実行時間(max_runtime_secs)や試行モデル数などを自由に設定できます。また、モデルごとの精度や重要度、混同行列など、詳細なレポートも取得可能です。
  • UIや他言語サポートが充実
    Webベースのインターフェース「H2O Flow」を使えば、ノーコードでの実行や設定が可能です。RやJavaなど多言語でのAPIも提供されています。

同様にpipでインストールして使います。

pip install h2o

最も高性能なモデル(leader model)を取得し、テストデータで評価するサンプルコードは以下です。

import h2o
from h2o.automl import H2OAutoML
from sklearn.datasets import load_iris
import pandas as pd

# 初期化。ローカルで動作するミニサーバが起動
h2o.init()

# データセット(ここでは iris)を pandas で読み込み、H2O用のデータフレームに変換
iris = load_iris()
df = pd.DataFrame(iris.data, columns=iris.feature_names)
df[‘target’] = iris.target
hf = h2o.H2OFrame(df)

# H2Oでは**カテゴリ変数(分類対象)は文字列型**
hf[‘target’] = hf[‘target’].asfactor()

# トレーニング用とテスト用にデータを自動分割
train, test = hf.split_frame(ratios=[.7], seed=1)

# AutoML 実行(ここでは最大60秒間)
aml = H2OAutoML(max_runtime_secs=60, seed=1)
aml.train(y=”target”, training_frame=train)

# 最も高性能なモデル(**leader model**)を取得し、テストデータで評価
leader = aml.leader
perf = leader.model_performance(test_data=test)
print(perf)

H2O AutoMLは、以下のような場面で使用できます。

  • 大量データ(数十万件〜数百万件)を扱う場面
    Javaベースの並列処理性能により、大規模な学習でも高速に処理可能。
  • 複数のアルゴリズムを自動で比較・選定したいとき
    GBM、XGBoost、Deep Learning、アンサンブルなどを一括で試行。
  • 精度の高いモデルをすぐにほしいとき
    最適なモデルを自動的に選定し、リーダーボード形式で表示。
  • UIやノーコードツールでも使いたい場合
    Web UI(H2O Flow)によって、コードを書かずにAutoMLを試せる。
  • RやJavaなど他言語環境と併用したい場合
    Python以外にも豊富なAPIを用意しており、既存システムへの組み込みも容易。

このように、H2O AutoMLはエンタープライズ向けのAutoMLプラットフォームとして、開発効率とモデル精度の両方を追求できる強力な選択肢です。

4. Auto-sklearn vs H2O AutoML

特徴Auto-sklearnH2O AutoML
使用言語PythonのみPython, R, Java など
インストール簡単やや重め(Java依存あり)
処理速度比較的遅い(小規模向き)高速かつ並列処理が得意
UIなしWeb UI(Flow)あり
モデルの幅scikit-learnベースのモデル中心XGBoost, DL, GBMなど幅広い
学習データ小~中規模向き中~大規模データもOK

5. まとめ

AutoMLツールは、手間のかかる機械学習の工程を大きく簡略化してくれます。特に、時間のない中で精度の高いモデルを素早く構築したいとき、探索的にアルゴリズムを比較したいときなどに活躍してくれるでしょう。

  • Auto-sklearnは、scikit-learnユーザーが気軽に始められます。
  • H2O AutoMLは、高速処理・多様なモデル・大規模データにも対応する強力なツールです。

ただし、AutoMLは便利なツールですが、ブラックボックス化するリスクもありますので、

  • どのアルゴリズムが選ばれたか?
  • なぜその前処理が選ばれたのか?
  • 選ばれたモデルは現実のデータに合っているか?

このような疑問を持ちながら使うことが重要です。AutoMLを使っても、結果の解釈や評価は自分で行う必要があります。

次回は、PyCaret(パイキャレット) について取り上げます。PyCaretもAutoMLを実現するツールで、機械学習をより簡単、高速に試せるAutoMLライブラリです。どのように使い分けるか?特徴や活用シーンも解説します。お楽しみに!

PAGE TOP