XGBoost你真的懂吗?我不信.....

监督学习(四):XGBoost算法 监督学习(四):XGBoost算法   XGBoost(eXtreme Gradient Boosting)全名叫极端梯度提升,XGBoost是集成学习方法的王牌,在Kaggle数据挖掘比赛中,大部分获胜者用了XGBoost,XGBoost在绝大多数的回归和分类问题上表现的十分顶尖,本文较详细的介绍了XGBoost的算法原理。 目录监督学习(四):XGBoost算法1. 最优模型的构建方法2. Boosting的回归思想3. XGBoost的目标函数推导4. XGBoost的回归树构建方法5. XGBo 阅读详情

在这篇文章中,我们将介绍一些技术以更好地理解 XGBoost 的预测过程。这允许我们在利用 gradient boosting 的威力的同时,仍然能理解模型的决策过程。

为了解释这些技术,我们将使用 Titanic 数据集。该数据集有每个泰坦尼克号乘客的信息(包括乘客是否生还)。我们的目标是预测一个乘客是否生还,并且理解做出该预测的过程。即使是使用这些数据,我们也能看到理解模型决策的重要性。想象一下,假如我们有一个关于最近发生的船难的乘客数据集。建立这样的预测模型的目的实际上并不在于预测结果本身,但理解预测过程可以帮助我们学习如何最大化意外中的生还者。

import pandas as pd
from xgboost import XGBClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
import operator
import matplotlib.pyplot as plt
import seaborn as sns
import lime.lime_tabular
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import Imputer
import numpy as np
from sklearn.grid_search import GridSearchCV
%matplotlib inline

我们要做的首件事是观察我们的数据,你可以在 Kaggle 上找到(https://www.kaggle.com/c/titanic/data)这个数据集。拿到数据集之后,我们会对数据进行简单的清理。即:

  • 清除名字和乘客 ID

  • 把分类变量转化为虚拟变量

  • 用中位数填充和去除数据

这些清洗技巧非常简单,本文的目标不是讨论数据清洗,而是解释 XGBoost,因此这些都是快速、合理的清洗以使模型获得训练。

data = pd.read_csv("./data/titantic/train.csv")
y = data.Survived
X = data.drop(["Survived", "Name", "PassengerId"], 1)
X = pd.get_dummies(X)

现在让我们将数据集分为训练集和测试集。

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33, random_state=42)

并通过少量的超参数测试构建一个训练管道。

pipeline = Pipeline([( imputer , Imputer(strategy= median )), ( model , XGBClassifier())])
parameters = dict(model__max_depth=[3, 5, 7],
                  model__learning_rate=[.01, .1],
                  model__n_estimators=[100, 500])
cv = GridSearchCV(pipeline, param_grid=parameters)
cv.fit(X_train, y_train)

接着查看测试结果。为简单起见,我们将会使用与 Kaggle 相同的指标:准确率。

test_predictions = cv.predict(X_test)
print("Test Accuracy: {}".format(accuracy_score(y_test, test_predictions)))
Test Accuracy: 0.8101694915254237

至此我们得到了一个还不错的准确率,在 Kaggle 的大约 9000 个竞争者中排到了前 500 名。因此我们还有进一步提升的空间,但在此将作为留给读者的练习。

我们继续关于理解模型学习到什么的讨论。常用的方法是使用 XGBoost 提供的特征重要性(feature importance)。特征重要性的级别越高,表示该特征对改善模型预测的贡献越大。接下来我们将使用重要性参数对特征进行分级,并比较相对重要性。

fi = list(zip(X.columns, cv.best_estimator_.named_steps[ model ].feature_importances_))
fi.sort(key = operator.itemgetter(1), reverse=True)
top_10 = fi[:10]
x = [x[0] for x in top_10]
y = [x[1] for x in top_10]

从上图可以看出,票价和年龄是很重要的特征。我们可以进一步查看生还/遇难与票价的相关分布:

我们可以很清楚地看到,那些生还者相比遇难者的平均票价要高得多,因此把票价当成重要特征可能是合理的。

特征重要性可能是理解一般的特征重要性的不错方法。假如出现了这样的特例,即模型预测一个高票价的乘客无法获得生还,则我们可以得出高票价并不必然导致生还,接下来我们将分析可能导致模型得出该乘客无法生还的其它特征。

这种个体层次上的分析对于生产式机器学习系统可能非常有用。考虑其它例子,使用模型预测是否可以某人一项贷款。我们知道信用评分将是模型的一个很重要的特征,但是却出现了一个拥有高信用评分却被模型拒绝的客户,这时我们将如何向客户做出解释?又该如何向管理者解释?

幸运的是,近期出现了华盛顿大学关于解释任意分类器的预测过程的研究。他们的方法称为 LIME,已经在 GitHub 上开源(https://github.com/marcotcr/lime)。本文不打算对此展开讨论,可以参见论文(https://arxiv.org/pdf/1602.04938.pdf)

接下来我们尝试在模型中应用 LIME。基本上,首先需要定义一个处理训练数据的解释器(我们需要确保传递给解释器的估算训练数据集正是将要训练的数据集):

X_train_imputed = cv.best_estimator_.named_steps[ imputer ].transform(X_train)
explainer = lime.lime_tabular.LimeTabularExplainer(X_train_imputed,
    feature_names=X_train.columns.tolist(),
    class_names=["Not Survived", "Survived"],
    discretize_continuous=True)

随后你必须定义一个函数,它以特征数组为变量,并返回一个数组和每个类的概率:

model = cv.best_estimator_.named_steps[ model ]
def xgb_prediction(X_array_in):
    if len(X_array_in.shape) < 2:
        X_array_in = np.expand_dims(X_array_in, 0)
    return model.predict_proba(X_array_in)

最后,我们传递一个示例,让解释器使用你的函数输出特征数和标签:

X_test_imputed = cv.best_estimator_.named_steps[ imputer ].transform(X_test)
exp = explainer.explain_instance(X_test_imputed[1], xgb_prediction, num_features=5, top_labels=1)
exp.show_in_notebook(show_table=True, show_all=False)

在这里我们有一个示例,76% 的可能性是不存活的。我们还想看看哪个特征对于哪个类贡献最大,重要性又如何。例如,在 Sex = Female 时,生存几率更大。让我们看看柱状图:

所以这看起来很有道理。如果你是女性,这就大大提高了你在训练数据中存活的几率。所以为什么预测结果是「未存活」?看起来 Pclass =2.0 大大降低了存活率。让我们看看:

看起来 Pclass 等于 2 的存活率还是比较低的,所以我们对于自己的预测结果有了更多的理解。看看 LIME 上展示的 top5 特征,看起来这个人似乎仍然能活下来,让我们看看它的标签:

y_test.values[0]
>>>1

这个人确实活下来了,所以我们的模型有错!感谢 LIME,我们可以对问题原因有一些认识:看起来 Pclass 可能需要被抛弃。这种方式可以帮助我们,希望能够找到一些改进模型的方法。

本文为读者提供了一个简单有效理解 XGBoost 的方法。希望这些方法可以帮助你合理利用 XGBoost,让你的模型能够做出更好的推断。

注:本文为机器之心编译,转载请联系本公众号获得授权。

选自Ancestry

作者:Tyler Folkman

编译:机器之心(almosthuman2014)

原文:https://blogs.ancestry.com/ancestry/2017/12/18/understanding-machine-learning-xgboost/

XGBOOST_航班延误预测 根据美国五个机场,DL达美航司的2016年的数据,做一个简单的预测尝试,使用XGBOOST模型进行预测。 阅读详情

相关推荐

关于xgboost的一些整理

XGBOOST的三大板块 XGBoost本身的核心是基于梯度提升树实现的集成算法,整体来说可以有三个核心部分:集成算法本身,用于集成的 弱评估器,以及应用中的其他过程。三个部分中,前两个部分包含了XGBoost的核心原理以及数学过程,最后的部分 主要是在XGBoost应用中占有一席之地。我们的课程会主要集中在前两部分,最后一部分内容将会在应用中少量给大 家提及。接下来,我们就针对这三个部分,来进行一一的讲解 from xgboost import XGBRegressor as XGBR from skl

不再的blog 8771

Python机器学习笔记:XgBoost算法(亲测)

前言 1,Xgboost简介   Xgboost是Boosting算法的其中一种,Boosting算法的思想是将许多弱分类器集成在一起,形成一个强分类器。因为Xgboost是一种提升树模型,所以它是将许多树模型集成在一起,形成一个很强的分类器。而所用到的树模型则是CART回归树模型。   Xgboost是在GBDT的基础上进行改进,使之更强大,适用于更大范围。   Xgboost一般和sk...

gb4215287的博客 3133

XGBOOST,GBDT,RandomForest的比较

首先XGBOOST,GBDT,RF都是集成算法,RF是Bagging的变体,与Bagging相比,RF加入了属性扰动,而XGBOOST,GBDT属于boosting. -------------------------------------------------------------------------------------------------------------------

qccc_dm的博客 9188

xgboost简单介绍_XGBOOST模型介绍

描述前言这是机器学习系列的第三篇文章,对于住房租金预测比赛的总结这将是最后一篇文章了,比赛持续一个月自己的总结竟然也用了一个月,牵强一点来说机器学习也将会是一个漫长的道路,后续机器学习的文章大多数以知识科普为主,毕竟自己在机器学习这个领域是个渣渣,自己学到的新知识点会分享给大家的。前面的文章谈了谈这次比赛非技术方面的收获,对数据集的初步了解和特征工程的处理,今天主要介绍这次使用的模型--XGBOO...

weixin_33407806的博客 5263

pyspark使用XGboost训练模型实例

pyspark训练Xgboost模型

Toby的博客 3255

【Python】XGBoost

在直接跳入XGBoost的复杂世界之前,我们需要首先巩固一些核心的机器学习基石知识。理解这些基础概念是掌握XGBoost精髓的前提,因为XGBoost正是站在这些巨人肩膀上发展起来的。本章将详细探讨机器学习范式、决策树原理以及梯度提升(Gradient Boosting)的数学思想。机器学习的核心在于让计算机系统通过数据学习,从而在没有明确编程的情况下执行特定任务。这一过程通常涉及构建模型,使其能够从输入数据中识别模式,并对新数据做出预测或决策。监督学习是机器学习中最常见的一种范式。其核心特点是:我们拥有带

宅男很神经 1086

9种有监督与3种无监督机器学习算法

9种有监督与3种无监督机器学习算法

weixin_44906759的博客 1万+

XGBOOST(Extreme Gradient Boosting)算法原理详细总结

        上篇我们对传统的GBDT算法原理进行了总结,本篇我们来探讨GBDT的进阶版本XGBOOST。XGBOOST是由陈天奇博士提出,下面我们主要参考XGBOOST的论文:XGBoost: A Scalable Tree Boosting System以及Boosted Trees PPT 。         ...

NLP_谢立侠 5100

Xgboost算法详细讲解

因为Xgboost算法常常用于有监督学习,关于有监督学习我们在前面已经介绍过来,但是有监督学习的要素有哪些呢?Xgboost算法为什么经常用于有监督学习呢? 有监督学习的要素包含两大块: 模型和参数 模型通常是给定输入Xi,找出和输出y之间的关系,如线性模型 参数通常是我们需要从数据中学习的未确定部分。在线性回归模型中,参数是系数Wj。 损失函数和正则化 我们在对数据进行训练的时候,总是要有一个评...

weixin_43800002的博客 898

医药行业新零售项目数据分析报告——基于Excel的分析与可视化

不同平台客户支付金额用数字+百分比展示更直观。各大区支付金额分析较为粗浅,后续可加入不同大区人数、配送费等进行细分分析。图表略微单一,可采用组合图,运用两个及以上维度对数据进行分析。数据来源本项目数据来源于某机构的项目案例,以上分析内容均为本人原创,不涉嫌抄袭。原做项目,新平台首发。

2401_84213513的博客 1495

远程桌面连接失败?手把手教你解决CredSSP加密Oracle漏洞(Win10/Win11通用)

本文详细解析了Windows远程桌面连接因CredSSP加密Oracle漏洞安全更新导致的“身份验证错误”问题。文章从原理入手,提供了通过组策略编辑器(适用于专业版)和注册表编辑器(适用于家庭版)两种核心解决方案,指导用户将安全策略调整为推荐的“缓解”模式,以在保障安全的前提下恢复连接,并给出了高级脚本处理与安全最佳实践。

u6v7w8x的博客 729

Xgboost代码实现详解

目录 XGBOOST原理回顾 数据探索 数据预处理 构建简单的XGBoost 模型 Xgboost参数 XGBoost 参数调节 Step 1: 学习率与树个数 Step 2: 树的深度与节点权重 Step 3: 调节 gamma去降低过拟合风险 Step 4: 调节样本采样方式 subsample 和 colsample_bytree Step 5: ...

冷月无声的博客 2万+

深入理解 SAP HANA 上的查询处理机制:从 CDS 分层建模到执行计划落地

本文探讨了S/4HANA系统中CDS视图性能问题的本质及其优化策略。文章指出,性能问题往往源于数据模型、查询编译和执行计划的综合影响,尤其在多层CDS视图叠加时表现更为明显。通过分析SAP HANA查询处理链路的四个关键阶段(SQL Plan Cache、SQL Front End、SQL Optimizer和Execution Plan),揭示了CDS视图性能波动的根本原因。文章强调,优化CDS性能需要关注数据规模、谓词选择性和执行计划稳定性,建议使用参数化查询、合理分层视图结构,并利用PlanViz等工

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 4819

xgboost.XGBClassifier, xgboost.train()

其中 xgboost.XGBClassifier()利用函数参数设置模型参数,xgboost.train()利用param列表设置模型参数。 准确率:

liulina603的专栏 4万+

FT2004(D2000)开发实战之网口stmmac报错调试(Failed to reset the dma)

网口stmmac报错调试(Failed to reset the dma)

嵌入式Linux 3587

如何在 Windows 中实时打开字幕

在 Windows 操作系统中,你可以使用编程来实现实时字幕功能,以便在屏幕上显示即时的文字内容。下面是一个示例代码,展示了如何使用Python编程语言在Windows上实现实时字幕功能。这样,字幕窗口将会不断地显示系统当前时间作为字幕。你可以根据自己的需求修改主循环中的内容,以显示你想要的实时字幕。希望以上代码和说明能够帮助你在Windows中实现实时字幕功能。函数创建了一个顶级窗口,并设置窗口的样式、位置和大小。方法,用于在字幕窗口中显示指定的字幕内容。上述代码中,我们使用了Python的。

DevWizard的博客 3272

【机器学习】深度剖析 LightGBM vs XGBOOST 哪个更胜一筹

今天就 LightGBM 和 XGBOOST放在一起对比学习下,以便加深印象。写在前面作为一个机器学习研习者,大概会了解 Boosting Machines 及其功能。Boosting ...

fengdu78的博客 2万+

避坑指南:新手爬百度图片3个致命错,改完批量保存本地(亲测有效)

新手爬百度图片的核心是“绕开静态HTML,抓准API接口+处理反爬+提取原图”,改完本文提到的3个核心错,就能稳定批量保存高清图片。这套思路可复用在其他图片网站(如必应图片、360图片),只需修改API接口和参数即可。如果想进一步优化,可添加代理IP池、多线程下载(新手不建议,容易触发反爬)、图片去重等功能!

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1587

XGBOOST 之稀疏数据的处理

XGBOOST 之稀疏数据的处理 当数据及其稀疏的时候,不应该转换为numpy等形式,尤其是点击数据。 商品成千上万,用户点击商品的种类只是其中的某一些类型,但是以此建立起来的点击矩阵的纬度却是庞大而冗余。 解决方式1: 将数据转化为libsvm存储的形式, 数据的第一列是label, 第二列之后的是特征 label key1:value1 key2:value2 key3:value3 XGBoost可以加载libsvm格式...

AcceptedLin的博客 1万+

XLSX Workbench 在 ABAP 世界的定位与实战:从概念到完整示例

XLSX Workbench 在可视化、易维护与批量后台生成三方面填补了 ABAP 报表到 Excel 的空白。它与官方类及社区明星 abap2xlsx 形成了“模板驱动、代码驱动、二者兼顾”的互补格局。掌握 Workbench 后,开发者能把精力集中在业务逻辑以及数据质量,而把排版细节交给图形化工具,大幅加速交付与迭代。通过本文提供的示例,你可以立即在项目中落地并尝到效率提升的红利。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 525

【推荐100个unity插件】Animator 的替代品?—— Animancer Pro插件的使用介绍

Animancer与Unity Animator对比及使用指南 摘要: 本文对比了Animancer与Unity官方Animator的核心差异,分析了Animancer的优势特点。Animancer采用代码驱动模式,相比Animator的状态机系统更灵活高效,支持实时调试、动态混合和深度逻辑集成。文章详细介绍了Animancer的快速使用方法,包括动画播放、切换和触发机制,并区分了免费版与专业版的功能差异。适合需要高效动画开发、复杂交互逻辑的中小项目,为开发者提供了一种现代化的动画解决方案。

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 2435

sklearn与XGBoost

1 在学习XGBoost之前 1.1 xgboost库与XGB的sklearn API 陈天奇创造了XGBoost算法后,很快和一群机器学习爱好者建立了专门调用XGBoost库,名为xgboost。xgboost是一个独立的、开源的,并且专门提供梯度提升树以及XGBoost算法应用的算法库。它和sklearn类似,有一个详细的官方网站可以提供学习资料,并且可以与C、Python、R、Julia等语言连用,但需要单独安装和下载。 xgboost documents:https://xgboost.readth

momokofly的博客 6779

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

XGBoost——xgboost算法

全栈工程师开发手册 (作者:栾鹏) python数据挖掘系列教程 安装 xgboost目前还不能pip在线安装,所以先在网址https://www.lfd.uci.edu/~gohlke/pythonlibs/#xgboost 中下载whl文件,然后参考https://blog.csdn.net/luanpeng825485697/article/details/77816740 进行离线安装...

Harrytsz的博客 1559

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

XGBOOST模型简单调参(分类)

1.模型选择与评估 1.1 模型参数、超参数 了解什么是模型参数,什么是超参数是很必要的,不同类型的参数需要在不同的阶段进行调节(参数——训练集;超参数——验证集) 模型参数:模型内部的配置变量,可以通过数据估计(学习)模型参数的值 超参数:模型的外部配置变量,需要手动设置,好的超参数可以进一步提高模型的性能 模型参数的特点: 1.进行模型预测时需要模型参数; 2.可定义模型功能; 3.可使用数...

小葱拌豆腐 3619

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

XGBoost

什么是XGBoost? XGBoost(eXtreme Gradient Boosting)算法是Gradient Boosting算法的高效实现版本,因其在应用实践中表现出优良的效果和效率,因而被工业界广为推崇。   XGBoost类似于GBDT,是一个基于CART树的,由多个弱分类器经过boost框架,以负梯度为学习策略的一种集成学习方法。   XGBoost的数学原理 作为GB方...

lukeyyanghang的博客 6941
上一篇: 最全的损失函数汇总
下一篇: Pandas切片操作:一个很容易忽视的错误
机器学习算法那些事
博客等级 码龄9年 1633粉丝 62原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值