機器學習之集成算法學習

一、集成學習概述

集成學習(ensemble learning)通過構建并結合多個個體學習器來完成學習任務,核心思想是 “集眾家之長”—— 就像多個專家共同判斷往往比單個專家更可靠。其關鍵在于如何生成多樣化的個體學習器并設計有效的結合策略。

結合策略

  1. 簡單平均法:對多個學習器的輸出取平均值(適用于回歸任務)。
  2. 加權平均法:為不同學習器分配不同權重,權重之和為 1,更信任性能好的學習器。
  3. 投票法:“少數服從多數”,適用于分類任務,多個學習器投票決定最終類別。

二、集成算法分類

根據個體學習器的生成方式,集成算法可分為三類:

算法類型特點代表算法
Bagging個體學習器并行生成,無強依賴關系隨機森林
Boosting個體學習器串行生成,后一個依賴前一個AdaBoost
Stacking分階段集成,第一階段用多種學習器生成結果,第二階段用這些結果訓練新模型多模型堆疊

三、典型集成算法詳解

1. Bagging 與隨機森林

  • Bagging 原理:通過 bootstrap 抽樣(有放回采樣)生成多個不同的訓練集,并行訓練多個分類器,最終用投票法(分類)或平均法(回歸)結合結果。

  • 隨機森林:在 Bagging 基礎上增加 “雙重隨機性”:

    • 數據采樣隨機(bootstrap);
    • 特征選擇隨機(每個決策樹僅用部分特征訓練)。
  • 隨機森林優勢

    • 處理高維數據無需特征選擇;
    • 可評估特征重要性;
    • 并行化訓練,速度快;
    • 結果易可視化分析。
  • 核心參數RandomForestClassifier):

    • n_estimators:樹的數量(默認 100);
    • oob_score:是否用袋外數據評估(默認 False,True 時等效交叉驗證);
    • bootstrap:是否有放回采樣(默認 True)。

2. Boosting 與 AdaBoost

  • Boosting 原理:串行生成學習器,后一個學習器會針對前一個的錯誤進行優化,通過加權調整樣本和學習器的重要性。
  • AdaBoost 流程
    1. 初始化樣本權重(所有樣本權重相同);
    2. 訓練弱分類器,分錯的樣本權重提高,分對的降低;
    3. 重復訓練新分類器,聚焦前一輪的錯誤樣本;
    4. 最終結合所有弱分類器,性能好的分類器權重更高。

3. Stacking

  • 原理:分階段集成多種學習器(如 KNN、SVM、隨機森林等):
    • 第一階段:用不同學習器對數據訓練,得到各自的預測結果;
    • 第二階段:將第一階段的結果作為新特征,訓練一個元模型(如邏輯回歸),輸出最終結果。

四、代碼實現:隨機森林實現葡萄酒分類

以葡萄酒數據集為例,用隨機森林完成分類任務:

python

運行

# 導入必要的庫
from sklearn.datasets import load_wine
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score, classification_report# 1. 加載數據集
wine = load_wine()
X = wine.data  # 特征數據(13個特征,如酒精含量、蘋果酸等)
y = wine.target  # 標簽(3種葡萄酒類別)
print("特征名稱:", wine.feature_names)
print("樣本數量:", X.shape[0], ",類別數量:", len(set(y)))# 2. 劃分訓練集和測試集(7:3)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42  # 固定隨機種子,保證結果可復現
)# 3. 初始化隨機森林模型
rf = RandomForestClassifier(n_estimators=100,  # 100棵決策樹oob_score=True,    # 用袋外數據評估模型bootstrap=True,    # 啟用有放回采樣random_state=42
)# 4. 訓練模型
rf.fit(X_train, y_train)# 5. 模型評估
# 預測測試集
y_pred = rf.predict(X_test)# 計算準確率
accuracy = accuracy_score(y_test, y_pred)
print(f"\n測試集準確率:{accuracy:.4f}")# 詳細分類報告(精確率、召回率、F1值)
print("\n分類報告:")
print(classification_report(y_test, y_pred, target_names=[f"類別{i}" for i in range(3)]))# 查看特征重要性
feature_importance = dict(zip(wine.feature_names, rf.feature_importances_))
print("\n特征重要性:")
for feature, importance in sorted(feature_importance.items(), key=lambda x: x[1], reverse=True):print(f"{feature}: {importance:.4f}")

代碼說明

  1. 數據集load_wine()包含 178 個樣本,13 個特征(如酒精含量、蘋果酸等),分為 3 類葡萄酒。
  2. 模型參數:使用 100 棵決策樹,啟用袋外數據評估,確保結果可靠。
  3. 評估指標:通過準確率和分類報告判斷模型性能,隨機森林在該數據集上通常能達到 95% 以上的準確率。
  4. 特征重要性:隨機森林可輸出各特征對分類的貢獻度,例如 “proline(脯氨酸)” 通常是區分葡萄酒類別的重要特征。

我還自己嘗試了以下乳腺癌案例

# 導入必要的庫
from sklearn.datasets import load_breast_cancer
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import confusion_matrix, accuracy_score, classification_report

# 加載并查看數據集信息
cancer = load_breast_cancer()
X = cancer.data ?# 特征數據(30個特征,如腫瘤半徑、紋理等)
y = cancer.target ?# 標簽(0=惡性,1=良性)

# 打印數據集基本信息
print("數據集信息:")
print(f"特征數量:{X.shape[1]}(特征名稱:{', '.join(cancer.feature_names[:5])}...)")
print(f"樣本數量:{X.shape[0]}(其中良性樣本:{sum(y)},惡性樣本:{len(y)-sum(y)})")

# 劃分訓練集和測試集(7:3)
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.3, random_state=42 ?# 固定隨機種子,保證結果可復現
)

# 初始化隨機森林模型并設置參數
rf_cancer = RandomForestClassifier(
n_estimators=150, ?# 決策樹數量(增加樹數量可提升穩定性)
max_depth=8, ? ? ? # 限制樹深度,防止過擬合
oob_score=True, ? ?# 使用袋外數據評估模型性能
bootstrap=True, ? ?# 啟用有放回抽樣(Bagging核心機制)
random_state=42 ? ?# 固定隨機種子,確保結果一致
)

# 訓練模型
rf_cancer.fit(X_train, y_train)
print(f"\n袋外數據評估準確率:{rf_cancer.oob_score_:.4f}") ?# 輸出袋外得分

# 模型評估
# 預測測試集結果
y_pred = rf_cancer.predict(X_test)

# 計算準確率
accuracy = accuracy_score(y_test, y_pred)
print(f"\n測試集準確率:{accuracy:.4f}")

# 打印混淆矩陣(直觀展示分類錯誤情況)
print("\n混淆矩陣(行=真實標簽,列=預測標簽):")
print("(0=惡性,1=良性)")
print(confusion_matrix(y_test, y_pred))

# 詳細分類報告(包含精確率、召回率、F1值)
print("\n分類報告:")
print(classification_report(
y_test, y_pred,
target_names=["惡性腫瘤", "良性腫瘤"] ?# 為標簽添加中文說明
))

# 特征重要性分析(前10名)
print("\nTop 10 重要特征(對腫瘤分類的貢獻度):")
# 按重要性排序并取前10
top_features = sorted(
zip(cancer.feature_names, rf_cancer.feature_importances_),
key=lambda x: x[1], reverse=True
)[:10]

# 格式化輸出
for i, (name, imp) in enumerate(top_features, 1):
print(f"{i}. {name}: {imp:.4f}({imp*100:.2f}%)")

五、學習總結

集成學習通過組合多個學習器有效提升了模型性能,其中:

  • 隨機森林適合處理高維數據,訓練高效且結果穩定,是工業界常用的 “萬能模型”;
  • AdaBoost 專注于修正錯誤樣本,適合處理非線性問題,但對噪聲較敏感;
  • Stacking 靈活性高,可融合多種模型的優勢,但實現較復雜。

在實際應用中,需根據數據特點選擇合適的集成策略,并通過調參(如隨機森林的樹數量、AdaBoost 的迭代次數)進一步優化性能。

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

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

相關文章

Unreal Engine UE_LOG

Unreal🎮 Unreal Engine - UE_LOG📝 定義🏛 類/宏關聯? 關鍵特性🛠? 常見配置📚 使用方法🔧 基礎語法🔍 示例🪂 典型應用場景🔗 與其他組件對比?? 常見問題與注意事項…

Halcon那些事:什么是動態閾值,如何用dyn_threshold分割圖片

Halcon那些事:什么是動態閾值,如何用dyn_threshold分割圖片 一、什么是動態閾值?為什么需要它? 1. 傳統全局閾值的局限性 2. 動態閾值的核心思想 二、Halcon 中的核心算子:`dyn_threshold` 1. 算子原型 2. 參數詳解 三、工作原理(數學模型) 四、詳細使用步驟與實例 五、關…

Go初級二

Go初級入門(二):變量、常量與數據類型 大家好,歡迎來到《Go初級入門》系列的第二篇!在上一篇文章中,我們介紹了如何安裝Go環境并運行第一個“Hello, World”程序。今天,我們將深入Go語言的基礎語…

《戰神:諸神黃昏》v1.0.668中文版,索尼大作,PC平臺體驗諸神黃昏

[游戲名稱]: 《戰神:諸神黃昏》v1.0.668中文版 [軟件大小]: 175 GB [軟件大小]: 夸克網盤 游戲介紹 《戰神:諸神黃昏》是由索尼制作并發行的動作冒險游戲,作為《戰神4》的正統續作,它繼續了奎托斯與阿特柔斯的神話之旅。在諸神…

AI賦能環保精準治理:AI水質監測溯源快、空氣質量預測施策準,守護生態新效能

傳統環境保護工作長期受限于 “污染監測滯后”“溯源難度大”“治理方案針對性弱” 的問題,而 AI 技術的深度應用,正讓環保工作從 “被動應對” 轉向 “主動預判”,既能實時捕捉污染蹤跡,還能精準制定治理方案,讓生態保…

yolo訓練實例(一)

yolo官網 https://github.com/ultralytics/ultralytics?tabreadme-ov-file 下載python和解除限制 https://www.python.org/downloads/windows/ Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\FileSystem" -Name "LongPathsEnabled"…

STM32-BKP備份寄存器與RTC實時時鐘

引言本文主要從BKP備份寄存器和RTC實時時鐘的原理,特性及應用三個方面展開討論,解析它們在STM32中的獨特價值,助力開發者更好的掌握和運用它們。BKP備份寄存器的定義STM32的BKP備份寄存器是一種特殊的存儲單元,它位于備份區域&…

Linux網絡服務(五)——FTP服務詳解與實踐操作手冊

文章目錄前言一、FTP服務概述1.1 FTP基本定義1.2 VSFTP模式分類1.3 FTP端口作用二、FTP作用與工作原理(重點)2.1 FTP的作用、模式及通信方式2.1.1 FTP核心作用2.1.2 VSFTP模式與通信協議2.2 FTP工作原理與流程2.2.1 主動模式工作原理2.2.2 被動模式工作原…

5.3 包管理工具 npm yarn pnpm 對比

基本介紹 工具發布時間開發者定位npm2010 年npm Inc / OpenJS FoundationNode.js 官方包管理器Yarn2016 年Facebook(現 Meta)更快、更可靠的替代方案pnpm2016 年Zoltan Kochan高性能、節省磁盤空間 一、核心機制與設計差異 1. npm(Node Pa…

爬蟲基礎學習-授權認證,cookie認證,異常處理

驗證: HTTPBasicAuthHandler(用戶基本的身份驗證處理) HTTPPasswordMgrWithDefaultRealm(經常和authhandler一起出現)#創建一個密碼管理器 password_mgr urllib.request.HTTPPasswordMgrWithDefaultRealm() #添加進目…

開發避坑指南(34):mysql深度分頁查詢優化方案

問題語句 SELECT* FROMt_order_log l WHERE1 1 AND l.create_time > 2024-08-28 AND l.create_time < 2024-09-04 23:59:59 LIMIT 10000,10上述查詢sql&#xff0c;即使create_time字段已建立索引&#xff0c;但偏移量達到幾十萬時候&#xff0c;查詢耗時將近1分鐘&…

Unreal Engine UFloatingPawnMovement

Unreal? Unreal Engine - UFloatingPawnMovement&#x1f3f7; 定義&#x1f9e9; 類繼承關系?? 關鍵特性&#x1f6e0;? 常見配置&#xff08;Details 面板/代碼&#xff09;&#x1f4dd; 使用方法1) 在 Pawn 中添加組件&#xff08;C&#xff09;2) 綁定輸入與驅動移動3…

某網盤不好用?有沒有類似某網盤的存儲軟件?阿里云國際站 OSS:云存儲的全能助手,你 get 了嗎?

在這個數據爆炸的時代&#xff0c;數據存儲和管理成為了眾多企業和個人面臨的一大挑戰。想象一下&#xff0c;你是一位視頻博主&#xff0c;隨著粉絲量的增長&#xff0c;視頻素材越來越多&#xff0c;電腦硬盤根本裝不下&#xff0c;每次找素材都要花費大量時間。又或者你是一…

安全運維過程文檔體系規范

安全運維過程文檔體系規范 1. 文檔體系總覽 本文檔體系嚴格遵循“安全運維生命周期”模型設計&#xff0c;涵蓋業務建立、協同、運維管理、識別防御監測、響應和效果評估六個核心階段。體系旨在通過標準化、規范化的文檔管理&#xff0c;確保所有安全運維活動有章可循、有據可查…

【計算機網絡】 IPV4和IPV6區別

IPv4 和 IPv6 是兩代 互聯網協議&#xff08;Internet Protocol&#xff09;&#xff0c;它們的核心作用都是&#xff1a; &#x1f449; 為網絡設備分配唯一地址&#xff0c;讓它們能在網絡中互相通信。1?? 地址長度IPv4&#xff1a;32 位&#xff08;4 字節&#xff09;&am…

哈希:最長連續序列

題目描述&#xff1a;無序的整型數組&#xff0c;求連續最長序列。 輸入&#xff1a;nums [100,4,200,1,3,2] 輸出&#xff1a;4 &#xff08;因為&#xff1a;最長數字連續序列是 [1, 2, 3, 4]&#xff0c;長度為 4。&#xff09; 說明&#xff1a;連續指的是數字的連續…

python中的生成器

概要python中的生成器是一種特殊的迭代器&#xff0c;如果按照c語言的說法&#xff0c;就是一種特殊的指針&#xff0c;但是python語言的一個語言特性是兼容了函數化編程&#xff0c;類似lambda匿名函數機制。本文重點介紹生成器表達式的使用&#xff0c;是一種很快捷&#xff…

【Coze】Windows 環境下使用 Docker 部署 Coze Studio 的詳細指南

一、前言&#xff1a; Coze Studio 是一站式 AI Agent 開發工具。提供各類最新大模型和工具、多種開發模式和框架&#xff0c;從開發到部署&#xff0c;為你提供最便捷的 AI Agent 開發環境。 提供 AI Agent 開發所需的全部核心技術&#xff1a;Prompt、RAG、Plugin、Workflo…

票務系統小程序源碼

1. 系統概述 github地址 本系統是一個歷經多年迭代和市場檢驗的綜合性智慧票務解決方案。它以小程序和后臺管理系統為核心&#xff0c;深度整合了線上OTA渠道、線下多種支付方式以及各類智能硬件&#xff0c;為旅游景區、展館、活動中心等場景提供穩定、高效、功能完備的一體化…

Python 文件操作與異常處理全解析

目錄 一、文件的基本概念 1. 什么是文件 2. 文件操作的核心內容 3. 文件操作的作用 二、文件的基本操作 1. 文件操作三步走 2. 打開文件&#xff1a;open () 函數 2.1 文件路徑 2.2 常用 mode 模式 3. 寫入文件&#xff1a;write () 函數 4. 關閉文件&#xff1a;cl…