iT邦幫忙

2021 iThome 鐵人賽

DAY 25
0
自我挑戰組

Python資料分析學習地圖系列 第 25

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 程式碼

更詳細可以請參考連結


上一篇
Day 24 : 隨機森林
下一篇
Day 26 : LightGBM 與 GridSearch
系列文
Python資料分析學習地圖30

尚未有邦友留言

立即登入留言