【Kaggle】Intermediate Machine Learning(XGBoost + Data Leakage)

文章目录

    • 6. XGBoost
    • 7. Data Leakage 数据泄露

上一篇:【Kaggle】Intermediate Machine Learning(管道+交叉验证)

6. XGBoost

参考:《统计学习方法》提升方法(Boosting)

extreme gradient boosting “梯度提升”是指对损失函数使用梯度下降来确定此新模型中的参数

from xgboost import XGBRegressormy_model = XGBRegressor(n_estimators=500)
my_model.fit(X_train, y_train)from sklearn.metrics import mean_absolute_errorpredictions = my_model.predict(X_valid)
print("Mean Absolute Error: " + str(mean_absolute_error(predictions, y_valid)))

参数调整
XGBoost 具有一些可以极大地影响准确性和训练速度的参数

  • n_estimators :等于我们包含在集合中的模型数量

值太低会导致拟合不足,导致训练数据和测试数据的预测不正确。

值太高会导致拟合过度,导致对训练数据的准确预测,但对测试数据的预测不准确

典型值范围是100-1000,尽管这在很大程度上取决于下面讨论的 learning_rate 参数

  • early_stopping_rounds :提供了一种自动为n_estimators查找理想值的方法。为n_estimators设置一个较高的值,然后使用early_stopping_rounds查找停止迭代的最佳时间是很明智的

设置early_stopping_rounds = 5是一个合理的选择。在这种情况下,连续5轮验证评分下降后停止

当使用early_stopping_rounds时,还需要预留一些数据来计算验证分数,这是通过设置eval_set参数来完成的

my_model = XGBRegressor(n_estimators=500)
my_model.fit(X_train, y_train, early_stopping_rounds=5, eval_set=[(X_valid, y_valid)],verbose=False)
  • learning_rate
    与其简单地将每个组件模型的预测相加即可得到预测,还可以在将每个模型的预测相加之前将其乘以一小数(称为学习率)

这意味着添加到集合中的每棵树对我们的帮助都会有所减少
因此,可以为n_estimators设置更高的值而不会过度拟合
如果我们使用 early stopping,则会自动确定适当的 tree 的数量

通常,学习率较高 且 estimators 多,会生成更精确的模型,但迭代次数较多,花费较长时间,默认情况下,XGBoost 设置 learning_rate = 0.1

my_model = XGBRegressor(n_estimators=1000, learning_rate=0.05)
my_model.fit(X_train, y_train, early_stopping_rounds=5, eval_set=[(X_valid, y_valid)], verbose=False)
  • n_jobs:运行较大数据集,并行更快地构建模型

通常将参数 n_jobs 设置为等于计算机上的内核数
在较小的数据集上,这无济于事
但是,在大型数据集中很有用,否则将花费很长时间在fit命令中等待

my_model = XGBRegressor(n_estimators=1000, learning_rate=0.05, n_jobs=4)
my_model.fit(X_train, y_train, early_stopping_rounds=5, eval_set=[(X_valid, y_valid)], verbose=False)

7. Data Leakage 数据泄露

Data Leakage 相关博文

泄漏会导致模型看起来很准确,当开始对模型进行决策为止,然后模型变得非常不准确

泄漏有两种主要类型:目标泄漏 target leakage训练-测试污染train-test contamination

  • 目标泄漏 target leakage
    在这里插入图片描述

例子:人们得了肺炎后要服用抗生素药物才能康复

原始数据显示这些列之间存在很强的关系,但是在确定got_pneumonia的值后,took_antibiotic_medicine经常更改。这是目标泄漏,因为我们要预测的是 是否会患肺炎,是否吃药是在得了肺炎之后的选择,会不确定,因果关系反了

该模型将发现,对于took_antibiotic_medicine值为False的任何人都没有肺炎。由于验证数据与训练数据来自同一来源,模型将具有很高的验证(或交叉验证)分数

但是,此模型随后在现实世界中部署时将非常不准确,因为有些患有肺炎的患者也不会接受抗生素治疗
为防止此类数据泄漏,应当将该特征数据排除

  • 训练-测试污染 Train-Test Contamination

验证旨在衡量模型如何处理之前未考虑过的数据

例如,在调用train_test_split()之前进行了预处理(例如 fitting an Imputer)。模型可能会获得良好的验证评分,但是在部署模型进行决策时却表现不佳

将验证数据或测试数据中的数据合并到了如何进行预测中,因此即使无法将其推广到新数据,该方法也可能会对特定数据表现良好。当执行更复杂的特征工程时,此问题变得更加微妙(更加危险)


例子:信用卡

没有信用卡的人 —> 100%没有消费支出
有信用卡的人 —> 2%的人,没有消费记录

根据此特征来预测是否会发放信用卡申请,正确率98%
但是有部分持有信用卡的人可能平时没有消费,并且统计出来的费用是这张申请的信用卡的消费,还是申请这张信用卡之前的消费呢?这些都不是很清楚,这就可能造成很大偏差

所以这种可能造成很大偏差的特征要弃用,或者非常谨慎

# Drop leaky predictors from dataset
potential_leaks = ['expenditure', 'share', 'active', 'majorcards']
X2 = X.drop(potential_leaks, axis=1)# Evaluate the model with leaky predictors removed
cv_scores = cross_val_score(my_pipeline, X2, y, cv=5,scoring='accuracy')print("Cross-val accuracy: %f" % cv_scores.mean())

总结:

  • 仔细分离训练和验证数据可以防止Train-Test Contamination,并且Pipeline可以帮助实现这种分离
  • 谨慎,常识和数据探索相结合可以帮助识别target leakage
  • 思考数据泄露问题,本质上需要考虑特征产生的时间顺序:
    如果该特征在你做出类型判断之前可以确定,那么就可以作为类型判断的依据;
    如果该特征必须在你做出类型判断之后才可以确定,那么就不可以作为类型判断的依据,否则就是因果倒置

完成了课程,获得证书鼓励,🚀🚀🚀 加油
在这里插入图片描述
上一篇:【Kaggle】Intermediate Machine Learning(管道+交叉验证)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/475872.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

silverlight(一.安装和新建项目)

1.下载安装silverlight:Microsoft Silverlight™ 3 Tools (安装之前需要升级VS2008到SP1) 2.和多数人一样我的程序新建好运行调试报错,提示“未安装silverlight托管调试包”,后来我使用VS2010新建的时候提示安装silver…

php webview,Android:控件WebView显示网页 – tinyphp – 博客园

WebView可以使得网页轻松的内嵌到app里,还可以直接跟js相互调用。webview有两个方法:setWebChromeClient 和 setWebClientsetWebClient:主要处理解析,渲染网页等浏览器做的事情setWebChromeClient:辅助WebView处理Java…

LeetCode 207. 课程表(拓扑排序)

1. 题目 你这个学期必须选修 numCourse 门课程,记为 0 到 numCourse-1 。 在选修某些课程之前需要一些先修课程。 例如,想要学习课程 0 ,你需要先完成课程 1 ,我们用一个匹配来表示他们:[0,1] 给定课程总量以及它们…

php 将颜色透明度,css中如何使颜色透明度

css中使颜色透明度的方法:首先创建一个HTML示例文件;然后创建一个div;最后通过“opacity:0.5;”属性设置元素背景的透明度即可。本教程操作环境:windows7系统、css3、thinkpad t480电脑。CSS颜色透明度一、设置元素背景透明度opac…

php框架laravel百科,PHP 的Laravel 框架

在windows下,搭建PHP的Laravel框架很简单.先把PHP的安装目录 加入到环境变量里(在命令行能访问到php -v 就说明可以了)然后 这些是需求的环境PHP> 7.1.3 (不用说了)OpenSSL PHP扩展(用composer安装器可以自动给你配置的,以下同理,如果没配置,可以自行去php.ini里面把扩展前…

LeetCode 332. 重新安排行程(欧拉路径)

1. 题目 给定一个机票的字符串二维数组 [from, to],子数组中的两个成员分别表示飞机出发和降落的机场地点,对该行程进行重新规划排序。 所有这些机票都属于一个从JFK(肯尼迪国际机场)出发的先生,所以该行程必须从 JFK…

seaborn绘图入门1(lineplot+barplot+heatmap+scatterplot)

文章目录1. lineplot 线图2. barplot 、heatmap 条形图、热图2.1 barplot,条形图2.2 heatmap,热图3. scatterplot、regplot 散点图3.1 scatterplot,普通散点图3.2 regplot,带回归线3.3 scatterplot(x,y,hue) ,hue带第三…

matlab系统的初始条件,指定总线信号的初始条件

创建用于初始化的非完全结构体非完全初始条件结构体为总线的部分元素提供初始值。如果您在仿真过程中使用非完全初始条件结构体,Simulink 将创建一个完全的初始条件结构体来表示总线的所有元素。对于非完全初始条件结构体没有显式指定值的每个元素,Simul…

seaborn绘图入门2(distplot+kdeplot+jointplot+set_style)

文章目录4. distplot(a,kdeFalse),直方图5. kdeplot,密度图5.1 kdeplot,一维密度图5.2 jointplot(x,y,kindkde),二维密度图6. set_style(),设置底色learn from https://www.kaggle.com/learn/data-visualization 上一…

帝国cms搜索php分页,帝国cms V7.2自定义分页(列表分页,内容分页)样式步骤

【1】自己修改帝国cms默认的分页样式(css),这样做的好处是你不用去改动帝国的核心文件,方便以后升级。【2】自己动手去修改帝国的分页(phpcss),帝国的分页在e>class>下的t_functions.php这个文件里。列表页模板[!--show.page--]:分页导…

python怎么写方程条件,条件方程曲线拟合

在xmin处多项式的导数0的条件可以表示为一个简单的约束,这意味着变量p2,p3,和{}实际上并不独立。衍生条件是p2 2*p3*xmin 3*p4*xmin**2 0其中xmin是xdata的最小值。此外,xmin将在fit之前知道(如果不一定是在编写脚本时)&#x…

LeetCode 516. 最长回文子序列(动态规划)

1. 题目 给定一个字符串s,找到其中最长的回文子序列。可以假设s的最大长度为1000。 示例 1: 输入: "bbbab" 输出: 4 一个可能的最长回文子序列为 "bbbb"。示例 2: 输入: "cbbd" 输出: 2 一个可能的最长回文子序列为 "bb"…

LeetCode 第 26 场双周赛(363/1971,前18.4%)

文章目录1. 比赛结果2. 题目1. LeetCode 5396. 连续字符 easy2. LeetCode 5397. 最简分数 medium3. LeetCode 5398. 统计二叉树中好节点的数目 medium4. LeetCode 5399. 数位成本和为目标值的最大数字 hard1. 比赛结果 做出来了 1、2、3 题,19分钟做出来3题&#x…

2011年值得注意的5个设计趋势

在过去的12个月里,我们已经看到Web设计领域发生了许多变化。 包括智能手机和平板电脑(如iPad)这些移动设备的日渐普及已经改变了用户对内容的访问和交互方式。还有,像HTML5、web字体和CSS这些新标准的正式通过意味着越来越多的用户可以使用网络上最新最强…

linux内核线程绑定到单个核,linux 将进程或者线程绑定到指定的cpu上

基本概念cpu亲和性(affinity)CPU的亲和性, 就是进程要在指定的 CPU 上尽量长时间地运行而不被迁移到其他处理器,也称为CPU关联性;再简单的点的描述就将指定的进程或线程绑定到相应的cpu上;在多核运行的机器上,每个CPU本…

LeetCode 1453. 圆形靶内的最大飞镖数量(几何题)

1. 题目 墙壁上挂着一个圆形的飞镖靶。现在请你蒙着眼睛向靶上投掷飞镖。 投掷到墙上的飞镖用二维平面上的点坐标数组表示。飞镖靶的半径为 r 。 请返回能够落在 任意 半径为 r 的圆形靶内或靶上的最大飞镖数。 示例 1: 输入:points [[-2,0],[2,0…

Pandas入门1(DataFrame+Series读写/Index+Select+Assign)

文章目录1. Creating, Reading and Writing1.1 DataFrame 数据框架1.2 Series 序列1.3 Reading 读取数据2. Indexing, Selecting, Assigning2.1 类python方式的访问2.2 Pandas特有的访问方式2.2.1 iloc 基于index访问2.2.2 loc 基于label标签访问2.3 set_index() 设置索引列2.4…

关于Visual C#.NET数据库开发经典案例解析(附光盘两张)(珍藏版)—的读后感...

关于Visual C#.NET数据库开发经典案例解析(附光盘两张)(珍藏版)— 评论读后感:里面的内容很经典,很实用读后感:给初学者是好,但是是比较旧的了!VS2003 C/S的读后感&#…

LeetCode 372. 超级次方(快速幂)

1. 题目 你的任务是计算 ab 对 1337 取模,a 是一个正整数,b 是一个非常大的正整数且会以数组形式给出。 示例 1: 输入: a 2, b [3] 输出: 8示例 2: 输入: a 2, b [1,0] 输出: 1024来源:力扣(LeetCode) 链接&…

c#让电脑锁定、注销、关机

代码 usingSystem;usingSystem.Collections.Generic;usingSystem.ComponentModel;usingSystem.Data;usingSystem.Drawing;usingSystem.Linq;usingSystem.Text;usingSystem.Windows.Forms;usingMicrosoft.Win32;usingSystem.Runtime.InteropServices;usingSystem.IO;usingSystem…