Как изменить параметры LightGBM, когда он работает?
Итак, я хочу либо изменить параметр LightGBM после его запуска or
После запуска 10000 раз, я хочу добавить другую модель с другими параметрами, но использовать ранее обученную модель.
Что-то вроде этого:
params = {
"objective" : "regression",
"metric" : "mae",
"num_leaves" : 35,
"learning_rate" : 0.05,
"bagging_fraction" : 0.7,
"bagging_seed" : 0,
"num_threads" : 4,
"colsample_bytree" : 0.7,
'min_data_in_leaf':200,
'min_split_gain':0.0004,
'lambda_l2':0.1
}
model = lgb.train( params,
train_set = train_set,
num_boost_round=1000,
early_stopping_rounds=200,
verbose_eval=100,
valid_sets=[train_set,valid_set]
)
params = {
"objective" : "dart",
"metric" : "mae",
"num_leaves" : 44,
"learning_rate" : 0.01,
"bagging_fraction" : 0.3,
"bagging_seed" : 0,
"num_threads" : 4,
"colsample_bytree" : 0.1,
'min_data_in_leaf':400,
'min_split_gain':0.0001,
'lambda_l2':0.2
}
model = lgb.train(
params,
train_set = train_set,
num_boost_round=2000,
early_stopping_rounds=200,
verbose_eval=100,
init_model=model,
valid_sets=[train_set,valid_set]
)
Но здесь, когда я использую init_model=model
Я получаю эту ошибку:
LightGBMError: Cannot set predictor after freed raw data, set free_raw_data=False when construct Dataset to avoid this.
1 ответ
Это одна из тех счастливых ошибок, которые вам нужно сделать именно так, как объясняется в вашем сообщении об ошибке (вот фрагмент кода от меня):
d_train = lgb.Dataset(x_train, label=y_train, free_raw_data = False)
когда вы создаете свои объекты lightgbm.Dataset, то же самое для валидации и тестирования наборов.
Остальные не нуждаются в изменении, ваш код выглядит нормально (также часть init_model). Проблема связана с оболочкой Python для LightGBM, поэтому необходимо установить конструкцию необработанных данных для использования в таких моделях извлечения / извлечения. Если вы заинтересованы в более глубоком понимании ситуации, просто проверьте: https://lightgbm.readthedocs.io/en/latest/FAQ.html
Я уверен, что этот ответ решит вашу ситуацию. Но если нет, пожалуйста, не стесняйтесь спрашивать больше. Удачи!