xgboost的调优

这篇具有很好参考价值的文章主要介绍了xgboost的调优。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

我想要给大家说明的是:不要幻想仅仅通过参数调优或者换一个稍微更好的模型使得最终结果有巨大的飞跃。要想最后的结果有巨大的提升,可以通过特征工程、模型集成来实现。文章来源地址https://www.toymoban.com/news/detail-432404.html

基本的

model2 = xgb.XGBRegressor(max_depth=6,learning_rate=0.05,n_estimators=100,min_child_weight=1,randam_state=42)

max_depth :每棵二叉树的最大深度,默认是6; 值越大,越容易过拟合,越小,容易欠拟合

learning_rate: 学习率

n_estumators: 基学习器个数

min_child_weight:默认值为1,。值越大,越容易欠拟合;值越小,越容易过拟合(值较大时,避免模型学习到局部的特殊样本)

gamma:系统默认为0,我们也常用0。     在节点分裂时,只有分裂后损失函数的值下降了,才会分裂这个节点。gamma指定了节点分裂所需的最小损失函数下降值。 这个参数的值越大,算法越保守。因为gamma值越大的时候,损失函数下降更多才可以分裂节点。所以树生成的时候更不容易分裂节点。范围: [0,∞]

subsample [default=1]:样本的采样率,如果设置成0.5,那么Xgboost会随机选择一般的样本作为训练集。

colsample_bytree [default=1]: 构造每棵树时,列采样率(一般是特征采样率)。

alpha [default=0, alias: reg_alpha]: L1正则化(与lasso回归中的正则化类似:传送门)这个主要是用在数据维度很高的情况下,可以提高运行速度。

调整max_depth 和 min_child_weight

使用网格搜索

GridSearchCV:

estimator: 分类器

param_grid: 参数值

cv: 交叉验证参数,默认None,使用三折交叉验证。指定fold数量,默认为3,也可以是yield训练/测试数据的生成器。

njobs: 线程为4

verbose:10输出进度

jupter 在n_jobs=4 不知为啥不输出进度 设置成1 即可输出

from sklearn.model_selection import GridSearchCV
param_test1 = {
'max_depth':list(range(3,10,2)),
'min_child_weight':list(range(1,6,2))
}
gsearch1 = GridSearchCV(
​
estimator = XGBClassifier( learning_rate =0.1, n_estimators=20, max_depth=5,min_child_weight=1, gamma=0, subsample=0.8, colsample_bytree=0.8,
objective= 'binary:logistic', nthread=4, scale_pos_weight=1, seed=27), 

param_grid = param_test1,

# scoring='roc_auc',

n_jobs=1,

verbose=10,

cv=5)

gsearch1.fit(train[predictors],train[target])
​
gsearch1.best_params_

输出为: {'max_depth': 3, 'min_child_weight': 5}

因此 在 max_depth: 2,3,4. 及 min_child_weight:4,5,6 中搜索

进一步搜索

param_test2 = {
'max_depth':list(range(2,4,1)),
'min_child_weight':list(range(4,6,1))
}
gsearch2 = GridSearchCV(
​
estimator =xgb.XGBRegressor(max_depth=6,learning_rate=0.05,n_estimators=100,randam_state=42),
param_grid = param_test2,

n_jobs=1,
verbose=10,
cv=5)

gsearch2.fit(df6.drop(['label','cust_wid'], axis=1), df6['label'])
​
gsearch2.best_params_
​

搜索下来 最优的依然是 {'max_depth': 3, 'min_child_weight': 5}

调整gamma

gamma 从 0 到0.5

param_test3 = {
'gamma':[i/10.0 for i in range(0,5)]
}
gsearch3 = GridSearchCV(
​
estimator =xgb.XGBRegressor(max_depth=3,learning_rate=0.05,min_child_weight=5,n_estimators=100,randam_state=42),
param_grid = param_test3,

n_jobs=1,
verbose=10,
cv=5)

gsearch3.fit(df6.drop(['label','cust_wid'], axis=1), df6['label'])

最优Gamma:0.4

调整subsample 和colsample_bytree

param_test4 = {
'subsample':[i/100.0 for i in range(75,100,5)],
'colsample_bytree':[i/100.0 for i in range(75,100,5)]
}
gsearch4 = GridSearchCV(
​
estimator =xgb.XGBRegressor(max_depth=3,learning_rate=0.05,min_child_weight=5,n_estimators=100,randam_state=42),
param_grid = param_test4,

n_jobs=1,
verbose=10,
cv=5)

gsearch4.fit(df6.drop(['label','cust_wid'], axis=1), df6['label'])

输出最优{'colsample_bytree': 0.85, 'subsample': 0.75}

调整正则化参数

param_test5 = {
'reg_alpha':[1e-5, 1e-2, 0.1, 1, 100]
}
​
gsearch5 = GridSearchCV(
​
estimator =xgb.XGBRegressor(max_depth=3,learning_rate=0.05,min_child_weight=5,n_estimators=100,randam_state=42,colsample_bytree=0.85, subsample=0.75),
param_grid = param_test5,

n_jobs=1,
verbose=10,
cv=5)

gsearch5.fit(df6.drop(['label','cust_wid'], axis=1), df6['label'])
​

输出{'reg_alpha': 100}

调整学习率

param_test6 = {
'learning_rate':[0.005,0.01, 0.05, 0.1,0.5,1]
}
​
gsearch6 = GridSearchCV(
​
estimator =xgb.XGBRegressor(max_depth=3,learning_rate=0.05,min_child_weight=5,n_estimators=100,randam_state=42,colsample_bytree=0.85, subsample=0.75),
param_grid = param_test6,

n_jobs=1,
verbose=10,
cv=5)

gsearch6.fit(df6.drop(['label','cust_wid'], axis=1), df6['label'])

学习率最优: {'learning_rate': 0.05}

得到最优的模型 -- 结果

最终 结果提升了0.001 哈哈哈哈

名次从103到96上升了7名 感觉还是这句话

我想要给大家说明的是:不要幻想仅仅通过参数调优或者换一个稍微更好的模型使得最终结果有巨大的飞跃。要想最后的结果有巨大的提升,可以通过特征工程、模型集成来实现。

pred_y=model2.predict(df7.drop(['label','cust_wid'], axis=1))
y_pred=pred_y.astype(int)
np.save("xgboost_best",y_pred)

到了这里,关于xgboost的调优的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 做程序员累了想要转行?我想给大家分享一下看法

    今天早上起床时,我看到有粉丝评论说关于程序员的话题,如果做着觉得累了,就会觉得自己不适合这个工作,想转行。我想给大家分享一下我的看法。 在我刚开始工作时,有人说我不适合做这个工作,但是我坚持了下来,做了3年。一开始,我学习的专业技术上还可以,但

    2023年04月19日
    浏览(45)
  • 作为一名普通的java程序员,我想和大家分享一下4年来的工作内容

    我是16届毕业生,我的第一份工作是做外包,第一年的时间里测试偏多,比如用Excel文档生成测试代码进行单元测试,也会写一些简单的增删改查,以及用shell处理数据,还有一些纯测试的工作,比如点页面啊截图。到了第二年,开发的工作也变得多了一些,但大部分还是增删

    2024年02月05日
    浏览(53)
  • XGBoost超参数调优指南

    本文将详细解释XGBoost中十个最常用超参数的介绍,功能和值范围,及如何使用Optuna进行超参数调优。 对于XGBoost来说,默认的超参数是可以正常运行的,但是如果你想获得最佳的效果,那么就需要自行调整一些超参数来匹配你的数据,以下参数对于XGBoost非常重要: eta num_boos

    2024年02月09日
    浏览(35)
  • 经实测利用POSTMAN根本无法进行并发测试,大家不要再被一些搬运工给误导了

    以下为我的实测记录 一、先上我测试的接口代码,就是一个redis的tryLock分布式锁的获取,接口在获取到锁后,线程sleep了5秒,此时线程是不释放锁的,那按道理第二个请求在这个时间进来,是获取不到锁的,但结果却不是这样的 二、按照网上的那些博文,postman操作步骤如下

    2024年02月11日
    浏览(48)
  • Linux 内核调优部分参数说明

    表示尽量使用内存,减少使用磁盘 swap 交换分区,内存速度明显高于磁盘一个数量级。 内存分配策略,Redis 持久化存储需设置值为1。 0:表示内核将检查是否有足够的可用内存供应用进程使用;如果有足够的可用内存,内存申请允许;否则,内存申请失败,并把错误返回给应

    2023年04月25日
    浏览(61)
  • 结合案例详细说明Spark的部分调优手段

    当谈到优化 Apache Spark 应用程序时,有一些更加详细和具体的优化策略和技术,可以帮助提高性能并最大化集群资源利用。以下是更详细的 Spark 调优方法: 资源配置与管理 : 内存调优 :合理设置 Executor 和 Driver 的内存分配,通过 spark.executor.memory 和 spark.driver.memory 参数调整

    2024年02月02日
    浏览(49)
  • 柏林噪声分形&幻想大陆地图生成

    之前介绍过perlin噪声的实现,现在应用实践一下——程序化生成幻想大陆 这里使用的是perlin噪声倍频技术(也称分形噪声),详情传送门:柏林噪声算法 代码示例使用的是shadertoy的语法规则,shandertoy传送门:ShaderToy 地形轮廓的生成主要依靠噪声,来看倍频相关代码(for迭代

    2024年02月07日
    浏览(45)
  • 在 Blender 和 3DCoat 中创建风格化的幻想屋

    今天云渲染小编给大家带来的是CG艺术家Brian Nguyen 最近的项目“一个风格化的幻想屋”幕后制作,讨论了 Blender 中的建模过程和 3DCoat 中的纹理过程,并详细介绍了如何设置灯光和K动画。 我是 Brian Nguyen,程式化的 3D 艺术家,一个喜欢幻想和可爱、怪异、狂野和美好事物的人

    2024年02月11日
    浏览(88)
  • 在 Blender、ZBrush 和 Substance 3D Painter 中创建幻想角色

    今天瑞云渲染小编给大家带来一篇关于Obafunso Dorgu 作者Serenity 项目背后的工作流程,告诉我们这些衣服是如何在 Marvelous Designer 中制作的,并提到了设置逼真的头发的重要事项。  大家好,我叫Obafunso Dorgu,我是一名自学成才的 3D 角色艺术家和一名学习图形设计的学生,我已

    2024年02月10日
    浏览(52)
  • 海量数据运维要给力,GaussDB(for Cassandra)来助力

    摘要: 应用运维管理平台(AOM)和Cassandra是两个不可分割的组成部分,它们共同构成了一个高效的解决方案,可以帮助企业在应用运维业务上取得巨大的优势。在这篇文章中,我们将介绍AOM和Cassandra的优势和特点,揭晓它们如何为企业保持市场竞争力的秘密。 本文分享自华

    2024年02月07日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包