【機器學習】機器學習的基本分類-監督學習-梯度提升樹(Gradient Boosting Decision Tree, GBDT)

梯度提升樹是一種基于**梯度提升(Gradient Boosting)**框架的機器學習算法,通過構建多個決策樹并利用每棵樹擬合前一棵樹的殘差來逐步優化模型。


1. 核心思想

  • Boosting:通過逐步調整模型,使后續的模型重點學習前一階段未能正確擬合的數據。
  • 梯度提升:將誤差函數的負梯度作為殘差,指導新一輪模型的訓練。
與隨機森林的區別
特性隨機森林梯度提升樹
基本思想BaggingBoosting
樹的訓練方式并行訓練順序訓練
樹的類型完全樹通常是淺樹(弱學習器)
應用場景抗過擬合、快速訓練高精度、復雜任務

?

2. 算法流程

  1. 輸入

    • 數據集 D = \{ (x_i, y_i) \}_{i=1}^{n}?。
    • 損失函數 L(y, \hat{y}),如平方誤差、對數似然等。
    • 弱學習器個數 T?和學習率 η。
  2. 初始化模型

    f_0(x) = \arg\min_c \sum_{i=1}^n L(y_i, c)
    • f_0 是一個常數,通常為目標變量的均值(回歸)或類別概率的對數(分類)。
  3. 迭代訓練每棵弱學習器(樹)

    • 第 t 次迭代:
      1. 計算第 t?輪的負梯度(殘差):
        r_i^{(t)} = -\left[ \frac{\partial L(y_i, f(x_i))}{\partial f(x_i)} \right]_{f=f_{t-1}}
        殘差反映當前模型未能擬合的部分。
      2. 構建決策樹 h_t(x) 擬合殘差 r_i^{(t)}
      3. 計算最佳步長(葉節點輸出值): \gamma_t = \arg\min_\gamma \sum_{i=1}^n L\left(y_i, f_{t-1}(x_i) + \gamma h_t(x_i)\right)
      4. 更新模型: f_t(x) = f_{t-1}(x) + \eta \gamma_t h_t(x) 其中 η?是學習率,控制每棵樹的貢獻大小。
  4. 輸出模型: 最終模型為:

    f_T(x) = \sum_{t=1}^T \eta \gamma_t h_t(x)

?

3. 損失函數

GBDT 可靈活選擇損失函數,以下是常用的幾種:

  1. 平方誤差(MSE,回歸問題)

    L(y, \hat{y}) = \frac{1}{2} (y - \hat{y})^2
    • 負梯度: r_i = y_i - f(x_i)
  2. 對數似然(Log-Loss,二分類問題)

    L(y, \hat{y}) = -\left[ y \log \sigma(\hat{y}) + (1-y) \log(1-\sigma(\hat{y})) \right]
    • 負梯度: r_i = y_i - \sigma(f(x_i))
  3. 指數損失(Adaboost)

    L(y, \hat{y}) = e^{-y\hat{y}}

?4. GBDT 的優缺點

優點
  1. 靈活性:支持回歸和分類任務,且損失函數可定制。
  2. 高精度:由于采用 Boosting 框架,能取得非常好的預測效果。
  3. 特征選擇:內置特征重要性評估,幫助篩選關鍵特征。
  4. 處理缺失值:部分實現(如 XGBoost)可以自動處理缺失值。
缺點
  1. 訓練時間長:由于弱學習器依次構建,訓練過程較慢。
  2. 對參數敏感:需要調整學習率、樹的數量、最大深度等參數。
  3. 不擅長高維稀疏數據:相比線性模型和神經網絡,GBDT 在處理高維數據(如文本數據)時表現一般。

?5. GBDT 的改進

  1. XGBoost

    • 增加正則化項,控制模型復雜度。
    • 支持并行化計算,加速訓練。
    • 提供更高效的特征分裂方法。
  2. LightGBM

    • 提出葉子分裂(Leaf-Wise)策略。
    • 適合大規模數據和高維特征場景。
  3. CatBoost

    • 專門針對分類特征優化。
    • 避免目標泄露(Target Leakage)。

?6. GBDT 的代碼實現

以下是 GBDT 的分類問題實現:

from sklearn.datasets import make_classification
from sklearn.ensemble import GradientBoostingClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score# 生成數據
X, y = make_classification(n_samples=1000, n_features=10, n_informative=5, random_state=42)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)# 創建 GBDT 模型
gbdt = GradientBoostingClassifier(n_estimators=100, learning_rate=0.1, max_depth=3, random_state=42)
gbdt.fit(X_train, y_train)# 預測
y_pred = gbdt.predict(X_test)
accuracy = accuracy_score(y_test, y_pred)
print("分類準確率:", accuracy)# 特征重要性
import matplotlib.pyplot as plt
import numpy as npfeature_importances = gbdt.feature_importances_
indices = np.argsort(feature_importances)[::-1]plt.figure(figsize=(10, 6))
plt.title("Feature Importance")
plt.bar(range(X.shape[1]), feature_importances[indices], align="center")
plt.xticks(range(X.shape[1]), indices)
plt.show()

輸出結果

分類準確率: 0.9366666666666666


7. 應用場景

  1. 回歸問題:如預測房價、商品銷量。
  2. 分類問題:如金融風險預測、垃圾郵件分類。
  3. 排序問題:如搜索引擎的結果排序。
  4. 時間序列問題:預測趨勢或模式。

GBDT 是機器學習中的經典算法,盡管深度學習在許多領域占據主導地位,但在表格數據和中小規模數據集的應用中,GBDT 仍然是非常強大的工具。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/62203.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/62203.shtml
英文地址,請注明出處:http://en.pswp.cn/web/62203.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【機器學習 | 基于Lasso回歸和隨機森林的上海鏈家二手房房價預測】

文章目錄 🏳??🌈 1. 導入模塊🏳??🌈 2. Pandas數據處理2.1 讀取數據2.2 查看數據信息2.3 去除重復數據2.4 去除缺失數據2.5 面積、價格、單價、樓層、建筑時間數據提取2.6 朝向數據處理 🏳??🌈 3. 特…

【HarmonyOS NEXT】flexShrink屬性

一、背景 希望達到的布局效果是文字與按鈕左右對齊,居中顯示,但實際效果中按鈕的顯示與效果不符,如下圖所示 二、問題 按鈕是用row組件包裹的text,左右padding給的是一樣的大小,但是明顯右邊padding會比左邊padding大…

CentOS 7 上安裝 MySQL 8.0.40 (二進制安裝)

要在 CentOS 7 上安裝 MySQL 8.0.40,按照以下步驟操作: 下載安裝包。 https://dev.mysql.com/downloads/mysql/ 下載之前查看系統c版本 解壓安裝包 首先,解壓下載的 .tar.xz 安裝包。 cd /path/to/your/downloads tar -xvf mysql-8.0…

PHP語法學習(第六天)

💡依照慣例,回顧一下昨天講的內容 PHP語法學習(第五天)主要講了PHP中的常量和運算符的運用。 🔥 想要學習更多PHP語法相關內容點擊“PHP專欄” 今天給大家講課的角色是🍍菠蘿吹雪,“我菠蘿吹雪吹的不是雪,而…

Python Web 開發:使用 FastAPI 進行依賴注入與異常處理

Python Web 開發:使用 FastAPI 進行依賴注入與異常處理 目錄 🛠? 依賴注入與 FastAPI 高級特性?? 自定義異常類的實現與應用🚨 使用 HTTPException 處理常見錯誤🌍 全局異常處理器的設計與實現?? 異常處理與 API 響應的整合…

免押租賃系統助力資源共享新模式開創便捷租賃體驗

內容概要 免押租賃系統,聽起來是不是很酷?這個新模式不僅僅是為了讓你少花點錢,它的到來簡直就是個革命!以前,租東西時首先想到的就是那個令人心痛的押金,對吧?但現在,免押租賃系統…

oracle之用戶的相關操作

(1)創建用戶(sys用戶下操作) 簡單創建用戶如下: CREATE USER username IDENTIFIED BY password; 如果需要自定義更多的信息,如用戶使用的表空間等,可以使用如下: CREATE USER mall IDENTIFIED BY 12345…

第77期 | GPTSecurity周報

GPTSecurity是一個涵蓋了前沿學術研究和實踐經驗分享的社區,集成了生成預訓練Transformer(GPT)、人工智能生成內容(AIGC)以及大語言模型(LLM)等安全領域應用的知識。在這里,您可以找…

如何通過自學成長為一名后端開發工程師?

大家好,我是袁庭新。最近,有星友向我提出了一個很好的問題:如何通過自學成為一名后端開發工程師? 為了解答這個疑問,我特意制作了一個視頻來詳細分享我的看法和建議。 戳鏈接:如何通過自學成長為一名后端開…

Linux---對緩沖區的簡單理解--第一個系統程序

前序: 首先先理解一下什么是回車與換行;回車和換行是兩個概念,它們不是一個東西; 回車:光標回到開始;換行:換到下一行; 如下圖: 行緩沖區 如何理解緩沖區問題? 可以認為&#xff0…

力扣每日一題-999. 可以被一步捕獲的棋子數

題目 給定一個 8 x 8 的棋盤,只有一個 白色的車,用字符 R 表示。棋盤上還可能存在白色的象 B 以及黑色的卒 p。空方塊用字符 . 表示。車可以按水平或豎直方向(上,下,左,右)移動任意個方格直到它…

多模態大型語言模型MM-1.5采用數據驅動的方法,通過不斷優化數據組合提高模型性能

多模態大型語言模型MM-1.5采用數據驅動的方法,通過不斷優化數據組合提高模型性能 MM-1.5模型的設計核心在于其數據驅動的方法,這意味著模型的性能在很大程度上取決于所使用的數據類型和組合。這種方法的實施細節可以從以下幾個方面來展開: …

[Python學習日記-70] 元類

[Python學習日記-70] 元類 簡介 什么是元類 關鍵字 class 創建類的流程分析 自定義元類控制類的創建 自定義元類控制類的調用 自定義元類的屬性查找 自定義元類的應用與練習 簡介 在上一篇章當中我們已經了解了面向對象的各種內置函數了,本篇我們將講述“元類…

數據結構題庫11

第五章 樹和二叉樹 一、單項選擇題 1.關于二叉樹的下列說法正確的是 (1)。 (1):A.二叉樹的度為2 B.二叉樹的度可以小于2 C.每一個結點的度都為2 D.至少有一個結點的度為 2.設深度為h(h>0)的二…

【學習路線】Java

Java基礎 基礎 基礎語法 面向對象 集合框架 JCF 進階 并發編程 JVM 企業級開發 框架 Spring Boot Spring Cloud 分布式 高性能 高可用 安全 基建 Docker 實戰 數據庫 MySQL Redis 計算機基礎 計算機組成原理 操作系統 計算機網絡 數據結構與算法 設計模式 參考:…

學生公寓智能限電系統的功能和作用

學生公寓智能限電系統?是一種用于管理和限制學生公寓用電的設備和技術,旨在確保用電安全、防止火災事故,并促進節能減排。以下是關于學生公寓智能限電系統的詳細介紹: 1、功能和作用 智能限電系統通過以下功能來管理和限制用電&#xff1a…

【開發語言】層次狀態機(HSM)介紹

層次狀態機(Hierarchical State Machine, HSM),從基本原理、結構設計、實現方法以及如何結合 Qt 進行具體實現等方面進行分析。 1. 層次狀態機的基本原理 層次狀態機是一種用于管理復雜系統行為的狀態機模型,它通過將狀態組織成…

MYSQL PARTITIONING分區操作和性能測試

PARTITION OR NOT PARTITION IN MYSQl Bill Karwin says “In most circumstances, you’re better off using indexes instead of partitioning as your main method of query optimization.” According to RICK JAMES: “It is so tempting to believe that PARTITIONing wi…

深入解析 Loss 減少方式:mean和sum的區別及其在大語言模型中的應用 (中英雙語)

深入解析 Loss 減少方式:mean 和 sum 的區別及其在大語言模型中的應用 在訓練大語言模型(Large Language Models, LLM)時,損失函數(Loss Function)的處理方式對模型的性能和優化過程有顯著影響。本文以 re…