贝叶斯调参的相关知识与代码格式请参考:https://blog.csdn.net/weixin_35757704/article/details/118416689
- 构造LGBM模型
model = LGBMRegressor( num_leaves=31, learning_rate=learning_rate, n_estimators=int(n_estimators), silent=True, n_jobs=5, random_state=0, verbose=-1, min_child_samples=int(min_child_samples), feature_fraction=feature_fraction, bagging_fraction=bagging_fraction, ) model.fit(x_train, y_train, eval_set=[(x_test, y_test)], verbose=-1)
- 使用贝叶斯模板
- 训练模型,并且将每一次的结果都写入文件中,防止程序意外终止。
完整代码
from lightgbm import LGBMRegressor
from sklearn.model_selection import train_test_split
from sklearn.datasets import make_regression
import numpy as np
from bayes_opt import BayesianOptimization
from sklearn.metrics import mean_squared_error
def train_model(learning_rate, n_estimators, min_child_samples, feature_fraction, bagging_fraction):
# 模型训练
try:
model = LGBMRegressor(
num_leaves=31,
learning_rate=learning_rate,
n_estimators=int(n_estimators),
silent=True,
n_jobs=5, random_state=0, verbose=-1,
min_child_samples=int(min_child_samples),
feature_fraction=feature_fraction,
bagging_fraction=bagging_fraction,
)
model.fit(x_train, y_train, eval_set=[(x_test, y_test)], verbose=-1)
score = - mean_squared_error(y_test, model.predict(x_test, num_iteration=model.best_iteration_))
with open('lgbm_param.txt', 'a') as file:
file.write("learning_rate:" + str(learning_rate) + " n_estimators:" + str(
int(n_estimators)) + " min_child_samples:" + str(int(min_child_samples)) + " score:" + str(
score) + '\n')
return score
except Exception as e:
return -1000000
if __name__ == '__main__':
x, y = make_regression(n_samples=1000, n_features=5)
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.2)
pbounds = {'learning_rate': (0.0001, 0.1),
'n_estimators': (100, 1000),
'min_child_samples': (18, 40),
'feature_fraction': (0.5, 0.9999999999),
"bagging_fraction": (0.5, 0.99999999999),
}
optimizer = BayesianOptimization(
f=train_model, # 黑盒目标函数
pbounds=pbounds, # 取值空间
verbose=2, # verbose = 2 时打印全部,verbose = 1 时打印运行中发现的最大值,verbose = 0 将什么都不打印
random_state=1,
)
optimizer.maximize( # 运行
init_points=10, # 随机搜索的步数
n_iter=5000, # 执行贝叶斯优化迭代次数
)
with open('lgbm_param.txt', 'a') as file:
file.write("optimizer_params: " + str(optimizer.max['params']) + " optimizer_target: " + str(
optimizer.max['target']) + '\n')