はじめに
lightGBMで使用するAPIは主にTraining APIとscikit-learn APIの2種類です。前者ではtrain()、後者ではfit()メソッドで学習を行います。
使い方の細かな違いを見ていきましょう。
ハイパーパラメータの設定
Training APIではtrain()メソッドの引数paramsで直接ハイパーパラメータを指定することが可能です。
params = {
'objective': 'lambdarank',
}
model = lgb.train(
params,
train,
valid_sets = valid
)
しかしsklearnのfit()メソッドではそれができません。sklearnでパラメータを設定するにはset_params()メソッドを使います。
model = LGBMRanker()
params = {
'objective': 'lambdarank',
}
model.set_params(**params)
model.fit(
train,
target,
)
あるいはモデル作成の際LGBMClassifierやLGBMRankerメソッドで直接指定しましょう。
(指定できないパラメータがありそうなのでset_params()のほうが確実かも)
lightgbm.readthedocs.iomodel = LGBMRanker( boosting_type='gbdt', num_leaves=31, max_depth=-1, learning_rate=0.1 )
重要度の表示(splitとgain)
lightGBMでは学習後に特徴量の重要度を表示できます。重要度の計算法は頻度とゲインの2種類です。
詳しい内容については以下の記事がわかりやすいかと思います。
www.simpletraveler.jp
基本的にゲインのほうが高精度なようですが、lightGBMでは頻度がデフォルトです。
計算法の設定はTraining APIとsklearnでやり方が異なります。
まずはTraining APIの場合。
params = {
'objective': 'lambdarank',
}
model = lgb.train(
params,
train,
valid_sets=valid
)
#importanceの表示
importance = pd.DataFrame(
model.feature_importance(importance_type='gain'),
index=train.columns,
columns=['importance']).sort_values('importance', ascending=False)
Training APIではmodel.feature_importance()メソッドで重要度を取得できます。importance_typeはfeature_importance()メソッドの引数で指定します。
頻度ならimportance_type='split'、ゲインなら'gain'です。
次はsklearnの場合。
sklearnで重要度を取得するにはmodel.feature_importancesを使います。model = LGBMRanker(importance_type = 'gain') params = { 'objective': 'lambdarank', } model.set_params(**params) model.fit( train, target, ) importance = pd.DataFrame({ 'features': train.columns, 'importance': model.feature_importances }).sort_values('importance', ascending=False)
importance_typeはLGBMClassifier()、LGBMRanker()メソッドなどでインスタンス化の際に指定します。