合肥网站营销,wordpress上传网页,做网站美工需要会什么软件,长沙网上房地产本文将详细解释XGBoost中十个最常用超参数的介绍#xff0c;功能和值范围#xff0c;及如何使用Optuna进行超参数调优。
对于XGBoost来说#xff0c;默认的超参数是可以正常运行的#xff0c;但是如果你想获得最佳的效果#xff0c;那么就需要自行调整一些超参数来匹配你…
本文将详细解释XGBoost中十个最常用超参数的介绍功能和值范围及如何使用Optuna进行超参数调优。
对于XGBoost来说默认的超参数是可以正常运行的但是如果你想获得最佳的效果那么就需要自行调整一些超参数来匹配你的数据以下参数对于XGBoost非常重要: eta num_boost_round max_depth subsample colsample_bytree gamma min_child_weight lambda alpha
技术交流
技术要学会分享、交流不建议闭门造车。一个人可以走的很快、一堆人可以走的更远。
本文文章由粉丝的分享、推荐资料干货、资料分享、数据、技术交流提升均可加交流群获取群友已超过2000人添加时最好的备注方式为来源兴趣方向方便找到志同道合的朋友。 方式①、添加微信号pythoner666备注来自CSDN 加群 方式②、微信搜索公众号Python学习与数据挖掘后台回复加群 XGBoost的API有2种调用方法一种是我们常见的原生API一种是兼容Scikit-learn API的APIScikit-learn API与Sklearn生态系统无缝集成。我们这里只关注原生API也就是我们最常见的但是这里提供一个列表这样可以帮助你对比2个API参数万一以后用到了呢 如果想使用Optuna以外的超参数调优工具可以参考该表。下图是这些参数对之间的相互作用: 这些关系不是固定的但是大概情况是上图的样子因为有一些其他参数可能会对我们的者10个参数有额外的影响。
1、objective
这是我们模型的训练目标 最简单的解释是这个参数指定我们模型要做的工作也就是影响决策树的种类和损失函数。
2、num_boost_round - n_estimators
num_boost_round指定训练期间确定要生成的决策树(在XGBoost中通常称为基础学习器)的数量。默认值是100但对于今天的大型数据集来说这还远远不够。
增加参数可以生成更多的树但随着模型变得更复杂过度拟合的机会也会显著增加。
从Kaggle中学到的一个技巧是为num_boost_round设置一个高数值比如100,000并利用早停获得最佳版本。
在每个提升回合中XGBoost会生成更多的决策树来提高前一个决策树的总体得分。这就是为什么它被称为boost。这个过程一直持续到num_boost_round轮询为止不管是否比上一轮有所改进。
但是通过使用早停技术我们可以在验证指标没有提高时停止训练不仅节省时间还能防止过拟合
有了这个技巧我们甚至不需要调优num_boost_round。下面是它在代码中的样子: # Define the rest of the paramsparams {...}# Build the train/validation setsdtrain_final xgb.DMatrix(X_train, labely_train)dvalid_final xgb.DMatrix(X_valid, labely_valid)bst_final xgb.train(params,dtrain_final,num_boost_round100000 # Set a high numberevals[(dvalid_final, validation)],early_stopping_rounds50, # Enable early stoppingverbose_evalFalse,)
上面的代码使XGBoost生成100k决策树但是由于使用了早停当验证分数在最后50轮中没有提高时它将停止。一般情况下树的数量范围在5000-10000即可。控制num_boost_round也是影响训练过程运行时间的最大因素之一因为更多的树需要更多的资源。
3、eta - learning_rate
在每一轮中所有现有的树都会对给定的输入返回一个预测。例如五棵树可能会返回以下对样本N的预测: Tree 1: 0.57 Tree 2: 0.9 Tree 3: 4.25 Tree 4: 6.4 Tree 5: 2.1
为了返回最终的预测需要对这些输出进行汇总但在此之前XGBoost使用一个称为eta或学习率的参数缩小或缩放它们。缩放后最终输出为: output eta * (0.57 0.9 4.25 6.4 2.1)
大的学习率给集合中每棵树的贡献赋予了更大的权重但这可能会导致过拟合/不稳定会加快训练时间。而较低的学习率抑制了每棵树的贡献使学习过程更慢但更健壮。这种学习率参数的正则化效应对复杂和有噪声的数据集特别有用。
学习率与num_boost_round、max_depth、subsample和colsample_bytree等其他参数呈反比关系。较低的学习率需要较高的这些参数值反之亦然。但是一般情况下不必担心这些参数之间的相互作用因为我们将使用自动调优找到最佳组合。
4、subsample和colsample_bytree
子抽样subsample它将更多的随机性引入到训练中从而有助于对抗过拟合。
Subsample 0.7意味着集合中的每个决策树将在随机选择的70%可用数据上进行训练。值1.0表示将使用所有行(不进行子抽样)。
与subsample类似也有colsample_bytree。顾名思义colsample_bytree控制每个决策树将使用的特征的比例。Colsample_bytree 0.8使每个树使用每个树中随机80%的可用特征(列)。
调整这两个参数可以控制偏差和方差之间的权衡。使用较小的值降低了树之间的相关性增加了集合中的多样性有助于提高泛化和减少过拟合。
但是它们可能会引入更多的噪声增加模型的偏差。而使用较大的值会增加树之间的相关性降低多样性并可能导致过拟合。
5、max_depth
最大深度max_depth控制决策树在训练过程中可能达到的最大层次数。 更深的树可以捕获特征之间更复杂的相互作用。但是更深的树也有更高的过拟合风险因为它们可以记住训练数据中的噪声或不相关的模式。为了控制这种复杂性可以限制max_depth从而生成更浅、更简单的树并捕获更通用的模式。
Max_depth数值可以很好地平衡了复杂性和泛化。
6、7、alpha,lambda
这两个参数一起说是因为alpha (L1)和lambda (L2)是两个帮助过拟合的正则化参数。
与其他正则化参数的区别在于它们可以将不重要或不重要的特征的权重缩小到0(特别是alpha)从而获得具有更少特征的模型从而降低复杂性。
alpha和lambda的效果可能受到max_depth、subsample和colsample_bytree等其他参数的影响。更高的alpha或lambda值可能需要调整其他参数来补偿增加的正则化。例如较高的alpha值可能受益于较大的subsample值因为这样可以保持模型多样性并防止欠拟合。
8、gamma
如果你读过XGBoost文档它说gamma是:
在树的叶节点上进行进一步分区所需的最小损失减少。
英文原文the minimum loss reduction required to make a further partition on a leaf node of the tree.
我觉得除了写这句话的人其他人都看不懂。让我们看看它到底是什么下面是一个两层决策树: 为了证明通过拆分叶节点向树中添加更多层是合理的XGBoost应该计算出该操作能够显著降低损失函数。
但“显著是多少呢?”这就是gamma——它作为一个阈值来决定一个叶节点是否应该进一步分割。
如果损失函数的减少(通常称为增益)在潜在分裂后小于选择的伽马则不执行分裂。这意味着叶节点将保持不变并且树不会从该点开始生长。
所以调优的目标是找到导致损失函数最大减少的最佳分割这意味着改进的模型性能。
9、min_child_weight
XGBoost从具有单个根节点的单个决策树开始初始训练过程。该节点包含所有训练实例(行)。然后随着 XGBoost 选择潜在的特征和分割标准最大程度地减少损失更深的节点将包含越来越少的实例。 如果让XGBoost任意运行树可能会长到最后节点中只有几个无关紧要的实例。这种情况是非常不可取的因为这正是过度拟合的定义。
所以XGBoost为每个节点中继续分割的最小实例数设置一个阈值。通过对节点中的所有实例进行加权并找到权重的总和如果这个最终权重小于min_child_weight则分裂停止节点成为叶节点。
上面解释是对整个过程的最简化的版本因为我们主要介绍他的概念。
总结
以上就是我们对这 10个重要的超参数的解释如果你想更深入的了解仍有很多东西需要学习。所以建议给ChatGPT以下两个提示: 1) Explain the {parameter_name} XGBoost parameter in detail and how to choose values for it wisely.2) Describe how {parameter_name} fits into the step-by-step tree-building process of XGBoost.它肯定比我讲的明白对吧。
最后如果你也用optuna进行调优请参考以下的GIST https://gist.github.com/BexTuychiev/823df08d2e3760538e9b931d38439a68