GBM调试参数学习

                                                                                      GBM、xgboost参数调试学习

    主要参考文章:

                  http://blog.youkuaiyun.com/han_xiaoyang/article/details/52663170  (gbm)

                  http://blog.youkuaiyun.com/han_xiaoyang/article/details/52665396(xgboost)

                 (大神的原文,我只是搬运工)


     原文很不错,只是我看晚了,比赛已经被关闭,所以拿不到比赛背景。此处是我个人学习简单记录,后续的会补充之前的学习内容。

     这篇文章起先对于我来说,并没有太明白,刚把决策树看完(捂脸)。首先建议手上有本机器学习书,推荐周志华的和李航的,他两风格不一样,可以交叉,恰好符合“把书读厚和读薄”。李航更具有概括性,适合构建知识架构,周志华还给本科生上课会基础些。我看决策树这章节有明显感觉,李航的书中开始就是一段综述,很经典。

     以上都是废话,下面这个是重点,请阅读两遍。



      1、这些个参数都是个啥呀?

      我刚刚读完决策树周志华的,在此装个13,读完之后,看不太懂博文,浅浅的知道以下几点:

      1>GBDT是梯度提升决策树,是属于boosting家的,关注于偏差。

      2>决策树的基本知识:信息熵、信息增益、信息增益比、基尼指数

   (先默写出自己能对决策树和集成学习的认识,故意多写几个显得自己多么博学,握了个大草,说完了,我就知道这些,汗)。


      根本看不懂,调参时,为什么要有min_samples_split、min_samples_leaf就这两个参数搞不太懂:

回头再看西瓜书,发现:

       a>在你想到决策树时,脑海中每个结点应当对应的是:样本属性+样本个数。

       b>这样注意到了,每个结点聚集了一些样本。这样就会有,当这个结点至少包含多少个结点,它才能分裂,还有树生长结束后至少要有多个样本。

(看西瓜书的时候,就应该想到,每个结点=>西瓜的某个特征+符合该特征的西瓜数。如果你比我还愚蠢,还没读懂,请你带着西瓜书,到超市买17个西瓜,把书中的实验做一下吧,这样至少以后可以卖瓜。



       这个必须强调:

       结点样本的个数,就是为了结点分裂或者上次分裂的有效性的确认。

       不仅在此处,所有的都是这样,训练数据挖掘出来的特征可能就是小范围数据具有的特征,可能不具有一般性。


      假设:样本有100000个西瓜,某个结点上有2个西瓜,它自身的存在还有必要吗?这个结点还有接下来分的必要吗?基本上就是把所有的西瓜长得什么样都记住了,还怎么预测未知的呢?不能预测未知的西瓜,就是指模型过拟合了,不具备泛化能力。

       

     2、调参套路是啥?

     其实原文主要是以案例的形式来讲解一些sklearn中GBM如何调参,调参的基本套路,而且这个套路经过实践验证是可行的。进而再看下xgboost的调参套路,还是这个案例。xgboost才是重点。

(ps:有人很瞧不上,调参,GG,你先会再说)

    

    明确以下:

    i) GBM参数具有三大类:树模型参数、boosting参数、其他参数

    ii)调参准则三条:baseline(有个参考标准);控制变量法;调参数的顺序是按照其影响度由高到低;

    

    树模型参数:

     主要是来控制生长,目的就是缓解过拟合。(我不展开细说,可以看大神的文章,有啥,什么作用)

   

     调参流程如下:

        

### LightGBM 参数详解 #### 一、核心参数 LightGBM 的核心参数决定了模型的基础行为。这些参数对于构建高效且准确的模型至关重要。 - **`objective`**: 定义训练目标函数,常见的有 `regression`, `binary`, 和 `multiclass` 等模式[^1]。 - **`metric`**: 设置评估指标,在不同的任务场景下可以选择不同的度量标准来监控模型性能,比如 RMSE 对于回归问题或是 AUC 对于分类问题. ```python import lightgbm as lgb params = { 'objective': 'binary', 'metric': 'auc' } ``` #### 二、树结构控制参数 为了防止过拟合并优化计算效率,可以调整与决策树生长有关的一系列超参数: - **`max_depth`**: 控制单棵树的最大深度,默认情况下不设限;适当减小该值有助于减少过拟合并加快收敛速度[^2]. - **`num_leaves`**: 设定每棵叶子节点的数量上限,通常建议将其设置为不大于 $2^{max\_depth}$ ,以保持合理的分支复杂度. ```python params.update({ 'max_depth': 8, 'num_leaves': 63 }) ``` #### 三、正则化项 引入正则化可以帮助缓解过拟合现象,提高泛化能力: - **`lambda_l1` / `min_data_in_leaf`**: L1 正则化的强度系数以及最小样本数阈值用于剪枝不必要的分裂点[^3]. - **`lambda_l2`**: 类似地作用于L2范数惩罚上. ```python params.update({ 'lambda_l1': 0.1, 'lambda_l2': 0.2, 'min_data_in_leaf': 20 }) ``` #### 四、加速技巧 针对大规模数据集或高维稀疏矩阵,可采用如下策略提升训练过程中的响应间: - **`feature_fraction`**: 随机选取部分特征参与每次迭代更新,类似于随机森林的做法,能有效降低内存占用率的同增强鲁棒性. - **`bagging_fraction` & `bagging_freq`**: 实现行级采样机制,即每隔若干轮次抽取一定比例的数据子集进行学习,从而达到类似Bagging的效果. ```python params.update({ 'feature_fraction': 0.9, 'bagging_fraction': 0.8, 'bagging_freq': 5 }) ``` #### 五、其他重要选项 还有一些辅助性的配置值得考虑加入到最终版的参数列表里去: - **`learning_rate`**: 学习速率直接影响着梯度下降的速度和平稳程度,一般推荐从小数值起步逐步试探最优解区间. - **`verbose`**: 打印日志级别开关,方便调试期间查看进度条信息等. ```python params.update({ 'learning_rate': 0.01, 'verbose': -1 }) ``` 通过上述几个方面的综合考量和细致调节,能够显著改善基于 LightGBM 构建出来的预测系统的整体表现力。当然实际应用过程中还需要结合具体的业务背景和个人经验不断尝试新的组合方案直至找到最满意的结果为止。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值