xgboost

Boosting算法的前世今生(下篇)

主宰稳场 提交于 2020-04-24 23:26:44
微信公众号: AIKaggle 欢迎建议和拍砖,若需要资源,请公众号留言; 如果你觉得AIKaggle对你有帮助,欢迎赞赏 Boosting算法的前世今生(下篇) [TOC] 本系列文章将会梳理Boosting算法的发展,介绍Boosting算法族的原理,框架,推导等,Boosting算法的前世今生(上篇)介绍了AdaBoost算法和梯度提升树算法,中篇详细介绍了陈天奇教主提出的XGBoost算法,下篇(本文)将会介绍LightGBM算法,CATBoost算法。LightGBM算法由Microsoft Research提出,主打梯度提升算法的轻量级实现,他的两个创新点在于基于单边梯度的采样算法(GOSS)和互斥系数特征合并(EFB)。而CatBoost是由俄罗斯Yandex公司提出的,他嵌入了自动将类别特征处理为数值型特征的创新型算法,并且使用完全对称树作为基模型。如果对机器学习算法和实战案例感兴趣,也可关注公众号:AIKaggle获取算法动态 引言 传统的boosting算法(如GBDT和XGBoost)已经有相当好的效率,但是在如今的大样本和高维度的环境下,传统的boosting似乎在效率和可扩展性上不能满足现在的需求了,主要的原因就是传统的boosting算法需要对每一个特征都要扫描所有的样本点来选择最好的切分点,这是非常的耗时。 LightGBM 的提出

梯度提升树之DBDT算法的介绍

落花浮王杯 提交于 2020-04-24 23:10:05
主要内容: 1.梯度提升决策树(GBDT)原理 1.1模型介绍 2.GBDT算法步骤 2.1GBDT算法在分类问题上的操作步骤 2.2GBDT算法在预测问题上的操作步骤 2.3GBDT函数介绍 3.GBDT示例 4.GBDT特点及应用 5.GBDT算法的应用——信用卡是否违约的识别 1.梯度提升决策树(GBDT)原理 决策树分为回归树与分类树,分类树的结果不能进行加减运算,回归树的结果是数值,可以进行加减运算,比如身高和年龄等。分类树的损失函数一般用最大熵,回归树的损失函数一般永均方差。GBDT中的决策树是回归树。 如何在不改变原有模型的结构的基础上提升模型的拟合能力?增加一个新的模型,拟合其残差。 1.1模型介绍 梯度提升树算法实际上是提升算法的扩展版,在原始的提升算法中,如果损失函数为平方损失或指数损失,求解损失函数的最小值问题会非常简单,但如果损失函数为更一般的函数(如绝对值损失函数或Huber损失函数等),目标值的求解就会相对复杂很多。 梯度提升算法,是在第𝑚轮基础模型中,利用损失函数的负梯度值作为该轮基础模型损失值的近似,并利用这个近似值构建下一轮基础模型。利用损失函数的负梯度值近似残差的计算就是梯度提升算法在提升算法上的扩展,这样的扩展使得目标函数的求解更为方便。 2.GBDT算法步骤 2.1GBDT算法在分类问题上的操作步骤 2.2GBDT算法在预测问题上的操作步骤

数据竞赛实战(4)——交通事故理赔审核

痞子三分冷 提交于 2020-04-24 23:03:47
前言 1,背景介绍   在交通摩擦(事故)发生后,理赔员会前往现场勘察、采集信息,这些信息往往影响着车主是否能够得到保险公司的理赔。训练集数据包括理赔人员在现场对该事故方采集的36条信息,信息已经被编码,以及该事故方最终是否获得理赔。我们的任务是根据这36条信息预测该事故方没有被理赔的概率 2,任务类型   入门二元分类模型 3,数据文件说明 train.csv        训练集    文件大小为15.6MB test.csv      预测集   文件大小为6.1MB sample_submit.csv   提交示例 文件大小为1.4MB 4,数据变量说明    训练集中共有200000条样本,预测集中有80000条样本。 5,评估方法   你的提交结果为每个测试样本未通过审核的概率,也就是Evaluation为1的概率。评价方法为精度-召回曲线下面积(Precision-Recall AUC),以下简称PR-AUC。   PR-AUC的取值范围是0到1。越接近1,说明模型预测的结果越接近真实结果。 5.1 精度和召回的定义和计算方式如下:  可以参考博文: 机器学习笔记:常用评估方法   首先,我们先从混淆矩阵聊起,混淆矩阵是用来总结一个分类器结果的矩阵,对于K元分类,其实它就是一个 k * k 的表格,用来记录分类器的预测结果。   对于最常见的二元分类来说

使用Anaconda3的Docker镜像

徘徊边缘 提交于 2020-04-24 03:30:44
假设本地 Ubuntu 服务器已经安装好了Docker,这里讲述一下如何开始运行Anaconda3的Docker镜像: 1. 搜索镜像 搜索我们想要的anaconda镜像: docker search anaconda 2. 拉取镜像 我们决定拉anaconda3官方镜像,即 continuumio/anaconda3 这个镜像: docker pull continuumio/anaconda3 注意,这个镜像大小接近1GB,所以时间比较长。 3.运行镜像,指定网络端口 运行 anaconda3 镜像的bash命令行,其中指定容器到宿主机的端口映射: docker run -i -t -p 12345 : 8888 continuumio/anaconda3 /bin/bash 其中: -i: 是 以交互模式运行容器,通常与 -t 同时使用; -t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用; -p: 指定端口映射,格式为:主机(宿主)端口:容器端口 具体数字随便写的... 即可进入anaconda3的命令行。 4. 检查Python的版本 python 当前是3.7.3版本 5. 查看已经安装的库 有两种查看方法,pip 和 conda 均可 conda list pip list 6. 安装xgboost(或者其他包) 首先,原始镜像应该是不带xgboost的

双向LSTM在时间序列异常值检测的应用

别等时光非礼了梦想. 提交于 2020-04-20 01:41:31
最近在做时间序列异常值检测,除了常规的统计学算法以外,也想尝试通过机器学习或深度学习的方式去解决问题。   于是想,可不可以直接使用一个拟合效果非常棒的模型先去预测该时间序列的未来走势,再将预测后的值(predict_value)当前值(value)做对比,只要超过一定阈值就判定该值为异常值。   尝试了xgboost、ARIMA 和 LSTM 三者中,拟合效果最好的是LSTM,简单记录一下建模和调参过程。   1.加载数据:源数据结构如下,只要 y 值。          2.加载数据,由于我这里代表时间的字段是从piontStart里面拿出去,并且需要去掉最后'000'再用time.localtime()转换成时间戳,不是重点,简单看一下就行。       3.准备训练和测试数据         4.建模阶段                5.训练阶段            这里有我之前调参时的Train_Score 和 Test_Score 对比记录                   可以看到,使用双层结构的 LSTM 有非常严重的过拟合现象发生,单层LSTM已经可以很好的对时间序列进行拟合       batch_size 的大小也会对模型的收敛产生不小的影响 look_back(即 time_step) 的大小会对过拟合的程度造成很大影响,如果步长取的太短也会造成过拟合

双向LSTM在时间序列异常值检测的应用

随声附和 提交于 2020-04-20 00:36:21
最近在做时间序列异常值检测,除了常规的统计学算法以外,也想尝试通过机器学习或深度学习的方式去解决问题。   于是想,可不可以直接使用一个拟合效果非常棒的模型先去预测该时间序列的未来走势,再将预测后的值(predict_value)当前值(value)做对比,只要超过一定阈值就判定该值为异常值。   尝试了xgboost、ARIMA 和 LSTM 三者中,拟合效果最好的是LSTM,简单记录一下建模和调参过程。   1.加载数据:源数据结构如下,只要 y 值。          2.加载数据,由于我这里代表时间的字段是从piontStart里面拿出去,并且需要去掉最后'000'再用time.localtime()转换成时间戳,不是重点,简单看一下就行。       3.准备训练和测试数据         4.建模阶段                5.训练阶段            这里有我之前调参时的Train_Score 和 Test_Score 对比记录                   可以看到,使用双层结构的 LSTM 有非常严重的过拟合现象发生,单层LSTM已经可以很好的对时间序列进行拟合       batch_size 的大小也会对模型的收敛产生不小的影响 look_back(即 time_step) 的大小会对过拟合的程度造成很大影响,如果步长取的太短也会造成过拟合

数据挖掘比赛/项目全流程介绍

梦想的初衷 提交于 2020-04-19 11:56:54
【说在前面】本人博客新手一枚,象牙塔的老白,职业场的小白。以下内容仅为个人见解,欢迎批评指正,不喜勿喷![握手][握手] 1. 数据预处理 1.1 选择数据样本(企业级应用) 例如客观选择某一时间段内的所有样本集合等(避免人为主观选择) 例如在评价样本中去除恶意/随意评价样本等(避免错误样本的干扰) 1.2 可视化特征分布 dataframe.info/dataframe.describe等(查看数据样本的整体分布情况) dataframe.plot/matplotlib/seaborn等(包括柱状图/散点图/折线图等) 1.3 缺失值处理 如果某样本的缺失记录占比较大: 可统计为“缺失量” 可直接删除该样本 如果某特征的缺失记录占比较大: 可二值化为“有/无” 可直接删除该样本 如果某样本/特征的缺失记录占比较小: 可根据领域知识补全 数值型:可根据均值/众数/模型预测等补全 类别型:可以定义为新的类别等 可不处理,有些模型对缺失值不敏感:例如树模型/神经网络等 1.4 异常值处理 异常值判定:需根据数据分布/业务场景等 RobustScaler/robust_scale等 之后会推出异常值检测专题 可直接删除该样本 可采用缺失值的处理方式 注意数据不一致问题 注意数值型可用盖帽/对数变换等压缩 可不处理,有些模型对异常值不敏感:例如KNN/随机森林等 2. 特征工程 2.1

11种离散型变量编码方式及效果对比

早过忘川 提交于 2020-04-18 13:34:22
首先介绍一个关于离散型编码的Python库,里面封装了十几种(包括文中的所有方法)对于离散型特征的编码方法,接口接近于Sklearn通用接口,非常实用。下面是这个库的链接: Category Encoders 1. Label Encoder / Ordered Encoder 这个编码方式非常容易理解,就是把所有的相同类别的特征编码成同一个值,例如女=0,男=1,狗狗=2,所以最后编码的特征值是在[0, n-1]之间的整数。 这个编码的缺点在于它随机的给特征排序了,会给这个特征增加不存在的顺序关系,也就是增加了噪声。假设预测的目标是购买力,那么真实Label的排序显然是 女 > 狗狗 > 男,与我们编码后特征的顺序不存在相关性。 2. OneHot Encoder / Dummy Encoder / OHE 大家熟知的OneHot方法就避免了对特征排序的缺点。对于一列有N种取值的特征,Onehot方法会创建出对应的N列特征,其中每列代表该样本是否为该特征的某一种取值。因为生成的每一列有值的都是1,所以这个方法起名为Onehot特征。Dummy特征也是一样,只是少了一列,因为第N列可以看做是前N-1列的线性组合。但是在离散特征的特征值过多的时候不宜使用,因为会导致生成特征的数量太多且过于稀疏。 3. Sum Encoder (Deviation Encoder, Effect

xgboost in pysparkling water throws an error: XGBoost is not available on all nodes

那年仲夏 提交于 2020-04-18 05:46:08
问题 I am trying to run xgboost from H2O package in a spark cluster. I am using h2o on an on-prem cluster on a Red Hat Enterprise Linux Server, versin:'3.10.0-1062.9.1.el7.x86_64'. I start H2O cluster inside the Spark environment .appName('APP1')\ .config('spark.executor.memory', '15g')\ .config('spark.executor.cores', '8')\ .config('spark.executor.instances','5')\ .config('spark.yarn.queue', "DS")\ .config('spark.yarn.executor.memoryOverhead', '1096')\ .enableHiveSupport()\ .getOrCreate() from

《Python数据分析与机器学习实战-唐宇迪》读书笔记第7章--决策树

本秂侑毒 提交于 2020-04-13 20:18:34
【今日推荐】:为什么一到面试就懵逼!>>> python数据分析个人学习读书笔记-目录索引 第7章决策树   决策树算法是机器学习中最经典的算法之一。大家可能听过一些高深的算法,例如在竞赛中大杀四方的Xgboost、各种集成策略等,其实它们都是基于树模型来建立的,掌握基本的树模型后,再去理解集成算法就容易多了,本章介绍树模型的构造方法以及其中涉及的剪枝策略。 7.1决策树原理   先来看一下决策树能完成什么样的任务。假设一个家庭中有5名成员:爷爷、奶奶、妈妈、小男孩和小女孩。现在想做一个调查:这5个人中谁喜欢玩游戏,这里使用决策树演示这个过程,如图7-1所示。      图7-1 决策树分类方法   开始的时候,所有人都属于一个集合。第一步,依据年龄确定哪些人喜欢玩游戏,可以设定一个条件,如果年龄大于15岁,就不喜欢玩游戏;如果年龄小于15岁,则可能喜欢玩游戏。这样就把5个成员分成两部分,一部分是右边分支,包含爷爷、奶奶和妈妈;另一部分是左边分支,包含小男孩和小女孩。此时可以认为左边分支的人喜欢玩游戏,还有待挖掘。右边分支的人不喜欢玩游戏,已经淘汰出局。   对于左边这个分支,可以再进行细分,也就是进行第二步划分,这次划分的条件是性别。如果是男性,就喜欢玩游戏;如果是女性,则不喜欢玩游戏。这样就把小男孩和小女孩这个集合再次分成左右两部分。左边为喜欢玩游戏的小男孩