集成學習 —— 梯度提升樹GBDT、XGBoost

目錄

一、梯度提升樹?

1、殘差提升樹?Boosting Decision Tree ? ? ??

2、梯度提升樹 Gradient Boosting Decision Tree

二、構建案例

1、?初始化弱學習器(CART樹):

2、 構建第1個弱學習器

3、 構建第2個弱學習器

4、 構建第3個弱學習器

5、 構建最終弱學習器

6、 構建總結

三、XGBoost

1、Xgb的構建思想

2、公式

3、XGBoost關鍵優勢

一、梯度提升樹?

1、殘差提升樹?Boosting Decision Tree ? ? ??

????????思想:通過擬合殘差的思想來進行提升,殘差:真實值 - 預測值

? ? ? ? 例如:

2、梯度提升樹 Gradient Boosting Decision Tree

????????梯度提升樹不再擬合殘差,而是利用梯度下降的近似方法,利用損失函數的負梯度作為提升樹算法中的殘差近似值。

????????GBDT 擬合的負梯度就是殘差。如果我們的 GBDT 進行的是分類問題,則損失函數變為 logloss,此時擬合的目標值就是該損失函數的負梯度值。

二、構建案例

已知:

1、?初始化弱學習器(CART樹):

????????當模型預測值為何值時,會使得第一個弱學習器的平方誤差最小,即:求損失函數對 f(xi) 的導數,并令導數為0。

2、 構建第1個弱學習器

根據負梯度的計算方法得到下表:

以此類推,計算所有切分點情況,得到:

由此得到,當 6.5 作為切分點時,平方損失最小,此時得到第1棵決策樹。

3、 構建第2個弱學習器

以此類推,計算所有切分點情況,得到:

以3.5 作為切分點時,平方損失最小,此時得到第2棵決策樹

4、 構建第3個弱學習器

以此類推,計算所有切分點情況,得到:

以6.5 作為切分點時,平方損失最小,此時得到第3棵決策樹

5、 構建最終弱學習器

以 x=6 樣本為例:輸入到最終學習器中的結果 :(存在誤差,說明學習器不夠)

7.31 + (-1.07) + 0.22 + 0.15 = 6.61

以此類推計算其他的預測值

6、 構建總結

  1. 初始化弱學習器(目標值的均值作為預測值)
  2. 迭代構建學習器,每一個學習器擬合上一個學習器的負梯度
  3. 直到達到指定的學習器個數
  4. 當輸入未知樣本時,將所有弱學習器的輸出結果組合起來作為強學習器的輸出

三、XGBoost

????????極端梯度提升樹,集成學習方法的王牌,在數據挖掘比賽中,大部分獲勝者用了XGBoost。

1、Xgb的構建思想

????????1、構建模型的方法是最小化訓練數據的損失函數:

?????????????訓練的模型復雜度較高,易過擬合。

????????2、在損失函數中加入正則化項, 提高對未知的測試數據 的泛化性能 。

2、公式

XGBoost(Extreme Gradient Boosting)是對GBDT的改進,并且在損失函數中加入了正則化項

正則化項用來降低模型的復雜度

中的 T 表示一棵樹的葉子結點數量。

中的 w 表示葉子結點輸出值組成的向量,向量的模; λ對該項的調節系數

????????假設我們要預測一家人對電子游戲的喜好程度,考慮到年輕和年老相比,年輕更可能喜歡電子游戲,以及男性和女性相比,男性更喜歡電子游戲,故先根據年齡大小區分小孩和大人,然后再通過性別區分開是男是女,逐一給各人在電子游戲喜好程度上打分

訓練出tree1和tree2,類似之前gbdt的原理,兩棵樹的結論累加起來便是最終的結論

樹tree1的復雜度表示為

以此類推,樹tree2的復雜度表示為\Omega = \gamma 2 +\frac{1}{2}\lambda (0.81+0.81)

目標函數為:(推導過程比較復雜,可以另行學習)

?

該公式也叫做打分函數 (scoring function),從損失函數、樹的復雜度兩個角度來衡量一棵樹的優劣。當我們構建樹時,可以用來選擇樹的劃分點,具體操作如下式所示:

計算的gain值:

1、對樹中的每個葉子結點嘗試進行分裂

2、計算分裂前 - 分裂后的分數:

  • 如果gain > 0,則分裂之后樹的損失更小,會考慮此次分裂
  • 如果gain< 0,說明分裂后的分數比分裂前的分數大,此時不建議分裂

3、當觸發以下條件時停止分裂:

  • 達到最大深度 葉子結點數量低于某個閾值
  • 所有的結點在分裂不能降低損失
  • 等等...

3、XGBoost關鍵優勢

XGBoost通過多項技術創新實現高效訓練和強大泛化能力:

1、正則化??:在目標函數中加入L1(LASSO)和L2(Ridge)正則化項,懲罰復雜的樹結構(如葉子節點數量過多、權重過大),有效抑制過擬合。

2、??并行處理??:雖然Boosting是串行過程,但XGBoost在特征排序和分裂點選擇上支持并行計算(特征間并行),大幅提升訓練速度。

??3、加權分位法(Weighted Quantile Sketch)??:用于近似尋找最佳分裂點,僅需考察部分候選點,提升大規模數據下的計算效率。

4、??稀疏感知(Sparsity-aware)??:能自動學習處理缺失值的最佳方向(默認分到左子樹或右子樹),無需預先填充,并對稀疏數據(如One-hot編碼)高效處理。

??5、緩存訪問優化(Cache-aware Access)??:通過優化數據存儲和訪問模式(如按塊訪問),提高CPU緩存命中率,加速計算。

6、核外計算(Blocks for Out-of-core)??:當數據無法全部裝入內存時,可將數據分塊存儲在磁盤上,通過塊壓縮和預取(預取到內存緩沖區)技術減少IO開銷,支持大規模數據訓練。

????????XGBoost通過集成學習思想、梯度提升框架,并結合正則化、并行計算、稀疏感知等一系列優化,實現了預測精度與訓練效率的卓越平衡。其靈活性、魯棒性和廣泛適用性使其成為處理結構化數據任務的強有力工具,是許多數據科學家和機器學習實踐者的首選算法之一。

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

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

相關文章

【船類】監控錄像下船舶類別檢測識別數據集:近7k圖像,6類,yolo標注

監控錄像下船舶類別檢測識別數據集概述 數據集包含 6900監控錄像下船舶類別圖像&#xff0c;6個標注類別&#xff1a; 散貨船、集裝箱船、漁船、雜貨船、礦砂船、客船 標注格式&#xff1a;yolo txt&#xff08;格式可轉&#xff0c;可直接訓練&#xff09; 標注工具&#…

用戶故事設計范式(As a... I want to... So that...)

我們來詳細解析一下用戶故事&#xff08;User Story&#xff09;&#xff0c;包括其結構、為什么重要、如何編寫好的用戶故事以及一個完整的示例。1. 用戶故事的基本結構&#xff1a;三段式模板最經典和通用的用戶故事模板就是您提到的三段式&#xff1a;As a [角色]:目的&…

【OpenGL】LearnOpenGL學習筆記20 - 實例化 Instancing

上接&#xff1a;https://blog.csdn.net/weixin_44506615/article/details/151156446?spm1001.2014.3001.5501 完整代碼&#xff1a;https://gitee.com/Duo1J/learn-open-gl | https://github.com/Duo1J/LearnOpenGL 實例化 Instancing 以往當我們在場景中要大量繪制相同模型…

MySQL主從不一致?DBA急救手冊:14種高頻坑點+3分鐘定位+無損修復!

MySQL「主從不一致」最常見的成因、快速定位思路以及可落地的修復手段 一、為什么會不一致&#xff1f;14 類高頻場景類別典型表現/觸發條件快速自檢命令/日志1. 從庫被寫入業務或 DBA 直連從庫 UPDATE/INSERTSHOW VARIABLES LIKE read_only 應為 ON2. 復制過濾規則主從 binlog…

AI 網站源碼:探秘 SUNO,革新音樂創作的 AI 先鋒

在當今數字化浪潮中&#xff0c;人工智能&#xff08;AI&#xff09;正深刻地重塑各個領域&#xff0c;音樂創作也不例外。SUNO 作為一款引領潮流的音樂生成工具&#xff0c;宛如一顆璀璨新星&#xff0c;在音樂創作的天空中熠熠生輝&#xff0c;為音樂愛好者和創作者們帶來了前…

Linux:malloc背后的實現細節

目錄前言一、先搞懂基礎&#xff1a;程序的內存布局&#xff08;關鍵前提&#xff01;&#xff09;二、malloc的核心實現步驟&#xff08;4層架構拆解&#xff09;第1層&#xff1a;用戶調用 → 標準庫處理&#xff08;glibc的malloc.c&#xff09;第2層&#xff1a;堆內存池管…

什么是X11轉發?

X11 轉發&#xff08;X11 forwarding&#xff0c;ssh -X&#xff09;是一種 SSH 協議功能&#xff0c;它允許用戶在遠程服務器上運行圖形化應用程序&#xff0c;并通過本地的顯示設備和輸入輸出設備與這些程序進行交互。它被開發者廣泛使用&#xff0c;用于在大規模、異構的服務…

Android Kotlin 動態注冊 Broadcast 的完整封裝方案

在 Kotlin 中封裝動態注冊的 Broadcast 可以讓你更優雅地管理廣播的注冊和注銷&#xff0c;避免內存泄漏。下面是一個完整的封裝方案&#xff1a; 基礎封裝類 import android.content.BroadcastReceiver import android.content.Context import android.content.Intent import …

VGG改進(8):融合Self-Attention的CNN架構

1. 自注意力機制簡介自注意力機制是Transformer架構的核心組件&#xff0c;它能夠計算輸入序列中每個元素與其他所有元素的相關性。與CNN的局部感受野不同&#xff0c;自注意力機制允許模型直接建立遠距離依賴關系&#xff0c;從而捕獲全局上下文信息。在計算機視覺中&#xff…

ES6 面試題及詳細答案 80題 (33-40)-- Symbol與集合數據結構

《前后端面試題》專欄集合了前后端各個知識模塊的面試題&#xff0c;包括html&#xff0c;javascript&#xff0c;css&#xff0c;vue&#xff0c;react&#xff0c;java&#xff0c;Openlayers&#xff0c;leaflet&#xff0c;cesium&#xff0c;mapboxGL&#xff0c;threejs&…

PG-210-HI 山洪預警系統呼叫端:筑牢山區應急預警 “安全防線”

在山洪災害多發的山區&#xff0c;及時、準確的預警信息傳遞是保障群眾生命財產安全的關鍵。由 PG-210-HI 型號構成的山洪預警系統呼叫端主機&#xff0c;憑借其全面的功能、先進的特性與可靠的性能&#xff0c;成為連接管理員與群眾的重要應急樞紐&#xff0c;為山區構建起一道…

研學旅游產品設計實訓室:賦能產品落地,培養實用人才

1. 研學旅游產品設計實訓室的定位與功能 研學旅游產品設計實訓室是專門為學生提供研學課程與產品開發、模擬設計、項目推演、成果展示等實踐活動的教學空間。該實訓室應支持以下功能&#xff1a; 研學主題設計與目標制定&#xff1b; 課程內容與學習方法的選擇與整合&#xf…

4215kg輕型載貨汽車變速器設計cad+設計說明書

第一章 前言 3 1.1 變速器的發展環繞現狀 3 1.2 本次設計目的和意義 4 第二章 傳動機構布置方案分析及設計 5 2.1 傳動機構結構分析與類型選擇 5 2.2變速器主傳動方案的選擇 5 2.3 倒檔傳動方案 6 2..4 變速器零、部件結構方案設計 6 2.4.1 齒輪形式 …

9月10日

TCP客戶端代碼#include<myhead.h> #define SER_IP "192.168.108.179" //服務器&#xff49;&#xff50;地址 #define SER_PORT 8888 //服務器端口號 #define CLI_IP "192.168.108.239" //客戶端&#xff49;&#xff50;地址 …

案例開發 - 日程管理 - 第七期

項目改造&#xff0c;進入 demo-schedule 項目中&#xff0c;下載 pinia 依賴在 main.js 中開啟 piniaimport { createApp } from vue import App from ./App.vue import router from ./router/router.js import {createPinia} from pinialet pinia createPinia() const app …

infinityfree 網頁連接內網穿透 localtunnel會換 還是用frp成功了

模型庫首頁 魔搭社區 fatedier/frp: A fast reverse proxy to help you expose a local server behind a NAT or firewall to the internet. 我嘗試用本機ipv6&#xff0c;失敗了 配置文件 - ChmlFrp 香港2才能用 只支持https CNAME解析 | 怊貓科技 | 文檔 How to create …

批量更新數據:Mybatis update foreach 和 update case when 寫法及比較

在平常的開發工作中&#xff0c;我們經常需要批量更新數據&#xff0c;業務需要每次批量更新幾千條數據&#xff0c;采用 update foreach 寫法的時候&#xff0c;接口響應 10s 左右&#xff0c;優化后&#xff0c;采用 update ... case when 寫法&#xff0c;接口響應 2s 左右。…

Java基礎篇04:數組、二維數組

1 數組 數組是一個數據容器&#xff0c;可用來存儲一批同類型的數據。 1.1 數組的定義方式 靜態初始化 數據類型[][] 數組名 {元素1&#xff0c;元素2&#xff0c;元素3}; string[][] name {"wfs","jsc","qf"} 動態初始化 數據類型[][] 數組名…

unity開發類似個人網站空間

可以用 Unity 開發 “個人網站空間” 類工具&#xff0c;但需要結合其技術特性和適用場景來判斷是否合適。以下從技術可行性、優勢、局限性、適用場景四個方面具體分析&#xff1a;一、技術可行性Unity 本質是游戲引擎&#xff0c;但具備開發 “桌面應用” 和 “交互內容” 的能…

SDK游戲盾如何實現動態加密

SDK游戲盾的動態加密體系通過??密鑰動態管理、多層加密架構、協議混淆、AI自適應調整及設備綁定??等多重機制協同作用&#xff0c;實現對游戲數據全生命周期的動態保護&#xff0c;有效抵御中間人攻擊、協議破解、重放攻擊等威脅。以下從核心技術與實現邏輯展開詳細說明&am…