LightGBMError: Cannot change feature_pre_filter after constructed Dataset handle.
このエラーは、LightGBMで feature_pre_filter パラメータを動的に変更しようとしていることに関連しています。LightGBMの仕様では、データセットハンドルが構築された後に feature_pre_filter を変更することはできません。
この問題を解決するためには、feature_pre_filter パラメータを動的に変更する代わりに、最初から正しい値を設定する必要があります。
具体的には、objective 関数内で lgb_params を構築する際に、feature_pre_filter パラメータを設定する前にデータセットハンドルを構築すればエラーを回避できます。つまり、lgb.train() 関数を呼び出す前に、lgb.Dataset を使用してデータセットハンドルを作成し、それを lgb_params に渡すようにします。以下は修正されたコードです:
python
# 最適化する目的関数の定義
def objective(params):
# LightGBMのデータセットハンドルを準備
lgb_train = lgb.Dataset(X_rf_train, label=y_train)
# LightGBMのパラメータを設定
lgb_params = {
'boosting_type': 'gbdt',
'objective': 'multiclass',
'num_class': num_classes,
'metric': 'multi_logloss',
**params
}
# LightGBMのトレーニング
lgb_model = lgb.train(lgb_params, lgb_train, num_boost_round=100)
# テストデータでの予測
y_pred_lgb = lgb_model.predict(X_rf_test, num_iteration=lgb_model.best_iteration)
y_pred_lgb = np.argmax(y_pred_lgb, axis=1)
# 正解率を計算して返す
accuracy = accuracy_score(y_test, y_pred_lgb)
return -accuracy # 最大化するためにマイナスをかける
これにより、データセットハンドルが構築された後で feature_pre_filter パラメータを設定しようとするエラーが回避されます。

ディスカッション
コメント一覧
まだ、コメントがありません