机器学习:XGBoost 安装及实战应用

时间:2022-05-06
本文章向大家介绍机器学习:XGBoost 安装及实战应用,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

《实例》阐述算法,通俗易懂,助您对算法的理解达到一个新高度。包含但不限于:经典算法,机器学习,深度学习,LeetCode 题解,Kaggle 实战。期待您的到来!

01

回顾

昨天推送了XGBoost的原理,已知某个样本 xi ,经过XGBoost 求解得到的 yi 是由 K 个决策树线性叠加的结果。那么在求解每个树的叶子节点的权重参数时,用的目标函数是损失函数 Loss 和正则化惩罚项组成的,XGBoost对这个目标函数做了很多次演化,其中重要的两步:

  1. 将损失函数 loss 用泰勒公式展开取前三项,这样能适应一般的问题,而不仅仅是常见的最小平方误差项。
  2. 将目标函数对样本的遍历转化为对叶子节点的遍历,这样带来的好处是,目标函数是权重参数的一维二元函数,非常容易求每个叶子节点最好的权重参数和对应的目标值。

下面,看下实际应用中,如何安装 XGBoost 和怎么使用XGBoost做分类和回归任务。

02

XGBoost安装

推荐用 Anaconda 进行安装,输入如下的命令:

如果报错,那就需要去下载 XGBoost 的安装文件(安装文件的后缀名为.whl),下载后放入一个目录,然后输入如下命令:

好了,安装过程结束。

如需要以上whl文件,或者安装过程中出现文件版本不一致问题,请参考以下链接,下载对应的XGBoost的版本:https://www.lfd.uci.edu/~gohlke/pythonlibs/

  • xgboost‑0.6+20171121‑cp35‑cp35m‑win32.whl
  • xgboost‑0.6+20171121‑cp35‑cp35m‑win_amd64.whl
  • xgboost‑0.6+20171121‑cp36‑cp36m‑win32.whl
  • xgboost‑0.6+20171121‑cp36‑cp36m‑win_amd64.whl

出现下面这个界面,才说明安装成功:

03

XGBoost实战

应用 xgboost 做一个分类任务,用到的数据集是 pima-indians-diabetes 糖尿病人的分类任务,数据样本前10个如下,可以看到最后一列是标签值,0或1。

3.1 基本训练思路

先应用xgboost对以上模型做一个基本的训练,训练的思路,代码如下:

#1 导入库

from numpy import loadtxt

from xgboost import XGBClassifier

from sklearn.model_selection import train_test_split

from sklearn.metrics import accuracy_score

#2 加载糖尿病人数据集

dataset = loadtxt('pima-indians-diabetes.csv',delimiter=",")

#3 分割数据为 X 和 y

X = dataset[:,0:8]

Y = dataset[:,8]

#4 用训练数据进行模型拟合

model = XGBClassifier()

model.fit(X_train,y_train)

#5 用测试数据进行预测

y_pred = model.predict(X_test)

predictions = [round(value) for value in y_pred]

#6 评估预测精度

accuracy = accuracy_score(y_test,predictions)

print("精度等于: %.3f%%" %(accuracy*100.0))

结果为,精度等于: 76.623%

3.2 查看每轮集成效果

因为 xgboost 是在原来模型的基础上加入一个又一个的决策树的,那么分析下每加入一个新的树后,问题的精度变化情况,修改第四步为如下:

#4 用训练数据进行模型拟合

evals = [(X_test,y_test)]

model.fit(X_train,y_train,early_stopping_rounds=15,eval_metric="logloss",eval_set=evals, verbose=True)

可以看到,每加入一棵树后,损失值的变化情况,选取前7轮树的集成对损失值的影响情况,如下图所示:

[0] validation_0-logloss:0.665117

Will train until validation_0-logloss hasn't improved in 15 rounds.

[1] validation_0-logloss:0.637394

[2] validation_0-logloss:0.611943

[3] validation_0-logloss:0.591936

[4] validation_0-logloss:0.575281

[5] validation_0-logloss:0.562751

[6] validation_0-logloss:0.551439

[7] validation_0-logloss:0.540937

...

3.3 绘制特征的重要性

查看每个特征的重要程度,与基本训练思路差不多,增加的代码,

导入如下库:

from xgboost import plot_importance

#绘制特征的重要性

plot_importance(model)

pyplot.show()

xgboost也会有很多参数可以调节,常见的有:学习率,树的一些参数:深度等,还有正则化的参数,这些参数都在昨天的xgboost的原理介绍中有涉及,可以参考昨天的推送。

参数调优,可以借助sklearn的 GridSearchCV模块,关于这块可以参考sklearn官网去查看。

04

总结

今天总结了xgboost库的安装和使用,对一个葡萄糖病人的数据集做了分类,绘制了每个特征的重要性,明白了xgboost的原理,对于xgboost的参数调优就变得明了了。

XGBoost 是提升树模型中一个性能比较好的算法,在此之前,比它古老点的,也是一个树提升的模型:GBDT(梯度提升决策树),这个算法的原理又是怎样的呢?它和XGBoost相比,有什么异同点呢? 欢迎关注明天的推送。

算法channel已推送的更多文章:

1 机器学习:不得不知的概念(1)

2 机器学习:不得不知的概念(2)

3 机器学习:不得不知的概念(3)

4 回归分析简介

5 最小二乘法:背后的假设和原理(前篇)

6 最小二乘法原理(后):梯度下降求权重参数

7 机器学习之线性回归:算法兑现为python代码

8 机器学习之线性回归:OLS 无偏估计及相关性python分析

9 机器学习线性回归:谈谈多重共线性问题及相关算法

10 机器学习:说说L1和L2正则化

11 机器学习逻辑回归:原理解析及代码实现

12 机器学习逻辑回归:算法兑现为python代码

13 机器学习:谈谈决策树

14 机器学习:对决策树剪枝

15 机器学习决策树:sklearn分类和回归

16 机器学习决策树:提炼出分类器算法

17 机器学习:说说贝叶斯分类

18 朴素贝叶斯分类器:例子解释

19 朴素贝叶斯分类:拉普拉斯修正

20 机器学习:单词拼写纠正器python实现

21 机器学习:半朴素贝叶斯分类器

22 机器学习期望最大算法:实例解析

23 机器学习高斯混合模型(前篇):聚类原理分析

24 机器学习高斯混合模型(中篇):聚类求解

25 机器学习高斯混合模型(后篇):GMM求解完整代码实现

26 高斯混合模型:不掉包实现多维数据聚类分析

27 高斯混合模型:GMM求解完整代码实现

28 数据降维处理:背景及基本概念

29 数据降维处理:PCA之特征值分解法例子解析

30 数据降维处理:PCA之奇异值分解(SVD)介绍

31 数据降维处理:特征值分解和奇异值分解的实战分析

32 机器学习集成算法:XGBoost思想

33 机器学习集成算法:XGBoost模型构造