python代码设置超参数_三种超参数优化方法详解,以及代码实现

超参数调优方法:网格搜索,随机搜索,贝叶斯优化等算法。

1、分别对几种调有方法进行了实验,实验初始数据如下:

importnumpy as npimportpandas as pdfrom lightgbm.sklearn importLGBMRegressorfrom sklearn.metrics importmean_squared_errorimportwarnings

warnings.filterwarnings('ignore')from sklearn.datasets importload_diabetesfrom sklearn.model_selection importKFold, cross_val_scorefrom sklearn.model_selection importtrain_test_splitimporttimeitimportosimportpsutil#在sklearn.datasets的糖尿病数据集上演示和比较不同的算法,加载它。

diabetes =load_diabetes()

data=diabetes.data

targets=diabetes.target

n=data.shape[0]

random_state=42

#时间占用 s

start=timeit.default_timer()#内存占用 mb

info_start = psutil.Process(os.getpid()).memory_info().rss/1024/1024train_data, test_data, train_targets, test_targets=train_test_split(data, targets,

test_size=0.20, shuffle=True,

random_state=random_state)

num_folds=2kf= KFold(n_splits=num_folds, random_state=random_state)

model= LGBMRegressor(random_state=random_state)

score= -cross_val_score(model, train_data, train_targets, cv=kf, scoring="neg_mean_squared_error", n_jobs=-1).mean()print(score)

end=timeit.default_timer()

info_end= psutil.Process(os.getpid()).memory_info().rss/1024/1024

print('此程序运行占内存'+str(info_end-info_start)+'mB')print('Running time:%.5fs'%(end-start))

实验结果为:

最小平方误差:3532.0822189641976

此程序运行占内存:0.22265625mB

Running time:0.26576s

出于对比目的,我们将优化仅调整以下三个参数的模型:

n_estimators:从100到2000

max_depth:2到20

learning_rate:从10e-5到1

2、网格搜索:

网格搜索可能是最简单,应用最广泛的超参数搜索算法,他通过查找搜索范围内的所以的点来确定最优值。如果采用较大的搜索范围及较小的步长,网格搜索很大概率找到全局最优值。然而这种搜索方案十分消耗计算资源和时间,特别是需要调优的超参数比较多的时候。

因此在实际应用过程中,网格搜索法一般会先使用较广的搜索范围和较大的步长,来找到全局最优值可能的位置;然后再缩小搜索范围和步长,来寻找更精确的最优值。这种操作方案可以降低所需的时间和计算量,但由于目标函数一般是非凸的,所以很可能会错过全局最优值。

网格搜素对应于sklearn中的GridSearchCV模块:sklearn.model_selection.GridSearchCV(estimator, param_grid, *, scoring=None, n_jobs=None, iid='deprecated', refit=True, cv=None, verbose=0, pre_dispatch='2*n_jobs', error_score=nan, return_train_score=False

from sklearn.model_selection importGridSearchCV#时间占用 s

start=timeit.default_timer()#内存占用 mb

info_start = psutil.Process(os.getpid()).memory_info().rss/1024/1024param_grid={'learning_rate': np.logspace(-3, -

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值