sklearn.model_selection
のlightgbm
を使用して、GridSearchCV
モデルの最適なパラメーターを見つけようとしています。実際に機能する解決策を見つけることができませんでした。
部分的に機能するコードをセットアップすることができました:
import numpy as np
import pandas as pd
import lightgbm as lgb
from sklearn.model_selection import GridSearchCV
from sklearn.model_selection import KFold
np.random.seed(1)
train = pd.read_csv('train.csv')
test = pd.read_csv('test.csv')
y = pd.read_csv('y.csv')
y = y.values.ravel()
print(train.shape, test.shape, y.shape)
categoricals = ['COL_A','COL_B']
indexes_of_categories = [train.columns.get_loc(col) for col in categoricals]
gkf = KFold(n_splits=5, shuffle=True, random_state=42).split(X=train, y=y)
param_grid = {
'num_leaves': [31, 127],
'reg_alpha': [0.1, 0.5],
'min_data_in_leaf': [30, 50, 100, 300, 400],
'lambda_l1': [0, 1, 1.5],
'lambda_l2': [0, 1]
}
lgb_estimator = lgb.LGBMClassifier(boosting_type='gbdt', objective='binary', num_boost_round=2000, learning_rate=0.01, metric='auc',categorical_feature=indexes_of_categories)
gsearch = GridSearchCV(estimator=lgb_estimator, param_grid=param_grid, cv=gkf)
lgb_model = gsearch.fit(X=train, y=y)
print(lgb_model.best_params_, lgb_model.best_score_)
これは機能しているようですが、UserWarning
があります:
categorical_feature
キーワードがparams
で見つかり、無視されます。このパラメーターを渡すには、Datasetコンストラクターのcategorical_feature
引数を使用してください。
私は実用的な解決策、またはおそらくlightgbmが上記のコードのカテゴリ引数を確実に受け入れるようにする方法についての提案を探しています
警告が示すように、categorical_feature
はLGBMModel
引数の1つではありません。これは、lgb.Dataset
のインスタンス化に関連しています。sklearnAPIの場合、fit()
メソッドで直接実行されます ドキュメントを参照 。したがって、これらをGridSearchCV
最適化で渡すには、sklearn v0.19.1の場合はGridSearchCV.fit()
メソッドの引数として、または古いsklearnバージョンのGridSearchCV
インスタンス化で追加のfit_params
引数としてそれを提供する必要があります。