機械学習モデルの精度を上げるためには、ハイパーパラメータの最適化や特徴量選択などのチューニングが不可欠です。しかし、それをどのように実行するかは使っているライブラリによって異なります。
本記事では、Pythonでよく使われる以下の主要ライブラリごとに、具体的なチューニング手法とテクニックを解説します。
1. Scikit-learn:汎用性抜群、グリッドサーチの王道
Scikit-learnは、クラシックなアルゴリズム(SVM、ランダムフォレスト、ロジスティック回帰など)を中心に、多くの機能が統一されたAPIで提供されています。
チューニングの代表格は以下の2つです。
🔸 GridSearchCV(グリッドサーチ)
すべてのパラメータの組み合わせを総当たりで試します。手軽で確実ですが、組み合わせ数が多いと計算量が爆発します。
from sklearn.model_selection import GridSearchCV
from sklearn.ensemble import RandomForestClassifier
param_grid = {
'n_estimators': [50, 100, 150],
'max_depth': [5, 10, None]
}
model = RandomForestClassifier()
grid = GridSearchCV(model, param_grid, cv=5)
grid.fit(X_train, y_train)
print(grid.best_params_)
🔸 RandomizedSearchCV(ランダムサーチ)
グリッドサーチより軽量な代替。指定回数だけランダムに組み合わせを試します。
from sklearn.model_selection import RandomizedSearchCV
random_search = RandomizedSearchCV(model, param_grid, n_iter=10, cv=5)
random_search.fit(X_train, y_train)
2. XGBoost:高速・高性能なブースティング
XGBoostは精度が非常に高く、Kaggleでも人気の高いライブラリです。チューニング可能なパラメータが多く、段階的に調整していくのがコツです。
🔸 重要なチューニングパラメータ
n_estimators
(木の数)max_depth
(木の深さ)learning_rate
(学習率)subsample
(サンプルの割合)colsample_bytree
(特徴量の割合)
🔸 チューニング例(GridSearch)
import xgboost as xgb
from sklearn.model_selection import GridSearchCV
param_grid = {
'max_depth': [3, 5, 7],
'learning_rate': [0.01, 0.1, 0.2],
'n_estimators': [100, 200]
}
model = xgb.XGBClassifier(use_label_encoder=False, eval_metric='mlogloss')
grid = GridSearchCV(model, param_grid, cv=3)
grid.fit(X_train, y_train)
また、XGBoostはearly stoppingにも対応しており、過学習を防ぎつつ高速に学習可能です。
3. LightGBM:XGBoostのライバル、高速&軽量
LightGBMはMicrosoftが開発した勾配ブースティングライブラリで、大量データや高次元データに強いのが特長です。
🔸 ハイパーパラメータの例
num_leaves
:葉の数(大きすぎると過学習の原因に)max_depth
:木の深さlearning_rate
feature_fraction
:ランダムに使用する特徴量の割合
import lightgbm as lgb
from sklearn.model_selection import RandomizedSearchCV
param_grid = {
'num_leaves': [31, 50, 70],
'max_depth': [5, 10, 15],
'learning_rate': [0.01, 0.05, 0.1]
}
model = lgb.LGBMClassifier()
search = RandomizedSearchCV(model, param_grid, n_iter=10, cv=5)
search.fit(X_train, y_train)
LightGBMもearly_stopping_rounds
での学習打ち切りに対応しており、不要なエポックを減らせます。
4. TensorFlow/Keras:ディープラーニングのチューニング
Keras(TensorFlow内蔵)では、ニューラルネットワークの構造と学習条件の両方を柔軟に設計できます。
🔸 チューニングの観点
- レイヤー数、ノード数
- 活性化関数(ReLU、sigmoid、tanhなど)
- 学習率、バッチサイズ、エポック数
- Optimizer(Adam, SGDなど)
🔸 Keras Tuner の使用
Keras公式が提供するハイパーパラメータチューニング用ライブラリです。
import keras_tuner as kt
def build_model(hp):
model = tf.keras.Sequential()
model.add(tf.keras.layers.Dense(
hp.Int('units', min_value=32, max_value=256, step=32),
activation='relu'))
model.add(tf.keras.layers.Dense(10, activation='softmax'))
model.compile(
optimizer=tf.keras.optimizers.Adam(
hp.Float('learning_rate', 1e-4, 1e-2, sampling='log')),
loss='sparse_categorical_crossentropy',
metrics=['accuracy'])
return model
tuner = kt.RandomSearch(build_model, objective='val_accuracy', max_trials=5)
tuner.search(x_train, y_train, epochs=5, validation_split=0.2)
まとめ:ライブラリに応じた最適化戦略を知ろう
機械学習モデルのチューニングは、使っているライブラリによってアプローチが大きく異なります。以下のように整理しておくとよいでしょう:
ライブラリ | 主なチューニング方法 | 特長 |
---|---|---|
Scikit-learn | GridSearchCV / RandomizedSearchCV | 初心者向け、汎用的 |
XGBoost | GridSearch + early stopping | 精度重視、実績豊富 |
LightGBM | 高速なランダムサーチ | 大規模データ対応、高速 |
Keras/TensorFlow | Keras Tuner / 自前で最適化 | ニューラル構造の自由度高い |
それぞれのライブラリに特化したチューニング技術を身につけることで、より高精度で効率的なAI開発が可能になります。まずは自分が使っているライブラリの公式ドキュメントにも目を通しながら、ひとつひとつ試してみることが成功への近道です。