请点击上面公众号,免费订阅。
《实例》阐述算法,通俗易懂,助您对算法的理解达到一个新高度。包含但不限于:经典算法,机器学习,深度学习,LeetCode 题解,Kaggle 实战。期待您的到来!
01
—
回顾
昨天推送了XGBoost的原理,已知某个样本 xi ,经过XGBoost 求解得到的 yi 是由 K 个决策树线性叠加的结果。那么在求解每个树的叶子节点的权重参数时,用的目标函数是损失函数 Loss 和正则化惩罚项组成的,XGBoost对这个目标函数做了很多次演化,其中重要的两步:
将损失函数 loss 用泰勒公式展开取前三项,这样能适应一般的问题,而不仅仅是常见的最小平方误差项。
将目标函数对样本的遍历转化为对叶子节点的遍历,这样带来的好处是,目标函数是权重参数的一维二元函数,非常容易求每个叶子节点最好的权重参数和对应的目标值。
下面,看下实际应用中,如何安装 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模型构造
《实例》阐述算法,通俗易懂,助您对算法的理解达到一个新高度。包含但不限于:经典算法,机器学习,深度学习,LeetCode 题解,Kaggle 实战。期待您的到来!