?
??主頁?Nowl
🔥專欄《機器學習實戰》?《機器學習》
📑君子坐而論道,少年起而行之?
??
文章目錄
GBDT模型介紹
Boosting
殘差
GBDT的缺點
python代碼實現
代碼
模型參數解釋
結語
GBDT模型介紹
GBDT(Gradient Boosting Decision Tree)也叫做梯度提升決策樹,它的主要思想也是集成學習(由名字可以看出GBDT的弱分類器是決策樹?),即訓練多個子模型,結合子模型來得到最終結果,但他們也有一些區別
Boosting
Boosting是GBDT與傳統集成學習的一個主要區別
傳統的集成學習訓練過程中,分類器之間不會有任何聯系,模型各自獨立訓練最后結合得出結果
?
而Boosting訓練過程中,分類器會根據上一個分類器的結果來調整,重點關注上一個分類器的誤差點,從而更好地提高模型性能
?
殘差
我們接下來來看看分類器之間是怎么聯系的,殘差代表分類器預測結果與真實值的差距
假設我們有一個預測數字的任務,目標值是40,則會有這樣一個過程
- 第一個分類器預測結果為30,則殘差為10
- 第二個分類器去擬合殘差,這時第二個分類器的目標值變成了10,以此類推
- 最后得到的殘差為0,完成任務
可以看到Boosting的思想是每一個分類器去擬合前一個分類器的殘差,最后每個分類器的結果加起來就是真實值
?
GBDT的缺點
- 由于每個分類器要等待上一個分類器的結果,故模型無法并行訓練,消耗的時間可能較多
python代碼實現
代碼
這段代碼使用的數據集是虛擬的,我們這里主要學習模型是如何構建的,在實際任務中將數據集替換為真實數據集即可
# 導入必要的庫
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
from sklearn.ensemble import GradientBoostingClassifier
from sklearn.metrics import accuracy_score# 創建虛構的數據集
X, y = make_classification(n_samples=1000, n_features=20, random_state=42)# 劃分數據集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)# 初始化并訓練GBDT模型
gbdt_model = GradientBoostingClassifier(n_estimators=100, learning_rate=0.1, max_depth=3, random_state=42)
gbdt_model.fit(X_train, y_train)# 預測
y_pred = gbdt_model.predict(X_test)# 評估模型性能
accuracy = accuracy_score(y_test, y_pred)
print(f'Accuracy: {accuracy}')
模型參數解釋
-
n_estimators: 子分類器數量
-
learning_rate: 學習率
-
max_depth: 決策樹最大深度
結語
GBDT是一種優化的集成學習方法,采用了擬合殘差的新思想,廣泛應用于分類任務和回歸任務中,它還有兩個優化方法:XGBoost和LightGBM,之后會做具體介紹,敬請期待
感謝閱讀,覺得有用的話就訂閱下本專欄吧,有錯誤也歡迎指出