论XGBOOST科学调参
XGBOOST的威力不用赘述,反正我是离不开它了。
具体XGBOOST的原理可以参见之前的文章《比XGBOOST更快--LightGBM介绍》
今天说下如何调参。
bias-variance trade-off
xgboost一共有几十个参数:
http://xgboost.readthedocs.io/en/latest/parameter.html
中文版解释:
http://blog.csdn.net/zc02051126/article/details/46711047
文艺青年的调参一般这样的:
1. 设定参数{parm},评判指标{metrics};
2. 根据{metrics}在验证集上的大小,确定树的棵树n_estimators;
3. 采用参数{parm}、n_estimators,训练模型,并应用到测试集
一个字:糙!(kuai)
数据挖掘师的调参一般这样的:
设定基础参数{parm0},基础评判指标{metrics0};
在训练集上做cross-validation,做训练集/交叉验证集上偏差/方差与树棵树的关系图;
判断模型是过拟合 or 欠拟合,更新相应参数{parm1};
重复2、3步,确定树的棵树n_estimators;
采用参数{parm1}、n_estimators,训练模型,并应用到测试集;
数据集大小:70000*100,随机准确率 0.17%
在设置了基础参数,设定了树的范围后,可以看到模型在训练集和交叉验证集上的效果是这样子滴:
阴影部分,表示的是模型的方差
从上图,可以得出以下几个结论:
- 验证集上偏差最小&方差最小:n_estimators=66
- 训练集和验证集误差较大:过拟合-----模型过于复杂
- 方差较大----模型过于复杂
这符合下面这个图
以上特征,都表明我们需要降低模型复杂程度,有哪些参数可以调整呢:
- 直接降低模型复杂度
max_depth、min_child_weight、gamma
- 随机化
subsample、colsample_bytree
- 正则化
lambda、alpha
通过,grid-search,再调整了以上的参数后,如下图。最佳trade-off点的variance从0.361降低到0.316,auc_mean从0.8312降低到0.8308。
P-R的提升还是比较明显的:
还有,先粗调,再微调
-- 降低learning_rate,当然同时,提高n_estimators
2. 非平衡数据集怎么办
-- 想办法弄到更多的数据
-- 想办法把数据弄平衡
-- 利用smote等算法来过采样/欠采样
-- 设置weight(初始化DMatrix时)
-- 使用更好的metrics:auc、f1
-- min_child_weight 设的小一点
-- scale_pos_weight = 0值的样本数量/1值的样本数量
-- max_delta_step
-- 自定义评价函数
xgb.train(params, dtrain, num_rounds, watchlist, feval=misclassified, maximize=False)
def misclassified(pred_probs, dtrain):
labels = dtrain.get_label() # obtain true labels
preds = pred_probs > 0.5 # obtain predicted values
return 'misclassified', np.sum(labels != preds)
对数据感兴趣的小伙伴,欢迎交流,微信公共号:一白侃数
论XGBOOST科学调参的更多相关文章
- xgboost使用调参
欢迎关注博主主页,学习python视频资源 https://blog.csdn.net/q383700092/article/details/53763328 调参后结果非常理想 from sklea ...
- xgboost&lightgbm调参指南
本文重点阐述了xgboost和lightgbm的主要参数和调参技巧,其理论部分可见集成学习,以下内容主要来自xgboost和LightGBM的官方文档. xgboost Xgboost参数主要分为三大 ...
- xgboost 并行调参
Parallelism When Cross Validating XGBoost Models This raises the question as to how cross validation ...
- xgboost 完全调参指南
http://www.2cto.com/kf/201607/528771.html xgboost: https://www.analyticsvidhya.com/blog/2016/03/comp ...
- Xgboost调参总结
一.参数速查 参数分为三类: 通用参数:宏观函数控制. Booster参数:控制每一步的booster(tree/regression). 学习目标参数:控制训练目标的表现. 二.回归 from xg ...
- xgboost的sklearn接口和原生接口参数详细说明及调参指点
from xgboost import XGBClassifier XGBClassifier(max_depth=3,learning_rate=0.1,n_estimators=100,silen ...
- xgboost入门与实战(实战调参篇)
https://blog.csdn.net/sb19931201/article/details/52577592 xgboost入门与实战(实战调参篇) 前言 前面几篇博文都在学习原理知识,是时候上 ...
- XGBOOST应用及调参示例
该示例所用的数据可从该链接下载,提取码为3y90,数据说明可参考该网页.该示例的“模型调参”这一部分引用了这篇博客的步骤. 数据前处理 导入数据 import pandas as pd import ...
- xgboost/gbdt在调参时为什么树的深度很少就能达到很高的精度?
问题: 用xgboost/gbdt在在调参的时候把树的最大深度调成6就有很高的精度了.但是用DecisionTree/RandomForest的时候需要把树的深度调到15或更高.用RandomFore ...
随机推荐
- [剑指offer]09用两个栈实现队列插入和删除操作,C++实现
原创博文,转载请注明出处! # 本文为牛客网<剑指offer>刷题笔记 1.题目 # 用两个栈实现队列的插入和删除操作 2.思路 栈服从先入后出的原则处理数据,队列服从先入先出的原则处理数 ...
- 实战:向GitHub提交代码时触发Jenkins自动构建
当我们提交代码到GitHub后,可以在Jenkins上执行构建,但是每次都要动手去执行略显麻烦,今天我们就来实战Jenkins的自动构建功能,每次提交代码到GitHub后,Jenkins会进行自动构建 ...
- my_itoa
#include <iostream> using namespace std; char *my_reverse(char* s) { char *p,*q; p=s;q=s; whil ...
- IOS SEL (@selector) 原理及使用总结(二)
SEL消息机制工作原理是什么 引用下面文章: 我们在之前有提到,一个类就像一个 C 结构.NSObject 声明了一个成员变量: isa. 由于 NSObject 是所有类的根类,所以所有的对象都会有 ...
- 【java基础】java中Object对象中的Hashcode方法的作用
以下是关于HashCode的官方文档定义: hashcode方法返回该对象的哈希码值.支持该方法是为哈希表提供一些优点,例如,java.util.Hashtable 提供的哈希表. hashCode ...
- Tencent Server Web 安装试用
Tencent Server Web 安装试用 私有环境搭建,使用docker-compose 进行memcache 安装 参考github 代码 https://github.com/rongfen ...
- 阿里云视频点播 php开发
先购买开通阿里云的<视频点播>服务,视频点播 可以购买套餐 ,我在项目中使用的是299套餐 开发前在<用户信息管理>生成Access Key Secret,开发密钥使用 阿里云 ...
- 让输入的字符转义成html实体的方法
使用 htmlspecialchars() 函数,代码不会执行,因为会被保存为转义代码 总结测试方法: https://www.cnblogs.com/kaibindirver/p/10321448. ...
- java项目-----客户端与客户端通信--实现群聊功能的代码
这是这个网络聊天室项目的原理图: 很简单,首先ABCD是4个客户端,当A发送信息给服务器,服务器实现以广播的形式把信息全发给每个人---群发群聊 客户端代码: package com.aa; impo ...
- 运维平台cmdb开发-day3
后台管理 1. 访问过程 我们在前面2天得到了各个客户端的资产数据信息,我们将各个这个数据打包发送到api,这个api其实就是django的url传参,之后按照数据的格式对比数据库增删改 2. 后台页 ...