日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

GBDT算法原理及Python实现

發布時間:2025/5/22 编程问答 33 如意码农
生活随笔 收集整理的這篇文章主要介紹了 GBDT算法原理及Python实现 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、概述

??GBDT(Gradient Boosting Decision Tree,梯度提升決策樹)是集成學習中提升(Boosting)方法的典型代表。它以決策樹(通常是 CART 樹,即分類回歸樹)作為弱學習器,通過迭代的方式,不斷擬合殘差(回歸任務)或負梯度(分類任務),逐步構建一系列決策樹,最終將這些樹的預測結果進行累加,得到最終的預測值。

二、算法原理

1. 梯度下降思想?

??梯度下降是一種常用的優化算法,用于尋找函數的最小值。在 GBDT 中,它扮演著至關重要的角色。假設我們有一個損失函數\(L\left( y,\hat{y} \right)\),其中\(y\)是真實值,\(\hat y\)是預測值。梯度下降的目標就是通過不斷調整模型參數,使得損失函數的值最小化。具體來說,每次迭代時,沿著損失函數關于參數的負梯度方向更新參數,以逐步接近最優解。在 GBDT 中,雖然沒有顯式地更新參數(通過構建多顆決策樹來擬合目標),但擬合的目標是損失函數的負梯度,本質上也是利用了梯度下降的思想。

2. 決策樹的構建?

??GBDT 使用決策樹作為弱學習器。決策樹是一種基于樹結構的預測模型,它通過對數據特征的不斷分裂,將數據劃分成不同的子集,每個子集對應樹的一個節點。在每個節點上,通過某種準則(如回歸任務中的平方誤差最小化,分類任務中的基尼指數最小化)選擇最優的特征和分裂點,使得劃分后的子集在目標變量上更加 “純凈” 或具有更好的區分度。通過遞歸地進行特征分裂,直到滿足停止條件(如達到最大樹深度、節點樣本數小于閾值等),從而構建出一棵完整的決策樹。

3. 迭代擬合的過程?

(1) 初始化模型

??首先,初始化一個簡單的模型,通常是一個常數模型,記為\(f_0(X)\) ,其預測值為所有樣本真實值的均值(回歸任務)或多數類(分類任務),記為\(\hat y_0\)。此時,模型的預測結果與真實值之間存在誤差。

(2) 計算殘差或負梯度

??在回歸任務中,計算每個樣本的殘差,即真實值\(y_i\)與當前模型預測值\(\hat y_{i,t-1}\)的差值\(r_{i,t}=y_i-\hat y_{i,t-1}\),其中表示迭代的輪數。在分類任務中,計算損失函數關于當前模型預測值的負梯度$$g_{i,t}=-\frac{\vartheta L(y_i,\hat y_{i,t-1})}{\vartheta \hat y_{i,t-1}}$$

(3) 擬合決策樹

??使用計算得到的殘差(回歸任務)或負梯度(分類任務)作為新的目標值,訓練一棵新的決策樹\(f_t(X)\)。這棵樹旨在擬合當前模型的誤差,從而彌補當前模型的不足。

(4) 更新模型

??根據新訓練的決策樹,更新當前模型。更新公式為\(\hat y_{i,t}=\hat y_{i,t-1}+\alpha f_t(x_i)\),其中是學習率(也稱為步長),用于控制每棵樹對模型更新的貢獻程度。學習率較小可以使模型訓練更加穩定,但需要更多的迭代次數;學習率較大則可能導致模型收斂過快,甚至無法收斂。

(5) 重復迭代

??重復步驟 (2)–(4)步,不斷訓練新的決策樹并更新模型,直到達到預設的迭代次數、損失函數收斂到一定程度或滿足其他停止條件為止。最終,GBDT 模型由多棵決策樹組成,其預測結果是所有決策樹預測結果的累加。

算法過程圖示



??GBDT 算法將梯度下降思想與決策樹相結合,通過迭代擬合殘差或負梯度,逐步構建一個強大的集成模型。它在處理復雜數據和非線性關系時表現較為出色,在數據挖掘、機器學習等領域得到了廣泛的應用。然而,GBDT 也存在一些缺點,如訓練時間較長、對異常值較為敏感等,在實際應用中需要根據具體情況進行優化和調整 。

三、Python實現

(環境:Python 3.11,scikit-learn 1.5.1)

分類情形

from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
from sklearn.ensemble import GradientBoostingClassifier
from sklearn import metrics # 生成樣本數據
X, y = make_classification(n_samples=1000, n_features=50, n_informative=10, n_redundant=5, random_state=1) # 劃分訓練集和測試集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=1) # 創建GDBT分類模型
gbc = GradientBoostingClassifier(n_estimators=100, learning_rate=1.0, max_depth=1, random_state=1) # 訓練模型
gbc.fit(X_train, y_train) # 進行預測
y_pred = gbc.predict(X_test) # 計算準確率
accuracy = metrics.accuracy_score(y_test,y_pred)
print('準確率為:',accuracy)

回歸情形

from sklearn.datasets import make_regression
from sklearn.ensemble import GradientBoostingRegressor
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error # 生成樣本數據
X, y = make_regression(n_samples=1000, n_features=10, n_informative=5, noise=0.1, random_state=42) # 劃分訓練集和測試集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) # 創建GDBT回歸模型
model = GradientBoostingRegressor(n_estimators=100, learning_rate=0.1, random_state=42) # 訓練模型
model.fit(X_train, y_train) # 在測試集上進行預測
y_pred = model.predict(X_test) # 計算均方誤差
mse = mean_squared_error(y_test, y_pred)
print(f"MSE: {mse}")

End.

下載

總結

以上是生活随笔為你收集整理的GBDT算法原理及Python实现的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。