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

更新於 2024/09/06閱讀時間約 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
7會員
20內容數
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
JayRay 的沙龍 的其他內容
本篇文章介紹陰性(Negative)和陽性(Positive)的概念,這些術語源於統計學和醫學檢測,廣泛應用於二分類問題的預測模型表現評估。本文解釋了真陽性、真陰性、假陽性和假陰性的定義及其在不同應用場景(中的重要性,並探討瞭如何選擇合適的評估指標和調整模型閾值,以提高模型性能與業務決策的有效性。
多重共線性是指迴歸模型中,自變數(特徵)之間存在高度線性相關的現象,這會導致模型對各變數獨立影響估計的困難,並降低其解釋性和預測能力。本文將探討多重共線性的定義、成因、影響以及如何識別和解決這一問題,從而提升模型的穩定性和準確性。
在機器學習和數據分析中,在分類任務中標籤不平衡是普遍存在的問題。本文探討了標籤不平衡對模型訓練和預測性能的影響,並提供解決方案,例如過採樣、欠採樣、調整類別權重和使用適合的不平衡數據評估指標。透過這些方法,能夠提高模型在類別上的預測準確性,從而促進更優化的機器學習應用。
在機器學習中,超參數的設定對模型的性能至關重要。本文介紹了主要的超參數調整方法,包括網格搜索、隨機搜索、貝葉斯優化、交叉驗證以及自適應搜索算法。每種方法的優缺點詳細說明,幫助讀者選擇最合適的調整策略。透過這些技術,可以有效提高模型的泛化能力與性能,並實現更好的機器學習效果。
過擬合是機器學習中的一個常見問題,指模型在訓練數據上表現優異但在未見過的測試數據上效果不佳。本文介紹了多種避免過擬合的方法,包括增加數據量、使用正則化、交叉驗證、簡化模型結構以及學習曲線分析等。透過這些策略,能夠提升模型的泛化能力和在未來預測中的可靠性,幫助讀者更好地理解和解決過擬合問題。
在評估預測模型的準確率時,選用合適的評估方法至關重要。本文探討了不同的回歸和分類指標,如均方誤差(MSE)、平均絕對誤差(MAE)及準確率等。透過這些評估指標,更全面地理解模型性能,避免因不當評估而錯失優良模型。本文章還列舉了多種常見誤區和情境,以幫助讀者選擇最合適的評估方法,從而提升模型性能。 
本篇文章介紹陰性(Negative)和陽性(Positive)的概念,這些術語源於統計學和醫學檢測,廣泛應用於二分類問題的預測模型表現評估。本文解釋了真陽性、真陰性、假陽性和假陰性的定義及其在不同應用場景(中的重要性,並探討瞭如何選擇合適的評估指標和調整模型閾值,以提高模型性能與業務決策的有效性。
多重共線性是指迴歸模型中,自變數(特徵)之間存在高度線性相關的現象,這會導致模型對各變數獨立影響估計的困難,並降低其解釋性和預測能力。本文將探討多重共線性的定義、成因、影響以及如何識別和解決這一問題,從而提升模型的穩定性和準確性。
在機器學習和數據分析中,在分類任務中標籤不平衡是普遍存在的問題。本文探討了標籤不平衡對模型訓練和預測性能的影響,並提供解決方案,例如過採樣、欠採樣、調整類別權重和使用適合的不平衡數據評估指標。透過這些方法,能夠提高模型在類別上的預測準確性,從而促進更優化的機器學習應用。
在機器學習中,超參數的設定對模型的性能至關重要。本文介紹了主要的超參數調整方法,包括網格搜索、隨機搜索、貝葉斯優化、交叉驗證以及自適應搜索算法。每種方法的優缺點詳細說明,幫助讀者選擇最合適的調整策略。透過這些技術,可以有效提高模型的泛化能力與性能,並實現更好的機器學習效果。
過擬合是機器學習中的一個常見問題,指模型在訓練數據上表現優異但在未見過的測試數據上效果不佳。本文介紹了多種避免過擬合的方法,包括增加數據量、使用正則化、交叉驗證、簡化模型結構以及學習曲線分析等。透過這些策略,能夠提升模型的泛化能力和在未來預測中的可靠性,幫助讀者更好地理解和解決過擬合問題。
在評估預測模型的準確率時,選用合適的評估方法至關重要。本文探討了不同的回歸和分類指標,如均方誤差(MSE)、平均絕對誤差(MAE)及準確率等。透過這些評估指標,更全面地理解模型性能,避免因不當評估而錯失優良模型。本文章還列舉了多種常見誤區和情境,以幫助讀者選擇最合適的評估方法,從而提升模型性能。 
你可能也想看
Google News 追蹤
Thumbnail
*合作聲明與警語: 本文係由國泰世華銀行邀稿。 證券服務係由國泰世華銀行辦理共同行銷證券經紀開戶業務,定期定額(股)服務由國泰綜合證券提供。   剛出社會的時候,很常在各種 Podcast 或 YouTube 甚至是在朋友間聊天,都會聽到各種市場動態、理財話題,像是:聯準會降息或是近期哪些科
Thumbnail
我想要一天分享一點「LLM從底層堆疊的技術」,並且每篇文章長度控制在三分鐘以內,讓大家不會壓力太大,但是又能夠每天成長一點。 回顧 AI說書 - 從0開始 - 129 中說,Bidirectional Encoder Representations from Transformers (BER
我想要一天分享一點「LLM從底層堆疊的技術」,並且每篇文章長度控制在三分鐘以內,讓大家不會壓力太大,但是又能夠每天成長一點。 在某些情況下,別人提供的 Pretrained Transformer Model 效果不盡人意,可能會想要自己做 Pretrained Model,但是這會耗費大量運
Thumbnail
我想要一天分享一點「LLM從底層堆疊的技術」,並且每篇文章長度控制在三分鐘以內,讓大家不會壓力太大,但是又能夠每天成長一點。 我們已經在 AI說書 - 從0開始 - 114 建立了 Transformer 模型,並在 AI說書 - 從0開始 - 115 載入權重並執行 Tokenizing,現
Thumbnail
我想要一天分享一點「LLM從底層堆疊的技術」,並且每篇文章長度控制在三分鐘以內,讓大家不會壓力太大,但是又能夠每天成長一點。 我們已經在 AI說書 - 從0開始 - 114 建立了 Transformer 模型。 現在我們來載入預訓練權重,預訓練的權重包含 Transformer 的智慧
Thumbnail
我想要一天分享一點「LLM從底層堆疊的技術」,並且每篇文章長度控制在三分鐘以內,讓大家不會壓力太大,但是又能夠每天成長一點。 從 AI說書 - 從0開始 - 82 到 AI說書 - 從0開始 - 85 的說明,有一個很重要的結論:最適合您的模型不一定是排行榜上最好的模型,您需要學習 NLP 評
Thumbnail
我想要一天分享一點「LLM從底層堆疊的技術」,並且每篇文章長度控制在三分鐘以內,讓大家不會壓力太大,但是又能夠每天成長一點。 繼 AI說書 - 從0開始 - 82 與 xxx ,我們談論了衡量 AI 模型的方式,那當你訓練的模型比 State-of-the-Art 還要好並想要進行宣稱時,需要
Thumbnail
我想要一天分享一點「LLM從底層堆疊的技術」,並且每篇文章長度控制在三分鐘以內,讓大家不會壓力太大,但是又能夠每天成長一點。 Transformer 可以透過繼承預訓練模型 (Pretrained Model) 來微調 (Fine-Tune) 以執行下游任務。 Pretrained Mo
Thumbnail
我想要一天分享一點「LLM從底層堆疊的技術」,並且每篇文章長度控制在三分鐘以內,讓大家不會壓力太大,但是又能夠每天成長一點。 回顧 AI說書 - 從0開始 - 75 ,我們在給定句子 「 Transformers possess surprising emerging features 」的情
機器學習領域的專業人士可以從這篇文章中獲得寶貴的見解。 追求更大的數據集和更強大的模型一直是提升性能的核心策略。 以下是我在機器學習領域工作7年後的三個重大體悟。 ▋體悟1 - 大數據的重要性 自2009年ImageNet問世以來, 數據集的規模和質量對機器學習的影響越
我想要一天分享一點「LLM從底層堆疊的技術」,並且每篇文章長度控制在三分鐘以內,讓大家不會壓力太大,但是又能夠每天成長一點。 我們已經在AI說書 - 從0開始 - 20中,闡述GPT模型的Supervised and Unsupervised觀點,接著一樣引述書籍:Transformers f
Thumbnail
*合作聲明與警語: 本文係由國泰世華銀行邀稿。 證券服務係由國泰世華銀行辦理共同行銷證券經紀開戶業務,定期定額(股)服務由國泰綜合證券提供。   剛出社會的時候,很常在各種 Podcast 或 YouTube 甚至是在朋友間聊天,都會聽到各種市場動態、理財話題,像是:聯準會降息或是近期哪些科
Thumbnail
我想要一天分享一點「LLM從底層堆疊的技術」,並且每篇文章長度控制在三分鐘以內,讓大家不會壓力太大,但是又能夠每天成長一點。 回顧 AI說書 - 從0開始 - 129 中說,Bidirectional Encoder Representations from Transformers (BER
我想要一天分享一點「LLM從底層堆疊的技術」,並且每篇文章長度控制在三分鐘以內,讓大家不會壓力太大,但是又能夠每天成長一點。 在某些情況下,別人提供的 Pretrained Transformer Model 效果不盡人意,可能會想要自己做 Pretrained Model,但是這會耗費大量運
Thumbnail
我想要一天分享一點「LLM從底層堆疊的技術」,並且每篇文章長度控制在三分鐘以內,讓大家不會壓力太大,但是又能夠每天成長一點。 我們已經在 AI說書 - 從0開始 - 114 建立了 Transformer 模型,並在 AI說書 - 從0開始 - 115 載入權重並執行 Tokenizing,現
Thumbnail
我想要一天分享一點「LLM從底層堆疊的技術」,並且每篇文章長度控制在三分鐘以內,讓大家不會壓力太大,但是又能夠每天成長一點。 我們已經在 AI說書 - 從0開始 - 114 建立了 Transformer 模型。 現在我們來載入預訓練權重,預訓練的權重包含 Transformer 的智慧
Thumbnail
我想要一天分享一點「LLM從底層堆疊的技術」,並且每篇文章長度控制在三分鐘以內,讓大家不會壓力太大,但是又能夠每天成長一點。 從 AI說書 - 從0開始 - 82 到 AI說書 - 從0開始 - 85 的說明,有一個很重要的結論:最適合您的模型不一定是排行榜上最好的模型,您需要學習 NLP 評
Thumbnail
我想要一天分享一點「LLM從底層堆疊的技術」,並且每篇文章長度控制在三分鐘以內,讓大家不會壓力太大,但是又能夠每天成長一點。 繼 AI說書 - 從0開始 - 82 與 xxx ,我們談論了衡量 AI 模型的方式,那當你訓練的模型比 State-of-the-Art 還要好並想要進行宣稱時,需要
Thumbnail
我想要一天分享一點「LLM從底層堆疊的技術」,並且每篇文章長度控制在三分鐘以內,讓大家不會壓力太大,但是又能夠每天成長一點。 Transformer 可以透過繼承預訓練模型 (Pretrained Model) 來微調 (Fine-Tune) 以執行下游任務。 Pretrained Mo
Thumbnail
我想要一天分享一點「LLM從底層堆疊的技術」,並且每篇文章長度控制在三分鐘以內,讓大家不會壓力太大,但是又能夠每天成長一點。 回顧 AI說書 - 從0開始 - 75 ,我們在給定句子 「 Transformers possess surprising emerging features 」的情
機器學習領域的專業人士可以從這篇文章中獲得寶貴的見解。 追求更大的數據集和更強大的模型一直是提升性能的核心策略。 以下是我在機器學習領域工作7年後的三個重大體悟。 ▋體悟1 - 大數據的重要性 自2009年ImageNet問世以來, 數據集的規模和質量對機器學習的影響越
我想要一天分享一點「LLM從底層堆疊的技術」,並且每篇文章長度控制在三分鐘以內,讓大家不會壓力太大,但是又能夠每天成長一點。 我們已經在AI說書 - 從0開始 - 20中,闡述GPT模型的Supervised and Unsupervised觀點,接著一樣引述書籍:Transformers f