公众号【机器学习炼丹术】资料

本文主要介绍公众号【机器学习炼丹术】资料 方法和在新技术下所面对的“挑战”,方便大家深入理解公众号【机器学习炼丹术】资料 过程。本文也将分享公众号【机器学习炼丹术】资料 所遇到的问题和应对策略,怎么解决怎么做的问题。
通过深入本文可以理解代码原理,进行代码文档的下载,也可以查看相应 Demo 部署效果。

这是个人在竞赛中对LGB模型进行调参的详细过程记录,主要包含下面六个步骤:

  1. 大学习率,确定估计器参数n_estimators/num_iterations/num_round/num_boost_round
  2. 确定num_leavesmax_depth
  3. 确定min_data_in_leaf
  4. 确定bagging_fraction+bagging_freqfeature_fraction
  5. 确定L1L2正则reg_alphareg_lambda
  6. 降低学习率

【这里必须说一下,lightbg的参数的同义词实在太多了,很多不同的参数表示的是同一个意思,不过本文中使用“/”分开】

0 并行优化

主要有两种feature parallel特征并行和data parallel数据并行。具体的过程我不也不了解,因为我没有多个CPU给我耍(穷)。

  • feature parallel:每个worker有全部的训练数据,但是他们只用部分特征进行训练,然后不同worker之间交流他们的局部最优特征和分裂点,比较出来哪一个是全局最优的。
  • data parallel: 每一个worker有部分的样本,然后绘制局部特征直方图。彼此交流之后,得到全局直方图进行训练。

【虽然具体的机制不太了解,但是最重要的是:小数据用feature parallel,大数据用data parallel

1. 估计器数量

不管怎么样,我们先把学习率先定一个较高的值,这里取 learning_rate = 0.1,其次确定估计器boosting/boost/boosting_type的类型,不过默认都会选gbdt

这里可以体现,虽然LGB和XGB经常拿来和GBDT比较,但是其本质都还是GBDT的boost思想

为了确定估计器的数目,也就是boosting迭代的次数,也可以说是残差树的数目,参数名为n_estimators/num_iterations/num_round/num_boost_round。我们可以先将该参数设成一个较大的数,然后在cv结果中查看最优的迭代次数,具体如代码。

在这之前,我们必须给其他重要的参数一个初始值。初始值的意义不大,只是为了方便确定其他参数。下面先给定一下初始值:

以下参数根据具体项目要求定:

'boosting_type'/'boosting': 'gbdt' 'objective': 'regression' 'metric': 'rmse' 

以下参数我选择的初始值,你可以根据自己的情况来选择:

'max_depth': 6     ###   根据问题来定咯,由于我的数据集不是很大,所以选择了一个适中的值,其实4-10都无所谓。 'num_leaves': 50  ###   由于lightGBM是leaves_wise生长,官方说法是要小于2^max_depth 'subsample'/'bagging_fraction':0.8           ###  数据采样 'colsample_bytree'/'feature_fraction': 0.8  ###  特征采样 

下面我是用LightGBM的cv函数进行演示:

params = {     'boosting_type': 'gbdt',      'objective': 'regression',       'learning_rate': 0.1,      'num_leaves': 50,      'max_depth': 6,      'subsample': 0.8,      'colsample_bytree': 0.8,      } 
data_train = lgb.Dataset(df_train, y_train, silent=True) cv_results = lgb.cv(     params, data_train, num_boost_round=1000, nfold=5, stratified=False, shuffle=True, metrics='rmse',     early_stopping_rounds=50, verbose_eval=50, show_stdv=True, seed=0)  print('best n_estimators:', len(cv_results['rmse-mean'])) print('best cv score:', cv_results['rmse-mean'][-1]) 

运行结果是:

[50]	cv_agg's rmse: 1.38497 + 0.0202823 best n_estimators: 43 best cv score: 1.3838664241 

所以我们得到了结果,在学习率0.1的时候,有43个估计器的时候效果最好。所以现在我们已经调整好了一个参数了:n_estimators/num_iterations/num_round/num_boost_round=43

【在硬件设备允许的条件下,学习率还是越小越好】

2. 提高拟合程度

这是提高精确度的最重要的参数。

  • max_depth:设置树深度,深度越大可能过拟合
  • num_leaves:因为 LightGBM 使用的是 leaf-wise 的算法,因此在调节树的复杂程度时,使用的是 num_leaves 而不是 max_depth。大致换算关系:num_leaves = 2^(max_depth),但是它的值的设置应该小于 2^(max_depth),否则可能会导致过拟合。

【这里虽然说了num_leaves与max_depth之间的关系,但是并不是严格的,大概在这个左右就好了。】

接下来同时对这两个参数调优,引入sklearn中的GridSearchCV()函数进行网格搜索,当然也可以使用贝叶斯搜索,贝叶斯这个之前在个人博客讲过,之后我有空了再搬运到
公众号【机器学习炼丹术】资料部分资料来自网络,侵权毕设源码联系删除

区块链毕设网(www.qklbishe.com)全网最靠谱的原创区块链毕设代做网站
部分资料来自网络,侵权联系删除!
资源收费仅为搬运整理打赏费用,用户自愿支付 !
qklbishe.com区块链毕设代做网专注|以太坊fabric-计算机|java|毕业设计|代做平台 » 公众号【机器学习炼丹术】资料

提供最优质的资源集合

立即查看 了解详情