【資料分析】揭開機器學習競賽冠軍模型的秘密 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 正則化項,以進一步防止過擬合。
3會員
19內容數
留言0
查看全部
發表第一個留言支持創作者!
JayRay 的沙龍 的其他內容
本篇文章介紹陰性(Negative)和陽性(Positive)的概念,這些術語源於統計學和醫學檢測,廣泛應用於二分類問題的預測模型表現評估。本文解釋了真陽性、真陰性、假陽性和假陰性的定義及其在不同應用場景(中的重要性,並探討瞭如何選擇合適的評估指標和調整模型閾值,以提高模型性能與業務決策的有效性。
多重共線性是指迴歸模型中,自變數(特徵)之間存在高度線性相關的現象,這會導致模型對各變數獨立影響估計的困難,並降低其解釋性和預測能力。本文將探討多重共線性的定義、成因、影響以及如何識別和解決這一問題,從而提升模型的穩定性和準確性。
在機器學習和數據分析中,在分類任務中標籤不平衡是普遍存在的問題。本文探討了標籤不平衡對模型訓練和預測性能的影響,並提供解決方案,例如過採樣、欠採樣、調整類別權重和使用適合的不平衡數據評估指標。透過這些方法,能夠提高模型在類別上的預測準確性,從而促進更優化的機器學習應用。
在機器學習中,超參數的設定對模型的性能至關重要。本文介紹了主要的超參數調整方法,包括網格搜索、隨機搜索、貝葉斯優化、交叉驗證以及自適應搜索算法。每種方法的優缺點詳細說明,幫助讀者選擇最合適的調整策略。透過這些技術,可以有效提高模型的泛化能力與性能,並實現更好的機器學習效果。
過擬合是機器學習中的一個常見問題,指模型在訓練數據上表現優異但在未見過的測試數據上效果不佳。本文介紹了多種避免過擬合的方法,包括增加數據量、使用正則化、交叉驗證、簡化模型結構以及學習曲線分析等。透過這些策略,能夠提升模型的泛化能力和在未來預測中的可靠性,幫助讀者更好地理解和解決過擬合問題。
在評估預測模型的準確率時,選用合適的評估方法至關重要。本文探討了不同的回歸和分類指標,如均方誤差(MSE)、平均絕對誤差(MAE)及準確率等。透過這些評估指標,更全面地理解模型性能,避免因不當評估而錯失優良模型。本文章還列舉了多種常見誤區和情境,以幫助讀者選擇最合適的評估方法,從而提升模型性能。 
本篇文章介紹陰性(Negative)和陽性(Positive)的概念,這些術語源於統計學和醫學檢測,廣泛應用於二分類問題的預測模型表現評估。本文解釋了真陽性、真陰性、假陽性和假陰性的定義及其在不同應用場景(中的重要性,並探討瞭如何選擇合適的評估指標和調整模型閾值,以提高模型性能與業務決策的有效性。
多重共線性是指迴歸模型中,自變數(特徵)之間存在高度線性相關的現象,這會導致模型對各變數獨立影響估計的困難,並降低其解釋性和預測能力。本文將探討多重共線性的定義、成因、影響以及如何識別和解決這一問題,從而提升模型的穩定性和準確性。
在機器學習和數據分析中,在分類任務中標籤不平衡是普遍存在的問題。本文探討了標籤不平衡對模型訓練和預測性能的影響,並提供解決方案,例如過採樣、欠採樣、調整類別權重和使用適合的不平衡數據評估指標。透過這些方法,能夠提高模型在類別上的預測準確性,從而促進更優化的機器學習應用。
在機器學習中,超參數的設定對模型的性能至關重要。本文介紹了主要的超參數調整方法,包括網格搜索、隨機搜索、貝葉斯優化、交叉驗證以及自適應搜索算法。每種方法的優缺點詳細說明,幫助讀者選擇最合適的調整策略。透過這些技術,可以有效提高模型的泛化能力與性能,並實現更好的機器學習效果。
過擬合是機器學習中的一個常見問題,指模型在訓練數據上表現優異但在未見過的測試數據上效果不佳。本文介紹了多種避免過擬合的方法,包括增加數據量、使用正則化、交叉驗證、簡化模型結構以及學習曲線分析等。透過這些策略,能夠提升模型的泛化能力和在未來預測中的可靠性,幫助讀者更好地理解和解決過擬合問題。
在評估預測模型的準確率時,選用合適的評估方法至關重要。本文探討了不同的回歸和分類指標,如均方誤差(MSE)、平均絕對誤差(MAE)及準確率等。透過這些評估指標,更全面地理解模型性能,避免因不當評估而錯失優良模型。本文章還列舉了多種常見誤區和情境,以幫助讀者選擇最合適的評估方法,從而提升模型性能。 
你可能也想看
Google News 追蹤
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
美國總統大選只剩下三天, 我們觀察一整週民調與金融市場的變化(包含賭局), 到本週五下午3:00前為止, 誰是美國總統幾乎大概可以猜到60-70%的機率, 本篇文章就是以大選結局為主軸來討論近期甚至到未來四年美股可能的改變
Thumbnail
Faker昨天真的太扯了,中國主播王多多點評的話更是精妙,分享給各位 王多多的點評 「Faker是我們的處境,他是LPL永遠繞不開的一個人和話題,所以我們特別渴望在決賽跟他相遇,去直面我們的處境。 我們曾經稱他為最高的山,最長的河,以為山海就是盡頭,可是Faker用他28歲的年齡...
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
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
美國總統大選只剩下三天, 我們觀察一整週民調與金融市場的變化(包含賭局), 到本週五下午3:00前為止, 誰是美國總統幾乎大概可以猜到60-70%的機率, 本篇文章就是以大選結局為主軸來討論近期甚至到未來四年美股可能的改變
Thumbnail
Faker昨天真的太扯了,中國主播王多多點評的話更是精妙,分享給各位 王多多的點評 「Faker是我們的處境,他是LPL永遠繞不開的一個人和話題,所以我們特別渴望在決賽跟他相遇,去直面我們的處境。 我們曾經稱他為最高的山,最長的河,以為山海就是盡頭,可是Faker用他28歲的年齡...
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