【資料分析】揭開機器學習競賽冠軍模型的秘密 XGBoost 算法介紹

更新 發佈閱讀 4 分鐘
raw-image

XGBoosteXtreme Gradient Boosting)是基於梯度提升框架的強大機器學習算法。它專門用於解決分類和迴歸問題,尤其在處理結構化數據(如表格數據)方面有卓越的表現。XGBoost 通常在 Kaggle 等競賽中表現出色,並且被廣泛應用於商業場景中。它通過對梯度提升決策樹(GBDT)的優化實現了更高效、更靈活、更準確的模型訓練。


# 可使用目錄功能快速確認要閱覽的主題


XGBoost 的核心概念

XGBoost 是基於 梯度提升決策樹(GBDT)的擴展和優化。GBDT 是一種集成學習方法,通過構建多個決策樹,並將每棵樹的預測結果進行加權求和來提高模型的準確性。


1. 梯度提升的基本思想

  • 梯度提升模型是一個加法模型,它由多棵決策樹組成,這些樹是逐步訓練出來的。
  • 每一棵樹的目標是減少前一棵樹預測錯誤(即損失函數的梯度),所以後面的樹可以看作是對前面模型預測誤差的校正。
  • 最終的預測結果是所有樹的預測結果的加權和。

XGBoost 通過對這個過程的多方面進行優化,例如增強計算效率、加入正則化來防止過擬合,以及針對稀疏數據進行特殊處理。


2. XGBoost 的優化特點

  • 加速計算:通過基於分塊的結構來並行化運算,XGBoost 能夠有效加速模型訓練過程,特別是對於大規模數據集。
  • 正則化:XGBoost 通過引入 L1 和 L2 正則化來防止模型過擬合,這與傳統的 GBDT 最大區別之一。
  • 支持稀疏數據處理:XGBoost 對稀疏數據有良好的支持,特別是在處理缺失值或數據集不完整的情況下有特殊的策略。
  • 自動處理缺失值:XGBoost 會在構建樹時自動處理缺失值,並根據數據情況決定最佳路徑,而不需要用戶手動處理。
  • 學習速率(Learning Rate):XGBoost 引入了學習速率,用於縮小每棵樹的貢獻,從而控制每步的學習過程,防止過快收斂導致過擬合。
  • 提前停止(Early Stopping):XGBoost 支持提前停止功能,在模型的性能不再提升時可以停止訓練,從而節省時間並避免過擬合。



XGBoost 的工作原理

XGBoost 基本上是基於梯度提升框架,通過逐步建立決策樹來優化預測。具體步驟如下:

  1. 初始化:從一個簡單的模型開始,初始預測通常是目標變數的平均值(對於迴歸問題)或一個隨機猜測(對於分類問題)。
  2. 計算殘差:在每一步中,計算模型的預測值與實際值之間的差異,這就是殘差。模型的下一步將會訓練一個新的決策樹來修正這個殘差。
  3. 構建決策樹:使用新的決策樹來擬合這些殘差。這棵樹被稱為“增量樹”,因為它是用來提高之前模型的性能的。
  4. 更新預測:將這棵樹的預測結果加權後加入到原來的模型中。這樣不斷迭代,最終的模型就是多棵增量樹的加權和。
  5. 重複訓練:這個過程會重複多次,直到到達預設的決策樹數量,或在啟用了提前停止的情況下,當模型不再改進時停止訓練。



XGBoost 的重要參數

XGBoost 提供了大量的參數來調整和優化模型。以下是一些關鍵的參數:

  1. n_estimators:樹的數量,決定模型的複雜度。通常在這個數量比較大時,會結合 學習率 一起調整。
  2. max_depth:樹的最大深度。樹越深,模型越複雜,但過深的樹容易過擬合。
  3. learning_rate:學習率,控制每棵樹對最終預測的貢獻大小。較低的學習率會讓訓練過程變得更穩定,但需要更多的樹。
  4. subsample:控制每棵樹訓練時用到的樣本比例,防止過擬合。
  5. colsample_bytree:控制每棵樹用到的特徵比例,通過隨機選擇特徵來降低過擬合的風險。
  6. gamma:在樹的分裂節點,該參數指定分裂所需的最小損失減少量。值越大,算法越保守,越不容易過擬合。
  7. reg_lambda(L2 正則化項權重)reg_alpha(L1 正則化項權重):這兩個參數用於控制模型的正則化,防止過擬合。



XGBoost 的應用場景

XGBoost 的強大性能和靈活性使得它廣泛應用於各類機器學習問題中。以下是一些典型的應用場景:

  1. 分類問題:XGBoost 可以應用於二分類或多分類問題,如信用卡欺詐檢測、客戶流失預測等。
  2. 迴歸問題:它同樣可以用於預測連續值的問題,如房價預測、銷售預測等。
  3. 特徵選擇:XGBoost 自帶的特徵重要性評估功能可以幫助你識別對預測最重要的特徵,從而進行特徵選擇。
  4. 大數據處理:由於 XGBoost 支持分佈式訓練,能夠處理大規模數據集,並且計算效率很高。



XGBoost 的實際應用

import xgboost as xgb
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score

# 加載數據集
data = load_breast_cancer()
X = data.data
y = data.target

# 切分數據集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 轉換為 DMatrix 格式,這是 XGBoost 專用的數據格式
dtrain = xgb.DMatrix(X_train, label=y_train)
dtest = xgb.DMatrix(X_test, label=y_test)

# 設置 XGBoost 的參數
params = {
'objective': 'binary:logistic', # 二分類問題
'max_depth': 4, # 樹的深度
'learning_rate': 0.1, # 學習率
'eval_metric': 'logloss' # 評估標準
}

# 訓練模型
model = xgb.train(params, dtrain, num_boost_round=100)

# 使用測試集進行預測
y_pred = model.predict(dtest)
y_pred = [1 if y > 0.5 else 0 for y in y_pred] # 將概率轉換為二分類結果

# 計算模型準確率
accuracy = accuracy_score(y_test, y_pred)
print(f"Accuracy: {accuracy:.4f}")


"""
Accuracy: 0.9561
"""



範例說明

  1. 數據集:我們使用 sklearn.datasets 模組中的 乳腺癌數據集。這是一個常見的二分類數據集,目標是預測患者是否患有乳腺癌。
  2. 數據轉換:XGBoost 的訓練過程需要將數據轉換為 DMatrix 格式,這是一種高效的內部數據格式。
  3. 參數設置
    • objective:定義任務類型。在這裡我們使用 binary:logistic,這表示這是一個二分類問題,並且模型會輸出每個樣本屬於正類的概率。
    • max_depth:控制決策樹的最大深度,這會影響模型的複雜度。
    • learning_rate:學習率,控制每棵樹的貢獻大小。
    • eval_metric:模型評估指標,我們使用的是 logloss,即對數損失(常用於二分類問題)。
  4. 模型訓練:使用 xgb.train() 來進行模型訓練。我們設置了 num_boost_round=100,表示將構建 100 棵決策樹。
  5. 預測:模型會輸出概率值,這些值在 0 到 1 之間。我們將概率大於 0.5 的樣本標記為 1,否則標記為 0。
  6. 評估:最後我們使用 準確率 來評估模型的表現。



XGBoost 的優點

  • 高效性:XGBoost 在訓練大數據集時非常高效,並且對計算資源利用率高。
  • 強大的性能表現:由於對模型的多層優化,如正則化、靈活的分裂策略等,XGBoost 經常在 Kaggle 和其他競賽中名列前茅。
  • 靈活性:支持多種任務類型,包括分類、迴歸、排序等,並且支持自定義損失函數。
  • 自動處理缺失值:XGBoost 可以自動處理數據中的缺失值,無需提前進行填補。
  • 調參靈活:XGBoost 提供了許多參數讓用戶調整模型的訓練過程,這讓其更靈活應對各種場景。



XGBoost 的缺點

  • 難以解釋:像其他基於決策樹的集成學習方法一樣,XGBoost 模型的解釋性相對較差,難以直接理解每棵樹對最終結果的貢獻。
  • 對於高維數據效率較低:在高維數據(例如文本數據)中,XGBoost 的表現不如神經網絡等方法,這是因為其設計適合結構化數據。
  • 調參繁瑣:由於 XGBoost 提供了大量的參數進行調整,這雖然提高了靈活性,但也增加了調參的複雜性,尤其在數據量較大時,調參可能非常耗時。



XGBoost 與其他模型的比較

  • 與隨機森林相比:XGBoost 通過梯度提升進行優化,而隨機森林則是將多棵獨立訓練的樹進行投票或加權平均。因此,XGBoost 通常在精度和性能上優於隨機森林,但計算時間可能會更長。
  • 與梯度提升機(GBM)相比:XGBoost 是對傳統梯度提升算法的改進,它在計算效率、內存使用以及模型的正則化方面做了更好的優化,因此相比於傳統 GBM,XGBoost 更加快速且效果更好。
  • 與神經網絡相比:XGBoost 更適合結構化數據(例如表格數據),而神經網絡則在圖像、文本等非結構化數據方面表現更好。



XGBoost 的調參技巧

為了提升 XGBoost 模型的性能,常見的調參技巧包括:

  • 調整 n_estimatorslearning_rate:兩者通常需要一起調整。較大的 n_estimators 可以用較小的 learning_rate 搭配,以避免過擬合。
  • 調整 max_depthmin_child_weight:控制樹的深度和每棵樹的最小樣本權重,這對防止過擬合至關重要。
  • 使用 subsamplecolsample_bytree:這兩個參數控制樣本和特徵的隨機取樣,這是降低模型過擬合風險的重要手段。
  • 正則化參數 alphalambda:調整 L1 和 L2 正則化項,以進一步防止過擬合。
留言
avatar-img
JayRay 的沙龍
21會員
23內容數
JayRay 的沙龍的其他內容
2025/01/21
本文章提供深度學習(Deep Learning)、深度神經網絡(DNN)、卷積神經網絡(CNN)和遞歸神經網絡(RNN)的簡介,並包含它們的定義、應用場景、基本結構、工作原理、優缺點和Python範例。
Thumbnail
2025/01/21
本文章提供深度學習(Deep Learning)、深度神經網絡(DNN)、卷積神經網絡(CNN)和遞歸神經網絡(RNN)的簡介,並包含它們的定義、應用場景、基本結構、工作原理、優缺點和Python範例。
Thumbnail
2025/01/05
本篇文章提供描述性統計的完整指南,涵蓋集中趨勢、離散趨勢和數據分佈等重要概念,並附上豐富的實務應用案例與 Python 資料視覺化參考連結,協助讀者快速瞭解數據分析的基礎知識。
Thumbnail
2025/01/05
本篇文章提供描述性統計的完整指南,涵蓋集中趨勢、離散趨勢和數據分佈等重要概念,並附上豐富的實務應用案例與 Python 資料視覺化參考連結,協助讀者快速瞭解數據分析的基礎知識。
Thumbnail
2024/12/25
Naive Bayes是一種基於貝葉斯定理的機器學習分類演算法,適用於文本分類、垃圾郵件檢測及情感分析等任務。雖然假設特徵之間相互獨立,這在現實中不常成立,但其高效計算與穩定性使得在小數據集及高維度特徵空間中表現良好。
Thumbnail
2024/12/25
Naive Bayes是一種基於貝葉斯定理的機器學習分類演算法,適用於文本分類、垃圾郵件檢測及情感分析等任務。雖然假設特徵之間相互獨立,這在現實中不常成立,但其高效計算與穩定性使得在小數據集及高維度特徵空間中表現良好。
Thumbnail
看更多
你可能也想看
Thumbnail
在 vocus 與你一起探索內容、發掘靈感的路上,我們又將啟動新的冒險——vocus App 正式推出! 現在起,你可以在 iOS App Store 下載全新上架的 vocus App。 無論是在通勤路上、日常空檔,或一天結束後的放鬆時刻,都能自在沈浸在內容宇宙中。
Thumbnail
在 vocus 與你一起探索內容、發掘靈感的路上,我們又將啟動新的冒險——vocus App 正式推出! 現在起,你可以在 iOS App Store 下載全新上架的 vocus App。 無論是在通勤路上、日常空檔,或一天結束後的放鬆時刻,都能自在沈浸在內容宇宙中。
Thumbnail
vocus 慶祝推出 App,舉辦 2026 全站慶。推出精選內容與數位商品折扣,訂單免費與紅包抽獎、新註冊會員專屬活動、Boba Boost 贊助抽紅包,以及全站徵文,並邀請你一起來回顧過去的一年, vocus 與創作者共同留下了哪些精彩創作。
Thumbnail
vocus 慶祝推出 App,舉辦 2026 全站慶。推出精選內容與數位商品折扣,訂單免費與紅包抽獎、新註冊會員專屬活動、Boba Boost 贊助抽紅包,以及全站徵文,並邀請你一起來回顧過去的一年, vocus 與創作者共同留下了哪些精彩創作。
Thumbnail
我想要一天分享一點「LLM從底層堆疊的技術」,並且每篇文章長度控制在三分鐘以內,讓大家不會壓力太大,但是又能夠每天成長一點。 回顧 AI說書 - 從0開始 - 129 中說,Bidirectional Encoder Representations from Transformers (BER
Thumbnail
我想要一天分享一點「LLM從底層堆疊的技術」,並且每篇文章長度控制在三分鐘以內,讓大家不會壓力太大,但是又能夠每天成長一點。 回顧 AI說書 - 從0開始 - 129 中說,Bidirectional Encoder Representations from Transformers (BER
Thumbnail
我想要一天分享一點「LLM從底層堆疊的技術」,並且每篇文章長度控制在三分鐘以內,讓大家不會壓力太大,但是又能夠每天成長一點。 我們已經在 AI說書 - 從0開始 - 114 建立了 Transformer 模型,並在 AI說書 - 從0開始 - 115 載入權重並執行 Tokenizing,現
Thumbnail
我想要一天分享一點「LLM從底層堆疊的技術」,並且每篇文章長度控制在三分鐘以內,讓大家不會壓力太大,但是又能夠每天成長一點。 我們已經在 AI說書 - 從0開始 - 114 建立了 Transformer 模型,並在 AI說書 - 從0開始 - 115 載入權重並執行 Tokenizing,現
Thumbnail
我想要一天分享一點「LLM從底層堆疊的技術」,並且每篇文章長度控制在三分鐘以內,讓大家不會壓力太大,但是又能夠每天成長一點。 我們已經在 AI說書 - 從0開始 - 114 建立了 Transformer 模型。 現在我們來載入預訓練權重,預訓練的權重包含 Transformer 的智慧
Thumbnail
我想要一天分享一點「LLM從底層堆疊的技術」,並且每篇文章長度控制在三分鐘以內,讓大家不會壓力太大,但是又能夠每天成長一點。 我們已經在 AI說書 - 從0開始 - 114 建立了 Transformer 模型。 現在我們來載入預訓練權重,預訓練的權重包含 Transformer 的智慧
Thumbnail
我想要一天分享一點「LLM從底層堆疊的技術」,並且每篇文章長度控制在三分鐘以內,讓大家不會壓力太大,但是又能夠每天成長一點。 從 AI說書 - 從0開始 - 82 到 AI說書 - 從0開始 - 85 的說明,有一個很重要的結論:最適合您的模型不一定是排行榜上最好的模型,您需要學習 NLP 評
Thumbnail
我想要一天分享一點「LLM從底層堆疊的技術」,並且每篇文章長度控制在三分鐘以內,讓大家不會壓力太大,但是又能夠每天成長一點。 從 AI說書 - 從0開始 - 82 到 AI說書 - 從0開始 - 85 的說明,有一個很重要的結論:最適合您的模型不一定是排行榜上最好的模型,您需要學習 NLP 評
Thumbnail
我想要一天分享一點「LLM從底層堆疊的技術」,並且每篇文章長度控制在三分鐘以內,讓大家不會壓力太大,但是又能夠每天成長一點。 繼 AI說書 - 從0開始 - 82 與 xxx ,我們談論了衡量 AI 模型的方式,那當你訓練的模型比 State-of-the-Art 還要好並想要進行宣稱時,需要
Thumbnail
我想要一天分享一點「LLM從底層堆疊的技術」,並且每篇文章長度控制在三分鐘以內,讓大家不會壓力太大,但是又能夠每天成長一點。 繼 AI說書 - 從0開始 - 82 與 xxx ,我們談論了衡量 AI 模型的方式,那當你訓練的模型比 State-of-the-Art 還要好並想要進行宣稱時,需要
Thumbnail
我想要一天分享一點「LLM從底層堆疊的技術」,並且每篇文章長度控制在三分鐘以內,讓大家不會壓力太大,但是又能夠每天成長一點。 Transformer 可以透過繼承預訓練模型 (Pretrained Model) 來微調 (Fine-Tune) 以執行下游任務。 Pretrained Mo
Thumbnail
我想要一天分享一點「LLM從底層堆疊的技術」,並且每篇文章長度控制在三分鐘以內,讓大家不會壓力太大,但是又能夠每天成長一點。 Transformer 可以透過繼承預訓練模型 (Pretrained Model) 來微調 (Fine-Tune) 以執行下游任務。 Pretrained Mo
Thumbnail
我想要一天分享一點「LLM從底層堆疊的技術」,並且每篇文章長度控制在三分鐘以內,讓大家不會壓力太大,但是又能夠每天成長一點。 回顧 AI說書 - 從0開始 - 77 ,我們在給定句子 「 Transformers possess surprising emerging features 」的情
Thumbnail
我想要一天分享一點「LLM從底層堆疊的技術」,並且每篇文章長度控制在三分鐘以內,讓大家不會壓力太大,但是又能夠每天成長一點。 回顧 AI說書 - 從0開始 - 77 ,我們在給定句子 「 Transformers possess surprising emerging features 」的情
Thumbnail
我想要一天分享一點「LLM從底層堆疊的技術」,並且每篇文章長度控制在三分鐘以內,讓大家不會壓力太大,但是又能夠每天成長一點。 回顧 AI說書 - 從0開始 - 76 ,我們在給定句子 「 Transformers possess surprising emerging features 」的情
Thumbnail
我想要一天分享一點「LLM從底層堆疊的技術」,並且每篇文章長度控制在三分鐘以內,讓大家不會壓力太大,但是又能夠每天成長一點。 回顧 AI說書 - 從0開始 - 76 ,我們在給定句子 「 Transformers possess surprising emerging features 」的情
Thumbnail
我想要一天分享一點「LLM從底層堆疊的技術」,並且每篇文章長度控制在三分鐘以內,讓大家不會壓力太大,但是又能夠每天成長一點。 回顧 AI說書 - 從0開始 - 75 ,我們在給定句子 「 Transformers possess surprising emerging features 」的情
Thumbnail
我想要一天分享一點「LLM從底層堆疊的技術」,並且每篇文章長度控制在三分鐘以內,讓大家不會壓力太大,但是又能夠每天成長一點。 回顧 AI說書 - 從0開始 - 75 ,我們在給定句子 「 Transformers possess surprising emerging features 」的情
Thumbnail
我想要一天分享一點「LLM從底層堆疊的技術」,並且每篇文章長度控制在三分鐘以內,讓大家不會壓力太大,但是又能夠每天成長一點。 我們已經在AI說書 - 從0開始 - 17中,介紹了大型語言模型 (LLM)世界裡面常用到的Token,現在我們來談談OpenAI的GPT模型如何利用Inference
Thumbnail
我想要一天分享一點「LLM從底層堆疊的技術」,並且每篇文章長度控制在三分鐘以內,讓大家不會壓力太大,但是又能夠每天成長一點。 我們已經在AI說書 - 從0開始 - 17中,介紹了大型語言模型 (LLM)世界裡面常用到的Token,現在我們來談談OpenAI的GPT模型如何利用Inference
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News