はじめに
lightGBMで使用するAPIは主にTraining APIとscikit-learn APIの2種類です。前者ではtrain()、後者ではfit()メソッドで学習を行います。
使い方の細かな違いを見ていきましょう。
ハイパーパラメータの設定
Training APIではtrain()メソッドの引数paramsで直接ハイパーパラメータを指定することが可能です。しかしsklearnのfit()メソッドではそれができません。params = { 'objective': 'lambdarank', } model = lgb.train( params, train, valid_sets = valid )
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の場合。
Training APIではmodel.feature_importance()メソッドで重要度を取得できます。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)
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()メソッドなどでインスタンス化の際に指定します。