xgboost缺失值处理

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

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

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

xgboost缺失值处理

    xgboost缺失值处理

 

 

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

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

 

原文伪代码

xgboost缺失值处理

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

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

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

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

xgboost缺失值处理

附上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)

xgboost缺失值处理

 

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
                  )

xgboost缺失值处理

6、子树可视化

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

xgboost缺失值处理文章来源地址https://www.toymoban.com/news/detail-434024.html

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

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

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

相关文章

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包