xgboost输出模型解释
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输出模型解释相关推荐
- R语言构建文本分类模型并使用LIME进行模型解释实战:文本数据预处理、构建词袋模型、构建xgboost文本分类模型、基于文本训练数据以及模型构建LIME解释器解释多个测试语料的预测结果并可视化
R语言构建文本分类模型并使用LIME进行模型解释实战:文本数据预处理.构建词袋模型.构建xgboost文本分类模型.基于文本训练数据以及模型构建LIME解释器解释多个测试语料的预测结果并可视化 目录
- 用XGBoost入门可解释机器学习!
Datawhale干货 来源:Scott Lundberg,来源:数据派THU 本文长度为4300字,建议阅读8分钟 本文为大家介绍用XGBoost解释机器学习. 这是一个故事,关于错误地解释机器学习 ...
- 独家 | 用XGBoost入门可解释机器学习
作者:Scott Lundberg 翻译:和中华 校对:张一然 本文长度为4300字,建议阅读8分钟 本文为大家介绍用XGBoost解释机器学习. 这是一个故事,关于错误地解释机器学习模型的危险以及正 ...
- SHAP | 机器学习模型解释库
来源:大邓和他的Python SHAP机器学习模型解释库 想象一下,你正试图训练一个机器学习模型来预测广告是否被特定的人点击.在收到关于某人的一些信息后,模型预测某人会不会点击广告. 但是为什么模型会 ...
- XGBoost 分类模型的Python实现
今天我们一起来学习一下如何用Python来实现XGBoost分类,这个是一个监督学习的过程,首先我们需要导入两个Python库: import xgboost as xgb from sklearn. ...
- 机器学习实战案例:使用随机森林/XGBoost等模型进行分类预测,提高银行营销活动效率
1. 项目背景介绍 在这篇文章中,我们将使用 Python 搭建逻辑回归(Logistic Regression),随机森林(Random Forest),XGBoost,Bagging,KNN (K ...
- XGBoost输出特征重要性以及筛选特征
XGBoost输出特征重要性以及筛选特征 1,梯度提升算法是如何计算特征重要性的? 使用梯度提升算法的好处是在提升树被创建后,可以相对直接地得到每个属性的重要性得分.一般来说,重要性分数,衡量了特征在 ...
- ThinkPHP模版引擎之变量输出具体解释
ThinkPHP模版引擎之变量输出具体解释 使用ThinkPHP开发有一定时间了,今日对ThinkPHP的模板引擎变量解析深入了解了一下.做出一些总结,分享给大家供大家參考. 详细分析例如以下: 我们 ...
- XGBoost:参数解释
XGBoost参数 在运行XGboost之前,必须设置三种类型成熟:general parameters,booster parameters和task parameters: General par ...
最新文章
- POJ2594 最小路径覆盖
- Manacher's algorithms(马拉车算法)最长回文子串
- 正则表达式引擎执行原理——从未如此清晰!
- SAP Spartacus 和Jerry Sandbox应用Store引用的source字段类型差异
- python基础系列二:列表
- html调用摄像头ios,html5调用摄像头
- 三菱系统数据采集程序发布安装指引
- 【MapGIS精品教程】002:GDB本地数据库的使用
- 信息学奥赛一本通(C++版)在线评测系统 - 题解目录
- iphone/ipad 连接smb服务器,备份照片
- 线性代数学习笔记——第三十二讲——向量混合积的概念与性质
- 英特尔核心显卡控制面板设置自定义分辨率
- matlab怎么启动一个图形窗,Matlab在一个图形窗口里画多个图形的操作教程
- stm32VC调试psam卡遇到的问题以及解决
- VB中的界面设计原则和编程技巧
- 前端工程化——脚手架及自动化构建
- GUI(Graphical User Interface)
- 使用vue/cli出现defineConfig is not function 错误
- android 三大框架是什么,聊聊Android中的三大框架
- 玩 Spring框架