xgb作为常用的集成模型,不仅是当前工业落地最常用的模型之一、而且几乎是风控面试的必考点,从gbdt到xgboost,有一个重要的新增特性就是模型可自行处理缺失值,减少我们在预处理过程中的工作量、不需要再进行缺失填充,极大地简化了我们建模流程。

那么xgb在训练和预测时是如何处理缺失值的呢?

先来看看xgboost数据集初始化或模型初始化接口中的missing参数解释,missing可以指定一个值来表示缺失值,即可以在这个参数位置指定缺失值的填充值,如-1、-999等。

默认值为np.nan(float类型),在使用默认值np.nan时即为保留缺失值不进行填充,此时模型会将缺失值作为一类值进行处理,具体处理包含两种情况、不同的情况处理方式也不同。

原文伪代码

通俗点介绍,其实存在两种情况:

(1)训练时,若特征m存在空值,当树按照特征m分裂时,先不考虑空值、按照m有值的序列选择最优分裂点进行分裂,然后再分别将空值样本带入左子节点和右子节点、计算两侧信息增益,保留整体信息增益较大的分裂方向,预测时空值样本也按照该方向进行分裂;

(2)训练时特征无空值,预测时空值样本默认分裂到左侧子节点(注意:易错点来了,默认方向左侧子节点!默认方向左侧子节点!默认方向左侧子节点!)

如下图所示,在展示xgboost的子树时,每个节点分裂的左侧分支均包含missing的缺失值部分、即默认缺失值分裂到左侧子节点。

附上xgb子树的可视化demo

1、导包

import re
import os
import pandas as pd
import numpy as np
import warnings
warnings.filterwarnings('ignore')
from sklearn.model_selection import train_test_split
from sklearn.metrics import roc_curve,roc_auc_score
import xgboost as xgb
from xgboost.sklearn import XGBClassifier
import lightgbm as lgb
import matplotlib.pyplot as plt
import gc
import pandas as pd
import numpy as np
import warnings
warnings.filterwarnings('ignore')
from sklearn.model_selection import train_test_split
from sklearn.metrics import roc_curve,roc_auc_score
import xgboost as xgb
import matplotlib.pyplot as plt

2、数据读取

df=pd.read_csv('E:/文件/train.csv')
print(df.shape)
df.head()

3、特征缺失值统计查看

def miss_sta_col(df):'''输入 df: 评估缺失的数据输出 缺失分布图'''miss_per = df.isnull().sum() / len(df)plt.figure(dpi=80, figsize=(7, 5))plt.bar(miss_per.index, miss_per.values * 100)# 添加数值标签for a, b in zip(miss_per.index, miss_per.values * 100):plt.text(a, int(b), int(b), ha='center', va='bottom')plt.title('Missing %')plt.ylim((0, 100))plt.xticks(rotation=30)plt.show()
df.loc[:,:'fea13'].pipe(miss_sta_col)

4、设置模型参数

params={'objective':'binary:logistic','eval_metric':'auc','n_estimators':500,'eta':0.03,'max_depth':3,'min_child_weight':100,'scale_pos_weight':1,'gamma':5,'reg_alpha':10,'reg_lambda':10,'subsample':0.7,'colsample_bytree':0.7,'seed':123
}

5、划分数据集并训练模型

x_train,x_test, y_train, y_test =train_test_split(df.drop(['id','isDefault'],axis=1)[col_list],df['isDefault'],test_size=0.3,random_state=1)# 转化数据集格式 xgb.DMatrix
dtrain = xgb.DMatrix(train[col_list], label = train['isDefault'])
dtest = xgb.DMatrix(test[col_list], label = test['isDefault'])model = xgb.train(params=params,dtrain=dtrain,
#           verbose_eval=True,evals=[(dtrain, "train"), (dtest, "valid")],
#           early_stopping_rounds=10,num_boost_round = 30)

6、子树可视化

xgb.to_graphviz(xgb_model, num_trees=0, rankdir='UT')

xgboost缺失值处理相关推荐

  1. XGBoost缺失值引发的问题及其深度分析 | CSDN博文精选

    作者 | 兆军(美团配送事业部算法平台团队技术专家) 来源 | 美团技术团队 (*点击阅读原文,查看美团技术团队更多文章)  背景 XGBoost模型作为机器学习中的一大"杀器", ...

  2. XGBoost缺失值引发的问题及其深度分析

    XGBoost缺失值引发的问题及其深度分析 2019年08月15日 作者: 李兆军 文章链接 3969字 8分钟阅读 1. 背景 XGBoost模型作为机器学习中的一大"杀器",被 ...

  3. Xgboost如何处理缺失值

    Xgboost Xgboost简介 Xgboost[1]是由陈天奇提出的一种集成学习方法,要想了解Xgboost,这里建议先了解决策树,再了解GBDT(Gradient boosting descen ...

  4. 数据分析利器:XGBoost算法最佳解析

    作者:symonxiong,腾讯 CDG 应用研究员 XGBoost是一种经典的集成式提升算法框架,具有训练效率高.预测效果好.可控参数多.使用方便等特性,是大数据分析领域的一柄利器.在实际业务中,X ...

  5. 我的机器学习入门之路(上)——传统机器学习

    这篇博客主要记录了我自己的学习路线及相应的资料汇总.总时间跨度约为6个月,主要是利用了晚上的时间和周末的时间,每天坚持下来,日积月累,回过头来,可能会惊讶于自己的进步. 对于一个机器学习的小白来说,往 ...

  6. 机器学习里面的树形模型

    1. 决策树不用考虑scaler. 2, xgboost 缺失值都可以不用考虑. 3.libSVM的数据格式及使用方法总结 首先介绍一下 libSVM的数据格式 Label 1:value 2:val ...

  7. 【美团技术团队】2014年-2022年后端文章精选篇

    目录 2022年后端文章精选 2021年后端文章精选 2020年后端文章精选 2019年后端文章精选 2018年后端文章精选 2017年后端文章精选 2016年后端文章精选 2015年后端文章精选 2 ...

  8. 【机器学习之路】(转载)

    作者主页:https://www.nowcoder.com/profile/210306401/myDiscussPost [我的机器学习入门之路(上)--传统机器学习] 这篇博客主要记录了我自己的学 ...

  9. 2019年美团技术团队10大热门文章

    2020年悄然而至 2019年默默告别 值此元旦之际,要特别感谢陪伴我们的读者朋友们.因为你们的关注,我们才更有动力:因为你们的每一句评论,我们才更精益求精. 截至目前,美团技术团队共发布377篇技术 ...

  10. 人工智能算法面试大总结-总目录

    前言 该面经总结了春招/秋招各厂高频面试八股,除开围绕简历扣项目细节,公司最喜欢问的还是这些经典算法中涉及的知识点. 目前涵盖Python.基础理论.分类与聚类.降维.支持向量机SVM.贝叶斯|决策树 ...

最新文章

  1. SAP库存历史库存表更新逻辑
  2. 超过resnet的图片分类网络
  3. 2、UNIX、Linux操作系统的发展历程、介绍、应用领域
  4. java匿名对象赋初值_不想进BAT的Java程序员不是好程序员,BAT后端Java岗面试真题分享
  5. Prim和Dijkstra算法的区别
  6. json反射java对象_Jackson通过反射将Json转化为java对象
  7. 什么?他居然想在DLL中放毒!
  8. (计算机组成原理)第五章中央处理器-第三节1:CPU内部单总线数据通路中数据的流动
  9. 机器学习速成课程 | 练习 | Google Development——编程练习:提高神经网络的性能
  10. 行为设计模式 - 观察者设计模式
  11. fast.ai 深度学习笔记:第一部分第五课
  12. 手机连接电脑wifi上网_手机设置无线路由器方法教你一分钟学会WIFI上网(无需电脑)...
  13. vcpkg快速入门手册
  14. 超全!我常用的70个数据分析网址
  15. 微信小程序报错 RangeError: WebAssembly.Memory(): could not allocate memory
  16. matlab实现简单图形的识别
  17. servlet工作流程
  18. Flutter第7天--字体图标,2021年Android开发进阶课程
  19. 独家 | 全球2000家客户,这家公司推动林肯MKZ成为最流行的自动驾驶样车
  20. Android 小数点前后字体大小不一致,EditText限制小数点前后位数的实例

热门文章

  1. Java SE 基础知识~流程控制
  2. 软件测试需要学什么?全网最全软件测试必备7大技能详解,摇身一变资深测试
  3. 今天终于把爬虫的Ajax请求搞懂了
  4. developer.biao.daily.20140731
  5. 正则表达式有多强大一看便知!
  6. kali linux 网络渗透测试学习笔记(三)社会工程学之Java攻击:钓鱼网站制作
  7. 程序员过中秋 | 如何用代码绘制月亮?
  8. 2022最新阿里云域名注册和续费优惠口令及使用方法
  9. 你学不好英语,可能是精神内耗太多了
  10. 表空间脚本[置顶] Oracle 数据库表空间容量调整(表空间缩容脚本)脚本