Day 25 : XGBoost

极限梯度提升 eXtreme Gradient Boosting(XGBoost) ,被称为 Kaggle 竞赛神器,常常第一名都是使用这个演算法。先来前情提要一下树的发展(开始上生物课XD?)/images/emoticon/emoticon39.gif

树算法发展过程

以下图片来源

  • Decision trees(决策树):是一种过程直觉单纯、执行效率也相当高的监督式机器学习模型,但只有一棵树容易过拟和资料。
  • Bagging(装袋法):(Bootstrap Aggregating, Bagging),把训练资料重新采样之後,就可以产生不同组的训练资料。接着透过多数投票机制将弱分类器组合起来成一个强分类器。
  • Random Forest:建立於 Bagging 的方式,每棵决策树随机选择特徵,最後建构一个森林,可以比决策树不容易过度拟合,并且让预测能力提升。
  • Boosting:目标是为了要避免学习错误,让自己往学正确的东西。根据预测错误的资料调整其权重值,让模型下次能学习比较好。
  • Gradient Boosting:利用梯度下降演算法来最小化模型的目标函数值。
  • XGBoost:极限梯度提升,利用平行化运算执行 Gradient Boosting 演算法,且包含剪枝(决策树修剪),处理遗漏值和正规化处理,避免过度拟合资料。

XGBoost 特色

  • 平行运算
  • 剪枝
  • 硬体优化
  • 正规化
  • 遗漏值处理
  • 交叉验证

演算法比较

从下图可以发现,XGBoost 相比其他演算法的优点是训练速度快、准确率也高 -> 总而言之 快、狠、准

安装方式

pip install xgboost

实作程序码

from xgboost import XGBClassifier

classifier = XGBClassifier(n_estimators=1000, learning_rate= 0.01)
classifier.fit(X_train, y_train)
y_pred = classifier.predict(X_test)

from sklearn.metrics import confusion_matrix
cm = confusion_matrix(y_test, y_pred)

print(cm)
>>> [[59  8]
     [ 5 28]]
from sklearn.metrics import classification_report
print(classification_report(y_test, y_pred))

看图说故事

feature importance

# 我们可以画特徵的重要程度
from xgboost import plot_importance

plot_importance(classifier)
print('每个特徵重要程度: ', classifier.feature_importances_)
>>> 每个特徵重要程度:  [0.49414912 0.50585085]

树状图

请先安装 graphviz

mac 安装

brew install graphviz 

或是安装

pip install graphviz
from xgboost import plot_tree
import matplotlib.pyplot as plt

fig, ax = plt.subplots(figsize=(30, 30))
plot_tree(classifier, ax=ax)
plt.savefig('xgboost_tree.png')
plt.show()

github 程序码

更详细可以请参考连结


<<:  [第22天]理财达人Mx. Ada-MACD 指标

>>:  Day22 Gin with CORS

[Day12] 团队管理:建立团队信赖感(1)

用第一次成功建立信心 给予空间、给予适应、不限方式,让团队创造第一次成功 制定了目标、习惯以团队思考...

从 JavaScript 角度学 Python(22) - GitHub API

前言 前面我们已经学习了不少的 Python 新知识,所以也差不多该到了实作一下前面的知识点,这样子...

[WMX3] 6.GetEngineStatus

主要功能为取得WMX3Engine目前的连线状态,常见的状态有: Idle : WMX3Engine...

[Day11] 以神经网络进行时间序列预测 — RNN

本篇详细介绍 RNN 并使用它进行时间序列预测 本日大纲 RNN 介绍 激活函数 RNN 的分类 时...

21.unity简易对话介面设计概念

对话系统(dialogueSystem) 计画 小红帽想跟奶奶说话,然後把苹果送给奶奶。2D游戏经常...