算法流程:

  1. 使用損失函數(shù)的一階和二階導(dǎo)數(shù)擬合每棵新樹(shù)。
  2. 加入正則化項(xiàng),防止模型過(guò)擬合
  3. 使用樹(shù)的結(jié)構(gòu)得分(gain)決定分裂點(diǎn),以提高樹(shù)的質(zhì)量。
  4. 使用并行和分布式計(jì)算提升效率。

優(yōu)缺點(diǎn):

適用場(chǎng)景:

2. XGBoost

XGBoost 是 GBDT 的優(yōu)化版本,核心思想仍然是梯度提升,但它在計(jì)算效率、模型精度等方面進(jìn)行了多種優(yōu)化。它通過(guò)使用正則化控制模型復(fù)雜度,防止過(guò)擬合,并且支持分布式計(jì)算和多線程并行,提升了計(jì)算速度。

核心公式

算法流程:

  1. 使用損失函數(shù)的一階和二階導(dǎo)數(shù)擬合每棵新樹(shù)。
  2. 加入正則化項(xiàng),防止模型過(guò)擬合。
  3. 使用樹(shù)的結(jié)構(gòu)得分(gain)決定分裂點(diǎn),以提高樹(shù)的質(zhì)量。
  4. 使用并行和分布式計(jì)算提升效率。

優(yōu)缺點(diǎn):

適用場(chǎng)景:

3. LightGBM

LightGBM 是一個(gè)高效的梯度提升框架,專為大數(shù)據(jù)集和高維數(shù)據(jù)集設(shè)計(jì)。LightGBM 使用基于直方圖(Histogram-based)決策樹(shù)構(gòu)建方法,并在算法設(shè)計(jì)上引入了多個(gè)優(yōu)化,如葉節(jié)點(diǎn)按深度生長(zhǎng)(Leaf-wise Growth)、GOSS(Gradient-based One-Side Sampling)等技術(shù),來(lái)提升訓(xùn)練速度和資源利用率。

核心公式

LightGBM 仍然基于梯度提升的基本思想,但其改進(jìn)在于:

  1. 直方圖近似算法:通過(guò)將連續(xù)特征值離散化到直方圖中,大幅減少了計(jì)算復(fù)雜度,尤其在高維度大規(guī)模數(shù)據(jù)時(shí)。
  2. 葉節(jié)點(diǎn)生長(zhǎng)策略:LightGBM 使用的是葉節(jié)點(diǎn)按深度生長(zhǎng)策略,優(yōu)先選擇提升最大的葉節(jié)點(diǎn)進(jìn)行分裂,而不是按層生長(zhǎng)。這樣能更快找到最優(yōu)分裂,提升訓(xùn)練效率。

算法流程:

  1. 生成直方圖,離散化連續(xù)特征。
  2. 按照葉節(jié)點(diǎn)的增益優(yōu)先生長(zhǎng),選擇分裂。
  3. 利用 GOSS 技術(shù),優(yōu)先選取梯度較大的樣本,提高計(jì)算效率。
  4. 重復(fù)上述步驟,直到達(dá)到預(yù)設(shè)的樹(shù)的數(shù)量或誤差收斂。

優(yōu)缺點(diǎn):

適用場(chǎng)景:

三者的優(yōu)缺點(diǎn)對(duì)比:

模型優(yōu)點(diǎn)缺點(diǎn)適用場(chǎng)景
GBDT穩(wěn)定,適合小數(shù)據(jù)集;無(wú)需特征歸一化和特征工程訓(xùn)練時(shí)間較長(zhǎng),無(wú)法并行處理,調(diào)參復(fù)雜小數(shù)據(jù)集的分類和回歸任務(wù)
XGBoost支持并行計(jì)算,加入正則化防止過(guò)擬合;訓(xùn)練速度快內(nèi)存占用大,調(diào)參復(fù)雜大規(guī)模數(shù)據(jù)集的分類、回歸、排序
LightGBM訓(xùn)練速度快,適合大規(guī)模數(shù)據(jù);內(nèi)存占用少對(duì)小數(shù)據(jù)集不如 XGBoost 穩(wěn)定,模型解釋性較差超大規(guī)模數(shù)據(jù)集,高維任務(wù)

總結(jié)來(lái)說(shuō):

  1. GBDT 更適合處理小規(guī)模數(shù)據(jù)任務(wù),具有穩(wěn)定的表現(xiàn)。
  2. XGBoost 在中大規(guī)模數(shù)據(jù)集上表現(xiàn)優(yōu)異,適合復(fù)雜任務(wù)和需要較強(qiáng)模型解釋性的時(shí)候。
  3. LightGBM 在大數(shù)據(jù)、高維度場(chǎng)景下具有極高的計(jì)算效率,適合大規(guī)模機(jī)器學(xué)習(xí)任務(wù)。

最后,咱們舉一個(gè)全面的案例進(jìn)行比較,大家也有一個(gè)更加深層次的理解~

完整案例

案例標(biāo)題:GBDT vs. XGBoost vs. LightGBM:集成學(xué)習(xí)模型的性能與適用性對(duì)比

要解決的問(wèn)題

在該案例中,我們希望解決一個(gè)典型的分類問(wèn)題,即對(duì)虛擬數(shù)據(jù)集中的數(shù)據(jù)點(diǎn)進(jìn)行準(zhǔn)確分類。數(shù)據(jù)集將具有較大的維度和噪聲。我們比較三種算法模型(GBDT、XGBoost和LightGBM)在分類任務(wù)中的性能和適用性,包括訓(xùn)練速度、模型性能(如AUC-ROC)、調(diào)參難度和模型的可擴(kuò)展性。

目標(biāo)

數(shù)據(jù)集與方法

我們將生成一個(gè)虛擬的二分類數(shù)據(jù)集,其中包含2個(gè)類別的樣本,并具有100個(gè)特征,部分特征具有噪聲。通過(guò)對(duì)比XGBoost、LightGBM和GBDT的分類效果、訓(xùn)練速度和模型復(fù)雜性,得出適用性結(jié)論。

1. 代碼實(shí)現(xiàn)

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split, GridSearchCV
from sklearn.metrics import roc_auc_score, accuracy_score, roc_curve
from sklearn.ensemble import GradientBoostingClassifier
from xgboost import XGBClassifier
import lightgbm as lgb
import time

# 數(shù)據(jù)集
X, y = make_classification(n_samples=10000, n_features=100, n_informative=10,
n_redundant=10, n_classes=2, random_state=42, flip_y=0.01)

# 劃分?jǐn)?shù)據(jù)集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 訓(xùn)練模型、性能指標(biāo)的功能
def evaluate_model(model, X_train, y_train, X_test, y_test):
start_time = time.time()
model.fit(X_train, y_train)
train_time = time.time() - start_time

y_pred = model.predict(X_test)
y_pred_prob = model.predict_proba(X_test)[:, 1]

accuracy = accuracy_score(y_test, y_pred)
roc_auc = roc_auc_score(y_test, y_pred_prob)

return train_time, accuracy, roc_auc

# 1. GBDT model
gbdt = GradientBoostingClassifier()
gbdt_time, gbdt_accuracy, gbdt_auc = evaluate_model(gbdt, X_train, y_train, X_test, y_test)

# 2. XGBoost model
xgb = XGBClassifier(use_label_encoder=False, eval_metric='logloss')
xgb_time, xgb_accuracy, xgb_auc = evaluate_model(xgb, X_train, y_train, X_test, y_test)

# 3. LightGBM model
lgbm = lgb.LGBMClassifier()
lgbm_time, lgbm_accuracy, lgbm_auc = evaluate_model(lgbm, X_train, y_train, X_test, y_test)

# 比較結(jié)果
print(f"GBDT - Time: {gbdt_time:.2f}s, Accuracy: {gbdt_accuracy:.4f}, AUC: {gbdt_auc:.4f}")
print(f"XGBoost - Time: {xgb_time:.2f}s, Accuracy: {xgb_accuracy:.4f}, AUC: {xgb_auc:.4f}")
print(f"LightGBM - Time: {lgbm_time:.2f}s, Accuracy: {lgbm_accuracy:.4f}, AUC: {lgbm_auc:.4f}")

2. 模型調(diào)參與比較

使用GridSearchCV進(jìn)行XGBoost和LightGBM模型的超參數(shù)調(diào)優(yōu),并記錄調(diào)參前后的性能變化。

# XGBoost超參數(shù)調(diào)整
xgb_params = {
'n_estimators': [50, 100],
'learning_rate': [0.01, 0.1],
'max_depth': [3, 6, 9]
}

grid_xgb = GridSearchCV(XGBClassifier(use_label_encoder=False, eval_metric='logloss'), xgb_params, cv=3, scoring='roc_auc')
grid_xgb.fit(X_train, y_train)
print("Best XGBoost Parameters:", grid_xgb.best_params_)
xgb_best = grid_xgb.best_estimator_

# LightGBM超參數(shù)調(diào)整
lgb_params = {
'n_estimators': [50, 100],
'learning_rate': [0.01, 0.1],
'max_depth': [3, 6, 9]
}

grid_lgbm = GridSearchCV(lgb.LGBMClassifier(), lgb_params, cv=3, scoring='roc_auc')
grid_lgbm.fit(X_train, y_train)
print("Best LightGBM Parameters:", grid_lgbm.best_params_)
lgbm_best = grid_lgbm.best_estimator_

3. 模型對(duì)比:可視化分析

接下來(lái),我們將通過(guò)繪制ROC曲線、訓(xùn)練時(shí)間對(duì)比條形圖以及AUC-ROC對(duì)比圖來(lái)進(jìn)行不同模型的性能對(duì)比。

# Plot ROC curves
def plot_roc_curve(models, X_test, y_test, title):
plt.figure(figsize=(10, 6))

for name, model in models.items():
y_pred_prob = model.predict_proba(X_test)[:, 1]
fpr, tpr, _ = roc_curve(y_test, y_pred_prob)
plt.plot(fpr, tpr, label=f"{name} (AUC = {roc_auc_score(y_test, y_pred_prob):.4f})")

plt.plot([0, 1], [0, 1], 'k--')
plt.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate')
plt.title(title)
plt.legend(loc="lower right")
plt.show()

# Model ROC Curves
models = {
"GBDT": gbdt,
"XGBoost": xgb_best,
"LightGBM": lgbm_best
}
plot_roc_curve(models, X_test, y_test, "ROC Curves for GBDT, XGBoost, and LightGBM")

# Plot training time comparison
def plot_training_time(times, title):
plt.figure(figsize=(8, 5))
model_names = ['GBDT', 'XGBoost', 'LightGBM']
plt.barh(model_names, times, color=['#FF6347', '#4682B4', '#32CD32'])
plt.xlabel('Training Time (seconds)')
plt.title(title)
plt.show()

train_times = [gbdt_time, xgb_time, lgbm_time]
plot_training_time(train_times, 'Training Time Comparison')

# Plot AUC comparison
def plot_auc_comparison(aucs, title):
plt.figure(figsize=(8, 5))
model_names = ['GBDT', 'XGBoost', 'LightGBM']
plt.barh(model_names, aucs, color=['#FF6347', '#4682B4', '#32CD32'])
plt.xlabel('AUC Score')
plt.title(title)
plt.show()

aucs = [gbdt_auc, xgb_auc, lgbm_auc]
plot_auc_comparison(aucs, 'AUC Score Comparison')

4. 分析與結(jié)論

訓(xùn)練時(shí)間:10000條數(shù)據(jù)訓(xùn)練模型情況下,XGBoost表現(xiàn)出最快的訓(xùn)練速度,緊隨其后的是LightGBM,而GBDT速度最慢。這表明XGBoost在比較大的數(shù)據(jù)場(chǎng)景中的計(jì)算效率優(yōu)勢(shì)。如果在再大規(guī)模的數(shù)據(jù)集下,可能LightGBM要比XGBoost更快速。

GBDT - Time: 21.93s, Accuracy: 0.9100, AUC: 0.9694
XGBoost - Time: 0.86s, Accuracy: 0.9245, AUC: 0.9781
LightGBM - Time: 1.66s, Accuracy: 0.9305, AUC: 0.9793

AUC評(píng)分:XGBoost和LightGBM在AUC評(píng)分上略高于GBDT,說(shuō)明它們?cè)谔幚碓摲诸悊?wèn)題時(shí)的性能更好。

調(diào)參復(fù)雜度:LightGBM和XGBoost都有較多可調(diào)節(jié)的超參數(shù),但XGBoost由于其算法復(fù)雜度,調(diào)參更加繁瑣,而LightGBM相對(duì)容易。

通過(guò)對(duì)比不同的集成學(xué)習(xí)模型,我們發(fā)現(xiàn)XGBoost和LightGBM在分類任務(wù)上不僅表現(xiàn)優(yōu)異,而且擁有更快的訓(xùn)練速度和更好的擴(kuò)展性。使用這些算法,我們提升了分類準(zhǔn)確率和模型訓(xùn)練速度。

這個(gè)是在10000數(shù)據(jù)量下的測(cè)試,在不同的數(shù)據(jù)量和不同情況下,表現(xiàn)還會(huì)不同。總的來(lái)說(shuō),XGBoost和LightGBM會(huì)更加的高效。

文章轉(zhuǎn)自微信公眾號(hào)@深夜努力寫(xiě)Python

上一篇:

突破XGBoost,XGBoost在股票市場(chǎng)趨勢(shì)預(yù)測(cè)中的應(yīng)用 ??!

下一篇:

突破最強(qiáng)算法模型,GBDT ?。?/h5>
#你可能也喜歡這些API文章!

我們有何不同?

API服務(wù)商零注冊(cè)

多API并行試用

數(shù)據(jù)驅(qū)動(dòng)選型,提升決策效率

查看全部API→
??

熱門場(chǎng)景實(shí)測(cè),選對(duì)API

#AI文本生成大模型API

對(duì)比大模型API的內(nèi)容創(chuàng)意新穎性、情感共鳴力、商業(yè)轉(zhuǎn)化潛力

25個(gè)渠道
一鍵對(duì)比試用API 限時(shí)免費(fèi)

#AI深度推理大模型API

對(duì)比大模型API的邏輯推理準(zhǔn)確性、分析深度、可視化建議合理性

10個(gè)渠道
一鍵對(duì)比試用API 限時(shí)免費(fèi)