xgboost模型输出的解释

【目标】

  • 掌握xgboost中,predict方法对应不同的参数,输出的含义
  • 掌握xgboost中,dump出model的树结构的含义

【数据集与代码】

使用经典的鸢尾花的数据来说明.,这是一个二分类的问题,判断是不是鸢尾花, 这里只取前100行的数据,并对训练集和测试集进行了切分。默认有25个样本作测试集。

代码如下:

import xgboost as xgb
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score,roc_auc_score, log_loss
from sklearn.model_selection import GridSearchCV
from sklearn import datasetsiris = datasets.load_iris()
data = iris.data[:100]
label = iris.target[:100]train_x, test_x, train_y, test_y = train_test_split(data, label, random_state=0)dtrain = xgb.DMatrix(train_x, label=train_y)
dtest = xgb.DMatrix(test_x)params={'booster':'gbtree','objective': 'binary:logistic','eval_metric': ['logloss'],'max_depth':4,'lambda':10,'subsample':0.75,'colsample_bytree':0.75,'min_child_weight':2,'eta': 0.1,'seed':0,'nthread':8,'silent':1}
watchlist = [(dtrain, 'train')]
bst = xgb.train(params, dtrain, num_boost_round=10, evals=watchlist)
bst.dump_model('iris_model.txt')
ypred = bst.predict(dtest)
print ypred
ypred_output = bst.predict(dtest, output_margin=True)
print ypred_output
ypred_leaf = bst.predict(dtest, pred_leaf=True)
print ypred_leaf

【输出与解释】

输出的结果以及树结构如下:

首先,predict函数无参数,默认输出的是概率值。

当设置output_margin=True时,输出的不是概率值,而是每个样本在xgboost生成的所有树中叶子节点的累加值,因为在训练模型时,objective选择了logistic,所以用这个累加值做sigmoid就是predict函数无参数时的概率值。如何知道每个样本在xgboost生成的所有树中是哪个叶子节点呢?

当设置pred_leaf=True时,会输出每个样本在所有树中的叶子节点

ypred_leaf = bst.predict(dtest, pred_leaf=True)

即测试集有25个样本,xgboost生成了10棵树,则样本在所有树中的叶子节点对应了一个(25, 10)的矩阵。例如,第一个样本在10棵树中的叶子节点都是第一个。第二个样本在10棵树中的叶子节点都是第二个。

再看树结构,共有10个booster,编号0~9,对应10棵树。对于第一个booster,当f3<0.75时,分到leaf1,f3>=0.75时,分到leaf2,缺失该特征,分到leaf1。我们将10棵树中的leaf1的值全部加起来,即:

-0.0787879-0.0823941-0.0743093-0.0591238-0.0662177-0.0670728-0.068963-0.0610322-0.0576446-0.0599772=-0.6755226

-0.6755226即为叶子节点权重的累加值,在这里,所有叶子节点的权重已经乘了学习率,对-0.6755226求sigmoid:

1 / float(1 + np.exp(0.6755226)) = 0.337261343368 #这个值跟输出的概率值是对应的。

【残差、输出与loss】

残差即损失函数的导数,而对于均方差square loss function,其导数正好是真实值减预测值的相反数,只是残差的一个特例而已。

先学习一棵回归树,迭代树时,会把残差作为目标值,学习下一个回归树,继续求残差,直到建立的回归树的数目达到一定要求或者残差能够容忍,停止学习。

输出是指,先看各个样本在所有树中属于哪个节点,然后将各个树中的节点的值累加起来,然后还要乘以学习率才是输出,即叶子节点权重累加值乘以学习率。然后看objective是分类还是回归,如果是logistic,则求sigmoid即为概率值。

将输出值代入loss function,可以求出loss。

然后看objective是分类还是回归,如果是logistic,则求sigmoid即为概率值。

将输出值代入loss function,可以求出loss。

xgboost输出模型解释相关推荐

  1. R语言构建文本分类模型并使用LIME进行模型解释实战:文本数据预处理、构建词袋模型、构建xgboost文本分类模型、基于文本训练数据以及模型构建LIME解释器解释多个测试语料的预测结果并可视化

    R语言构建文本分类模型并使用LIME进行模型解释实战:文本数据预处理.构建词袋模型.构建xgboost文本分类模型.基于文本训练数据以及模型构建LIME解释器解释多个测试语料的预测结果并可视化 目录

  2. 用XGBoost入门可解释机器学习!

    Datawhale干货 来源:Scott Lundberg,来源:数据派THU 本文长度为4300字,建议阅读8分钟 本文为大家介绍用XGBoost解释机器学习. 这是一个故事,关于错误地解释机器学习 ...

  3. 独家 | 用XGBoost入门可解释机器学习

    作者:Scott Lundberg 翻译:和中华 校对:张一然 本文长度为4300字,建议阅读8分钟 本文为大家介绍用XGBoost解释机器学习. 这是一个故事,关于错误地解释机器学习模型的危险以及正 ...

  4. SHAP | 机器学习模型解释库

    来源:大邓和他的Python SHAP机器学习模型解释库 想象一下,你正试图训练一个机器学习模型来预测广告是否被特定的人点击.在收到关于某人的一些信息后,模型预测某人会不会点击广告. 但是为什么模型会 ...

  5. XGBoost 分类模型的Python实现

    今天我们一起来学习一下如何用Python来实现XGBoost分类,这个是一个监督学习的过程,首先我们需要导入两个Python库: import xgboost as xgb from sklearn. ...

  6. 机器学习实战案例:使用随机森林/XGBoost等模型进行分类预测,提高银行营销活动效率

    1. 项目背景介绍 在这篇文章中,我们将使用 Python 搭建逻辑回归(Logistic Regression),随机森林(Random Forest),XGBoost,Bagging,KNN (K ...

  7. XGBoost输出特征重要性以及筛选特征

    XGBoost输出特征重要性以及筛选特征 1,梯度提升算法是如何计算特征重要性的? 使用梯度提升算法的好处是在提升树被创建后,可以相对直接地得到每个属性的重要性得分.一般来说,重要性分数,衡量了特征在 ...

  8. ThinkPHP模版引擎之变量输出具体解释

    ThinkPHP模版引擎之变量输出具体解释 使用ThinkPHP开发有一定时间了,今日对ThinkPHP的模板引擎变量解析深入了解了一下.做出一些总结,分享给大家供大家參考. 详细分析例如以下: 我们 ...

  9. XGBoost:参数解释

    XGBoost参数 在运行XGboost之前,必须设置三种类型成熟:general parameters,booster parameters和task parameters: General par ...

最新文章

  1. POJ2594 最小路径覆盖
  2. Manacher's algorithms(马拉车算法)最长回文子串
  3. 正则表达式引擎执行原理——从未如此清晰!
  4. SAP Spartacus 和Jerry Sandbox应用Store引用的source字段类型差异
  5. python基础系列二:列表
  6. html调用摄像头ios,html5调用摄像头
  7. 三菱系统数据采集程序发布安装指引
  8. 【MapGIS精品教程】002:GDB本地数据库的使用
  9. 信息学奥赛一本通(C++版)在线评测系统 - 题解目录
  10. iphone/ipad 连接smb服务器,备份照片
  11. 线性代数学习笔记——第三十二讲——向量混合积的概念与性质
  12. 英特尔核心显卡控制面板设置自定义分辨率
  13. matlab怎么启动一个图形窗,Matlab在一个图形窗口里画多个图形的操作教程
  14. stm32VC调试psam卡遇到的问题以及解决
  15. VB中的界面设计原则和编程技巧
  16. 前端工程化——脚手架及自动化构建
  17. GUI(Graphical User Interface)
  18. 使用vue/cli出现defineConfig is not function 错误
  19. android 三大框架是什么,聊聊Android中的三大框架
  20. 玩 Spring框架

热门文章

  1. Openlayers设置ESPG900913作为影射算法
  2. 人工智能就业越来越严峻,你还在坚持吗
  3. Nature重磅:软硬分离、图灵完备,清华首次提出“类脑计算完备性”
  4. Python中的range函数和arange函数的区别与联系
  5. 如何启动一个vue项目
  6. PMAC应用六-前瞻
  7. 浅谈char类型范围
  8. openTSDB详解之Writing Data
  9. PTrade数据交互设置——从零到实盘18
  10. SVN版本回滚——反响合并