前回の記事で、cometという機械学習における実験管理ができるツールを紹介しました!
今回の記事は、その続きとして実際にLightGBMを用いて実験管理をするまでをまとめていきたいと思います!
準備
install
pip install でインストールできます!
pip install comet_ml
アカウント登録
cometを使うためには、アカウント登録が必要です。個人利用の場合は無料で使えるので、下のリンクからcometのホームページに飛んで、右上の「Sign Up」からアカウントを登録してください!
https://www.comet.ml/
APIキーを取得するためにも必要です!!
今回使用するデータの取得
train,testデータをそれぞれ取得してください!
wget https://raw.githubusercontent.com/microsoft/LightGBM/master/examples/regression/regression.train -qq
wget https://raw.githubusercontent.com/microsoft/LightGBM/master/examples/regression/regression.test -qq
LightGBM で comet活用
cometの設定
cometを使えるようにする設定は基本的にこの設定で十分です!
from comet_ml import Experiment
experiment = Experiment(
api_key="*********",
project_name="********",
workspace="*****",
auto_metric_logging=True,
auto_param_logging=True,
log_graph=True,
parse_args=True,
)
1つずつ順番に説明していくと、
import
from comet_ml import Experiment
APIキーを含むプロジェクトごとの設定
cometの設定の核となる部分です。API keyの設定と、project_name(どのプロジェクトに属するかの設定)、workspace(アカウントを作ったときの名前)を設定します。ここまでは、lightGBMに限らず、comet共通の設定です!
experiment = Experiment(
api_key="*********",
project_name="********",
workspace="*****",
)
LightGBM 実験を行うパラメータの設定
LightGBMでの主な設定項目は4つあります!いずれもデフォルトでは Falseとなっているので、必要なものをTrueにして使っていきましょう!
1. auto_metric_logging
評価指標として設定したもののログを自動で取ってくれる!
2. auto_param_logging
パラメータのログを自動で取ってくれる!
3. log_graph
モデルのグラフ表現のログを取得
4. parse_args
コマンドライン引数のログを取得
LightGBMのコード
機械学習の学習部分には、設定は必要なくここまでにした設定のもとでコードを以下のように書いていくとそのまま comet のページにログが取られていきます!
はじめに1回設定しておけば、その後は実行の度に自動的にログを取ってくれる+そしてそれらの結果をGUIで比較できる!という点は良いですよね!!
import lightgbm as lgb
import os
import pandas as pd
from sklearn.metrics import mean_squared_error
dirname = './'
df_train = pd.read_csv(os.path.join(dirname, "regression.train"), header=None, sep="\t")
df_test = pd.read_csv(os.path.join(dirname, "regression.test"), header=None, sep="\t")
y_train = df_train[0]
y_test = df_test[0]
X_train = df_train.drop(0, axis=1)
X_test = df_test.drop(0, axis=1)
lgb_train = lgb.Dataset(X_train, y_train)
lgb_eval = lgb.Dataset(X_test, y_test, reference=lgb_train)
params = {
"boosting_type": "gbdt",
"objective": "regression",
"metric": {"rmse", "l2", "l1", "huber"},
"num_leaves": 31,
"learning_rate": 0.05,
"feature_fraction": 0.9,
"bagging_fraction": 0.8,
"bagging_freq": 5,
"verbosity": -1,
}
gbm = lgb.train(
params,
lgb_train,
num_boost_round=20,
valid_sets=lgb_eval,
valid_names=("validation"),
early_stopping_rounds=5,
)
y_pred = gbm.predict(X_test, num_iteration=gbm.best_iteration)
print("The rmse of prediction is:", mean_squared_error(y_test, y_pred) ** 0.5)
(コードはcometの公式ドキュメンテーションから引用(一部改変))
学習結果は下記のようになりました!(このログをcometで取れているか?グラフ化できているか?をこの後見ていきます!)
comet で確認 !
実際に今回は評価指標として、"l1","l2","rmse","hunber"の4つであったので、それらについてそれぞれ学習過程を図示すると、このように画面で表示されています!!
コメント