机器学习中XGBoost算法调参技巧
机器学习算法与Python实战
共 4887字,需浏览 10分钟
· 2023-09-01
本文将详细解释XGBoost中十个最常用超参数的介绍,功能和值范围,及如何使用Optuna进行超参数调优。 对于XGBoost来说,默认的超参数是可以正常运行的,但是如果你想获得最佳的效果,那么就需要自行调整一些超参数来匹配你的数据,以下参数对于XGBoost非常重要:
-
eta
-
num_boost_round
-
max_depth
-
subsample
-
colsample_bytree
-
gamma
-
min_child_weight
-
lambda
-
alpha
# Define the rest of the params上面的代码使XGBoost生成100k决策树,但是由于使用了早停,当验证分数在最后50轮中没有提高时,它将停止。一般情况下树的数量范围在5000-10000即可。控制num_boost_round也是影响训练过程运行时间的最大因素之一,因为更多的树需要更多的资源。 3、eta - learning_rate 在每一轮中,所有现有的树都会对给定的输入返回一个预测。例如,五棵树可能会返回以下对样本N的预测:
params = {...}
# Build the train/validation sets
dtrain_final = xgb.DMatrix(X_train, label=y_train)
dvalid_final = xgb.DMatrix(X_valid, label=y_valid)
bst_final = xgb.train(
params,
dtrain_final,
num_boost_round=100000 # Set a high number
evals=[(dvalid_final, "validation")],
early_stopping_rounds=50, # Enable early stopping
verbose_eval=False,
)
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.它肯定比我讲的明白,对吧。最后如果你也用optuna进行调优,请参考以下的GIST:
2) Describe how {parameter_name} fits into the step-by-step tree-building process of XGBoost.
https://gist.github.com/BexTuychiev/823df08d2e3760538e9b931d38439a68
作者:Bex T.
可能是全网最全的速查表:Python Numpy Pandas Matplotlib 机器学习 ChatGPT等
评论
轻松掌握开源项目的二次开发技巧
大厂技术 高级前端 Node进阶点击上方 程序员成长指北,关注公众号回复1,加入高级Node交流群本文作者:@方长_beezen 原文链接:https://juejin.cn/post/7358647992608489535前言随着软件行业的迅速
程序员成长指北
0
科普:深度学习训练,不同预算GPU选购指南
以下文章来源于微信公众号:DeepHub IMBA作者:Mike Clayton本文仅用于学术分享,如有侵权,请联系后台作删文处理导读购买显卡第一个要考虑的问题是什么?当然是预算。本文提供了不同预算的显卡选购指南,希望能对各位读者有所帮助。在进行机器学习项目时,特别是在处理深度学习和神经网络时,最好
机器学习初学者
0
【深度学习】人人都能看懂的LSTM
熟悉深度学习的朋友知道,LSTM是一种RNN模型,可以方便地处理时间序列数据,在NLP等领域有广泛应用。在看了台大李宏毅教授的深度学习视频后,特别是介绍的第一部分RNN以及LSTM,整个人醍醐灌顶。本文就是对视频的记录加上了一些个人的思考。0. 从RNN说起循环神经网络(Recurrent Neur
机器学习初学者
0
10个高级的 SQL 查询技巧
来源:towardsdatascience.com/ten-advanced-sql-concepts-you-should-know-for-data-science-interviews-4d7015ec74b0👉 欢迎加入小哈的星球 ,你将获得: 专属的项目实战 / Jav
小哈学Java
0
学习开放日:开放复杂科学、AI+X 海量学习资源!
Datawhale干货 学习开放日:4月27-28日1. 什么是学习开放日?以AI为代表的技术突飞猛进,人类知识森林快速扩张,仅凭一人之力不仅难以覆盖,更是难以串联知识线索。唯有像蚂蚁探索最优路径一样,我们才能在信息爆炸的知识森林中探索出更好的方向!因此,今年集智斑图联合国内最
Datawhale
1
【深度学习】图解自注意力机制(Self-Attention)
一、注意力机制和自注意力机制的区别Attention机制与Self-Attention机制的区别传统的Attention机制发生在Target的元素和Source中的所有元素之间。简单讲就是说Attention机制中的权重的计算需要Target来参与。即在Encoder-Decoder 模型中,At
机器学习初学者
0
【Python】Python加速运行技巧
Python 是一种脚本语言,相比 C/C++ 这样的编译语言,在效率和性能方面存在一些不足。但是,有很多时候,Python 的效率并没有想象中的那么夸张。本文对一些 Python 代码加速运行的技巧进行整理。 0. 代码优化原则 本文会介绍不少的 Python 代码加速运行的技巧。在深入代码优化细
机器学习初学者
0
面试通过,背调凉了。。
整理来源|网络背调,可以很精准的检验应聘者简历中所写和所讲的是否属实,已经成为招聘企业检验员工是否合格的重要手段之一,也是应聘者在面试过程中十分反感的一点。我们经常会看到有人在网络上吐槽自己因为背调错失了高薪offer,而企业也会因为背调感到头疼。因为面试者能力很强,但是却在背调中发现有作假情况,这
码农突围
0