4.4 機器學習 - 集成學習

集成學習通過 “組合多個基礎模型” 提升泛化能力,核心分為并行集成(Bagging)串行集成(Boosting)多層集成(Stacking) 三大范式,分別對應 “降方差”“降偏差”“兼顧偏差與方差” 三大優化目標,適用場景與實現邏輯差異顯著。

一、Bagging:并行集成,專注降低方差(Bootstrap AGGregatING)

Bagging 的核心是 “用數據多樣性抵消模型波動”,通過并行訓練多個相同基礎模型,最終平均 / 投票輸出,主打 “提升模型穩定性”,對偏差影響極小。

1. 核心原理與流程

三步實現數據采樣、并行訓練與結果融合,關鍵在于 “有放回采樣(Bootstrap)” 創造多樣性:

  1. 數據采樣:對含 m 個樣本的原始訓練集,有放回采樣 m 次,生成 n 個不同的訓練集(每個訓練集樣本有重復);
  2. 并行訓練:用 n 個訓練集,并行訓練 n 個完全相同的基礎模型(如決策樹);
  3. 結果融合:
    • 回歸任務:n 個模型預測結果取平均;
    • 分類任務:n 個模型預測結果投票(少數服從多數)。

(1?lim?m→∞(1?1/m)m=1?1/e≈63%)(1-\lim_{m \to \infty}(1-1/m)^m = 1-1/e \approx 63\%) (1?mlim?(1?1/m)m=1?1/e63%) 的樣本會被采樣到,未被采樣的 “Out-of-Bag(OOB)樣本” 可直接作為驗證集,無需額外劃分數據。

2. 代碼實現(簡化版)

from copy import deepcopy
import numpy as np
import pandas as pd  # 假設輸入為DataFrame格式class Bagging: def __init__(self, base_learner, n_learners): # 初始化n個相同基礎模型(深拷貝避免參數共享)self.learners = [deepcopy(base_learner) for _ in range(n_learners)] self.n_learners = n_learnersdef fit(self, X: pd.DataFrame, y: pd.Series): # 循環模擬并行訓練(實際工程中可多線程/多進程加速)for learner in self.learners: # Bootstrap有放回采樣:生成與原數據量相同的樣本索引sample_indices = np.random.choice(np.arange(len(X)), size=len(X), replace=True)# 用采樣數據訓練單個基礎模型learner.fit(X.iloc[sample_indices], y.iloc[sample_indices]) def predict(self, X: pd.DataFrame) -> np.ndarray: # 回歸任務:多模型預測結果取平均preds = np.array([learner.predict(X) for learner in self.learners])  # 形狀:(n_learners, 樣本數)return preds.mean(axis=0)  # 按樣本維度平均,輸出形狀:(樣本數,)

3. 適用場景與典型案例

  • 核心作用:顯著降低方差(多模型平均抵消單模型對數據的敏感波動),對偏差基本無影響;
  • 適配基礎模型:僅對 “不穩定模型” 有效(如決策樹、神經網絡)—— 這類模型對訓練數據細節敏感,數據微小變化會導致預測結果大幅波動;對 “穩定模型”(如線性回歸)效果有限;
  • 典型案例:隨機森林(Random Forest)—— 在 Bagging 基礎上,對每個決策樹的 “特征” 也進行隨機采樣(如每次分裂僅選 1/3 特征),進一步增加模型多樣性,降低過擬合風險。

二、Boosting:串行集成,專注降低偏差

Boosting 的核心是 “逐步修正錯誤,強化弱模型”,通過串行訓練多個弱模型(如淺層決策樹),后一個模型聚焦前一個模型的錯誤樣本,最終加權融合,主打 “提升模型準確性”。

1. 核心原理與流程

三步實現串行訓練、錯誤聚焦與加權融合,關鍵在于 “樣本權重調整”:

  1. 弱模型串行訓練:按順序訓練 n 個弱模型(如深度≤3 的決策樹),每個模型的訓練依賴前一個模型的誤差;
  2. 錯誤樣本聚焦:通過調整樣本權重(或重新采樣),讓后一個模型更關注前一個模型預測錯誤的樣本(如錯誤樣本權重升高,正確樣本權重降低);
  3. 結果加權融合:根據每個弱模型的性能(誤差率)分配權重(誤差率越低,權重越高),最終預測結果為各模型預測值的加權和。

典型算法:

  • AdaBoost:通過 “樣本權重更新” 聚焦錯誤 錯誤樣本權重×(1/誤差率),正確樣本權重×誤差率錯誤樣本權重 \times(1 / 誤差率), \quad 正確樣本權重 \times 誤差率錯誤樣本權重×(1/誤差率),正確樣本權重×誤差率
  • Gradient Boosting:通過 “擬合前一輪模型的殘差” 聚焦錯誤 殘差=真實值?前一輪預測值殘差 = 真實值 - 前一輪預測值殘差=真實值?前一輪預測值,適用性更廣。

2. Gradient Boosting:基于殘差的經典實現

Gradient Boosting(梯度提升)是工業界最常用的 Boosting 算法,通過 “擬合殘差” 優化偏差,引入 “學習率(η)” 控制修正幅度,避免過擬合。

(1)核心公式
  • 模型迭代公式:

    Ht+1(x)=Ht(x)+η?ft(x)\Large H_{t+1}(x) = H_t(x) + \eta \cdot f_t(x)Ht+1?(x)=Ht?(x)+η?ft?(x)

    • Ht(x)H_t(x)Ht?(x):第 t 輪集成模型的預測值;
    • ft(x)f_t(x)ft?(x):第 t 個弱模型(擬合Ht(x)H_t(x)Ht?(x)的殘差,即y?Ht(x)y - H_t(x)y?Ht?(x));
    • η\etaη(學習率):控制ft(x)f_t(x)ft?(x)的貢獻度(通常取 0.01~0.1),避免單模型影響過大導致過擬合。
  • 殘差意義:當使用 MSE(均方誤差)作為損失函數時,殘差 y?Ht(x)y - H_t(x)y?Ht?(x) 等于損失函數對 Ht(x)H_t(x)Ht?(x) 的負梯度 ??L/?Ht(x)-\partial L / \partial H_t(x)??L/?Ht?(x),即梯度下降的方向 —— 本質是用 “殘差” 替代 “梯度”,簡化計算。

(2)代碼實現(簡化版)
from copy import deepcopy
import numpy as np
import pandas as pdclass GradientBoosting: def __init__(self, base_learner, n_learners, learning_rate=0.1): self.learners = [deepcopy(base_learner) for _ in range(n_learners)] self.lr = learning_rate  # 學習率,控制每輪殘差修正幅度self.n_learners = n_learnersdef fit(self, X: pd.DataFrame, y: pd.Series): residual = y.copy().values  # 初始殘差=真實值(第0輪模型預測為0)for learner in self.learners: # 弱模型擬合當前殘差(將殘差視為“新的真實值”)learner.fit(X, residual) # 更新殘差:減去當前模型的修正量(修正量=模型預測值×學習率)residual -= self.lr * learner.predict(X) def predict(self, X: pd.DataFrame) -> np.ndarray: # 所有弱模型預測值加權求和(權重=學習率)preds = np.array([learner.predict(X) for learner in self.learners])  # 形狀:(n_learners, 樣本數)return preds.sum(axis=0) * self.lr  # 按樣本維度求和,輸出形狀:(樣本數,)

3. GBDT 與工程優化

  • GBDT(Gradient Boosting Decision Trees):以 “淺層 CART 樹” 為弱模型的 Gradient Boosting,兼顧精度與可解釋性,廣泛用于推薦系統(CTR 預測)、金融風控(違約預測)等場景;
  • 工程優化算法:
    • XGBoost:引入 “樹復雜度正則化”(L1/L2 正則)、“缺失值自動處理”,支持并行計算(特征分裂候選值并行),訓練速度比傳統 GBDT 快 5~10 倍;
    • LightGBM:采用 “直方圖優化”(將連續特征離散為直方圖)、“Leaf-wise 樹生長”(優先分裂增益大的葉子節點),進一步提升訓練效率,適合億級樣本場景。

三、Stacking:多層集成,兼顧偏差與方差

Stacking 的核心是 “用不同模型多樣性 + 多層學習”,通過并行訓練多個不同基礎模型,將其輸出作為新特征輸入 “元模型”,兼顧 “穩定性” 與 “準確性”,靈活性高于 Bagging 和 Boosting。

1. 單層 Stacking:基礎結構

(1)核心流程

三層結構實現 “基礎模型特征提取 + 元模型融合”,關鍵在于 “不同基礎模型” 與 “特征拼接”:

  1. 第一層(基礎模型層):并行訓練 n 個不同類型的基礎模型(如 Random Forest、GBDT、MLP),每個模型輸出預測結果(如分類任務輸出類別概率,回歸任務輸出連續值);
  2. 特征拼接(Concat):將 n 個基礎模型的預測結果拼接成 “新特征矩陣”(如 3 個基礎模型 → 新特征維度 = 3);
  3. 第二層(元模型層):用 “新特征矩陣” 訓練元模型(如邏輯回歸、Dense 層),輸出最終預測結果。
(2)結構示意圖
# 單層Stacking結構(核心:不同基礎模型+元模型融合)元模型(如邏輯回歸、Dense層)👆-------------------|     Concat      |  # 拼接各基礎模型的預測結果(新特征)-------------------👆----------------  👆  ----------------  👆  ----------------| Random Forest |  |    GBDT     |  |    ...    |  |    MLP    |  # 不同類型基礎模型----------------  👆  ----------------  👆  ----------------👆-------------------|     Inputs      |  # 原始輸入特征(如用戶特征、物品特征)-------------------
(3)核心作用
  • 主要降低方差:通過 “不同類型基礎模型” 的多樣性(如樹模型 + 神經網絡),抵消單一模型的波動;
  • 對比 Bagging:Bagging 靠 “相同模型 + 數據采樣” 創造多樣性,Stacking 靠 “不同模型” 創造多樣性,靈活性更高,可適配更多場景。

2. 多層 Stacking:進階結構

(1)核心流程

在單層基礎上增加層級,實現 “逐層修正偏差”:

  1. 多層級聯:每一層的輸出作為下一層的輸入(如 L1 層輸出 → L2 層輸入,L2 層輸出 → L3 層輸入);
  2. 每層多樣性:每一層可使用不同基礎模型(如 L1 用樹模型,L2 用線性模型),高層元模型聚焦修正低層的偏差。
(2)結構示意圖
# 多層Stacking結構(核心:層級聯+逐層修正偏差)L3:元模型(如Dense層)👆-------------------|     Concat      |  # L2層各模型預測結果拼接-------------------👆----------------  👆  ----------------  👆  ----------------| Random Forest |  |    GBDT     |  |    ...    |  |    MLP    |  # L2層基礎模型----------------  👆  ----------------  👆  ----------------👆-------------------|     Concat      |  # L1層各模型預測結果拼接-------------------👆----------------  👆  ----------------  👆  ----------------| Random Forest |  |    GBDT     |  |    ...    |  |    MLP    |  # L1層基礎模型----------------  👆  ----------------  👆  ----------------👆-------------------|     Inputs      |  # 原始輸入特征-------------------
(3)過擬合解決策略

多層 Stacking 的高層(如 L2、L3)因 “新特征維度低、數據量少” 易過擬合,需針對性優化:

  1. 分層數據劃分:將數據集分為 A、B 兩組,A 訓練 L1 層,B 訓練 L2 層(避免 L2 層看到 L1 層的訓練數據,導致數據泄露);
  2. K 折 Bagging 重復:
    • 對每一層,用 K 折交叉驗證訓練 K 個模型,取 “Out-of-Fold(OOF)預測結果” 作為下一層輸入(如 K=5,每個樣本僅用 “未參與訓練的 1 折模型” 預測,避免過擬合);
    • 重復 n 次 K 折過程,對同一樣本的 n 次預測取平均,進一步降低波動。

四、三大集成范式對比

集成范式核心目標(降低偏差 / 方差)計算成本并行性關鍵特點適用場景
Bagging方差(主要)n(n = 基礎模型數)高(n 個模型并行)相同基礎模型 + Bootstrap 采樣,穩定優先模型波動大、需提升穩定性(如決策樹)
Boosting偏差(主要)n低(串行訓練)弱模型串行 + 錯誤聚焦,精度優先模型欠擬合、需提升準確性(如淺層模型)
單層 Stacking方差(主要)n高(基礎模型并行)不同基礎模型 + 元模型融合,靈活優先需平衡穩定與靈活(如多模態數據)
多層 Stacking偏差 + 方差(兼顧)n×l×k(n = 模型數,l = 層數,k=K 折)中(每層內并行)層級聯 + 逐層修正,需防過擬合高精度場景(如競賽、核心業務預測)

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

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

相關文章

機器學習 - 使用 ID3 算法從原理到實際舉例理解決策樹

一、什么是決策樹1.基本概念決策樹是一種樹形結構,由結點(node) 和有向邊(directed edge) 組成。其中結點分為兩類:內部結點(internal node):表示一個屬性(特…

【期末復習】嵌入式——S5PV210開發板

本文為嵌入式課程期末復習,僅供參考,所用課本:嵌入式Linux操作系統(李建祥著)。第一章1.1 簡述嵌入式微處理器數據存儲格式的大,小端模式。大端模式是指數據的高字節保存在內存的低地址中,而數據…

word文檔結尾批量插入圖片 docx批量插入圖片 指定幾張

如果你有一些word文檔。比如工作總結。你想每一個文檔里面都插入幾張圖片。插入到每個文檔的結尾,那么你可以使用這個工具。首先準備好你的文檔。然后把它們拖進右邊的方框中。拖動的時候,拖動第一個,然后準備好你的圖片。把你的圖片全部拖動…

CodeBuddy國際版又更新了體驗感1

CodeBuddy國際版又更新了 更好的使用體驗更少的資源消耗合理的消耗剩余資源使用起來也是很不錯的,這次更新自動模式想不到的少,可以用于其他的例如翻譯與寫測試用例或者其他的說明文檔等或者是閱讀一下項目更好了解項目總的上來說 使用體驗響應速度還是不…

基于開源AI智能名片鏈動2+1模式S2B2C商城小程序的公益課引流策略研究

摘要:本文聚焦公益課引流場景,探討開源AI智能名片、鏈動21模式與S2B2C商城小程序的融合應用。通過構建低成本用戶裂變體系,分析該技術組合在精準篩選、社群運營、激勵機制設計中的協同效應。研究提出"智能名片畫像-鏈動裂變激勵-S2B2C生…

季度最強策略:年化247%,回撤10%,夏普比率3.79。附大小盤輪動策略python源代碼。

原創內容第993篇,專注AGI,AI量化投資、個人成長與財富自由。 季度最強策略: 年化247%,回撤10%,夏普比率3.79。3積分可查看參數。 大小盤輪動的策略源代碼: 年化收益18.8%。 from engine import Task, Eng…

testng.xml

一、TestNG.xml 是 TestNG 測試框架的核心配置文件,用于組織和控制測試執行。通過它,可以靈活地管理測試套件、測試類、方法,并設置各種執行參數一個基本的 testng.xml文件通常以 ??DOCTYPE 聲明??開頭,并遵循特定的文檔類型定…

上架商品合規流程有多條,有的長,有的短,有的需要審核,校驗商品的合規性

博主介紹:?全網粉絲5W,全棧開發工程師,從事多年軟件開發,在大廠呆過。持有軟件中級、六級等證書。可提供微服務項目搭建與畢業項目實戰,博主也曾寫過優秀論文,查重率極低,在這方面有豐富的經驗…

[嵌入式][stm32h743iit6] 野火繁星stm32h743iit6開發板使用學習記錄

[嵌入式][stm32h743iit6] 野火繁星stm32h743iit6開發板使用學習記錄野火繁星STM32H743IIT6開發板使用學習速記問題描述嘗試解決野火繁星STM32H743IIT6開發板使用學習速記 問題描述 在使用該開發板學習stm32hal庫pwm開發時, 偶遇代碼無法驅動sg90舵機進行旋轉, 無論占空比設置…

Android 熱點開發的相關api總結

Android 熱點 一、前言熱點開發屬于系統級功能開發,涉及的核心 API 多為系統簽名權限保護(如android.permission.TETHER_PRIVILEGED),通常僅系統應用(如 Settings)可正常調用。 實際開發中,除基…

Claude Code 使用指南

Claude Code 使用指南 在 AI 輔助編程領域,我們正經歷從簡單的代碼補全到能夠自主執行復雜任務的“智能體”(Agent)的深刻變革。Claude Code 正是這一變革的杰出代表。它并非一個簡單的問答機器人,而是一個設計精密的編程協作系統…

Spring Boot常用注解-詳細解析+示例

1. SpringBootApplication詳細解析:組合注解,包含Configuration(標記配置類)、EnableAutoConfiguration(開啟自動配置)、ComponentScan(組件掃描)。啟動類標注后,Spring …

基于原神游戲物品系統小demo制作思路

概述 本文介紹了一個基于C的游戲物品與角色管理系統,該系統實現了游戲中的物品分類、角色屬性管理、隊伍組建以及背包物品使用等功能。該系統采用面向對象的設計原則,通過繼承和多態實現了可擴展的物品效果系統。 系統架構 1. 物品類型系統 系統定義了三…

Grounded-Segment-Anything 環境配置

Grounded-Segment-Anything 環境配置Grounded-Segment-Anything 介紹環境配置Install osx(非必須):Install RAM & Tag2Text:報錯 module ‘pkgutil‘ has no attribute ‘ImpImporter‘. Did you mean: ‘zipimporter‘?運行輸出分割文本提示檢測遠…

ZYNQ 定時器

一、ZYNQ定時器簡介 每個Cortex-A9處理器都有自己的專用32位定時器和32位看門狗定時器。兩個處理器共享一個全局64位定時器。這些計時器的時鐘始終為CPU頻率(CPU_3x2x)的1/2。在系統級,有一個24位看門狗定時器和兩個16位三重定時器/計數器。系…

Java8 Comparator接口 和 List Steam 排序使用案例

在Java中,Comparator接口主要用于實現自定義排序邏輯,適用于未實現Comparable接口或需要覆蓋默認比較規則的場景。以下是核心使用方法和注意事項:一、基礎用法?匿名內部類實現?傳統方式通過匿名內部類重寫compare()方法,例如對整…

word2vec模型案例

代碼實現:import torch.optim as optim from tqdm import tqdm, trange import numpy as np import torch from torch import nn import torch.nn.functional as FCONTEXT_SIZE 2raw_text """We are about to study the idea of a computational p…

< 自用文 OS 有關 > (續)發現正在被攻擊 后的自救 Fail2ban + IPset + UFW 工作流程詳解

繼上編:< 自用文 主機 USC 記錄:> 發現正在被攻擊 后的自救-CSDN博客 環境: 改進: 以下是把代碼,懶得寫,扔給了 AI ,讓它出的: Fail2ban IPset UFW 工作…

Linux —— 虛擬進程地址空間

🎁個人主頁:工藤新一 🔍系列專欄:C面向對象(類和對象篇) 🌟心中的天空之城,終會照亮我前方的路 🎉歡迎大家點贊👍評論📝收藏?文章 文章目錄虛…

簡單聊一聊js

JavaScript 是一種高級的、解釋型的編程語言。它是現代 Web 開發的三大核心基石之一,與 HTML 和 CSS 并列。?HTML?:負責網頁的結構和內容?(如標題、段落、圖片)。?CSS?:負責網頁的樣式和布局?(如顏色…