AdaBoost算法的原理及Python實現

一、概述

??AdaBoost(Adaptive Boosting,自適應提升)是一種迭代式的集成學習算法,通過不斷調整樣本權重,提升弱學習器性能,最終集成為一個強學習器。它繼承了 Boosting 的基本思想和關鍵機制,但在具體的實現中有著顯著特點,成為具有一定特定性能和適用場景的集成學習算法。

二、算法過程

(1)設置初始樣本權重

??在算法開始時,為訓練數據集中的每一個樣本設定一個相同的權重。如對于樣本集 D = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x n , y n ) } D=\left\{ (x_1,y_1),(x_2,y_2),...,(x_n,y_n) \right\} D={(x1?,y1?),(x2?,y2?),...,(xn?,yn?)},初始權重為 w ( 1 ) = ( w 1 ( 1 ) , w 2 ( 1 ) , . . . , w n ( 1 ) ) w^{(1)}=\left( w_{1}^{(1)} ,w_{2}^{(1)},...,w_{n}^{(1)} \right) w(1)=(w1(1)?,w2(1)?,...,wn(1)?) ,其中 w i ( 1 ) = 1 n w_{i}^{(1)}=\frac{1}{n} wi(1)?=n1?,即在第一輪訓練時,每個樣本在模型訓練中的重要度是相同的。

(2)訓練弱學習器?

??基于當前的權重分布,訓練一個弱學習器。基于當前的權重分布,訓練一個弱學習器。弱學習器是指一個性能僅略優于隨機猜測的學習算法,例如決策樹樁(一種簡單的決策樹,通常只有一層)。在訓練過程中,弱學習器會根據樣本的權重來調整學習的重點,更關注那些權重較高的樣本。

(3) 計算弱學習器的權重

??根據弱學習器在訓練集上的分類錯誤率,計算該弱學習器的權重。錯誤率越低,說明該弱學習器的性能越好,其權重也就越大;反之,錯誤率越高的弱學習器權重越小。通常使用的計算公式為
α = 1 2 l n ( 1 ? ε ε ) \alpha=\frac{1}{2}ln\left( \frac{1-\varepsilon}{\varepsilon} \right) α=21?ln(ε1?ε?)
??其中 ε \varepsilon ε是該弱學習器的錯誤率。

(4) 更新訓練數據的權重分布

??根據當前數據的權重和弱學習器的權重,更新訓練數據的權重分布。具體的更新規則是,對于被正確分類的樣本,降低其權重;對于被錯誤分類的樣本,提高其權重。這樣,在下一輪訓練中,弱學習器會更加關注那些之前被錯誤分類的樣本,從而有針對性地進行學習。公式為
w i ( t + 1 ) = w i ( t ) Z t ? { e ? α t , i f h t ( x i ) = y i e α t , i f h t ( x i ) ≠ y i \begin{equation} w_{i}^{(t+1)}=\frac{w_{i}^{(t)}}{Z_t}\cdot \begin{cases} e^{-\alpha_t}, \hspace{0.5em} if \hspace{0.5em} h_t(x_i)=y_i \\ e^{\alpha_t}, \hspace{0.5em} if \hspace{0.5em} h_t(x_i)\ne y_i \end{cases} \end{equation} wi(t+1)?=Zt?wi(t)???{e?αt?,ifht?(xi?)=yi?eαt?,ifht?(xi?)=yi????
??其中, w i ( t ) w_{i}^{(t)} wi(t)?是第 t t t 輪中第 i i i個樣本的權重, Z t Z_t Zt?是歸一化因子,確保更新后的樣本權重之和為 1, h t ( x i ) h_t(x_i) ht?(xi?)是第 t t t個弱學習器對第 i i i個樣本的預測結果。

(5) 重復以上步驟

??不斷重復訓練弱學習器、計算弱學習器權重、更新數據權重分布的過程,直到達到預設的停止條件,如訓練的弱學習器數量達到指定的上限,或者集成模型在驗證集上的性能不再提升等。

(6)構建集成模型

??將訓練好的所有弱學習器按照其權重進行組合,得到最終的集成模型。如訓練得到一系列弱學習器 h 1 , h 2 , . . . , h T h_1,h_2,...,h_T h1?,h2?,...,hT?及其對應的權重 α 1 , α 2 , . . . , α T \alpha_1,\alpha_2,...,\alpha_T α1?,α2?,...,αT?,最終的強學習器 H ( X ) H(X) H(X)通過對這些弱學習器進行加權組合得到。對于分類問題,通常采用符號函數 H ( X ) = s i g n ( ∑ t = 1 T α t h t ( X ) ) H\left( X \right)=sign\left( \sum_{t=1}^{T}{\alpha_th_t(X)} \right) H(X)=sign(t=1T?αt?ht?(X))輸出;對于回歸問題,則可采用加權平均的方式輸出。

過程圖示如下
在這里插入圖片描述

三、算法特性與應用場景

優勢:算法通過不斷調整樣本權重和組合多個弱學習器,能夠有效提高預測的準確性;可以自適應地調整樣本的學習重點,對于不同分布的數據集有較好的適應性;對數據的分布沒有嚴格的假設,不需要事先知道關于數據的一些先驗知識。

不足:如果訓練數據中存在噪聲或異常值,可能會過度擬合這些數據,導致在測試集上的泛化能力下降;每次迭代都需要重新計算樣本權重和訓練弱分類器,當訓練數據量較大或迭代次數較多時,計算成本較高。

應用場景:在圖像識別、語音識別、目標檢測、文本分類、生物信息等方面有著廣泛的應用。

四、Python實現

(環境:Python 3.11,scikit-learn 1.6.1)

分類情形

from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
from sklearn.ensemble import AdaBoostClassifier
from sklearn.metrics import accuracy_score# 生成一個二分類的數據集
X, y = make_classification(n_samples=1000, n_features=10,n_informative=5, n_redundant=0,random_state=42,n_classes=2)# 劃分訓練集和測試集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)# 創建AdaBoost分類器實例
ada_classifier = AdaBoostClassifier(n_estimators=100, learning_rate=0.1, random_state=42)# 訓練模型
ada_classifier.fit(X_train, y_train)# 進行預測
y_pred = ada_classifier.predict(X_test)# 評估模型
accuracy = accuracy_score(y_test, y_pred)
print(f"Accuracy: {accuracy}")

在這里插入圖片描述

回歸情形

from sklearn.datasets import make_regression
from sklearn.model_selection import train_test_split
from sklearn.ensemble import AdaBoostRegressor
from sklearn.metrics import mean_squared_error# 生成模擬回歸數據
X, y = make_regression(n_samples=1000, n_features=10, n_informative=5, noise=0.5, random_state=42)# 劃分訓練集和測試集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)# 創建 AdaBoost 回歸器
ada_reg = AdaBoostRegressor(n_estimators=100, random_state=42)# 訓練模型
ada_reg.fit(X_train, y_train)# 在測試集上進行預測
y_pred = ada_reg.predict(X_test)# 計算均方誤差評估模型性能
mse = mean_squared_error(y_test, y_pred)
print(f"均方誤差: {mse}")

在這里插入圖片描述

End.


下載

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

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

相關文章

《PyTorch documentation》(PyTorch 文檔)

PyTorch documentation(PyTorch 文檔) PyTorch is an optimized tensor library for deep learning using GPUs and CPUs. (PyTorch是一個優化的張量庫,用于使用GPU和CPU進行深度學習。) Features described in this documentation are classified by release status: (此…

Android學習總結之算法篇六(數組和棧)

括號匹配 public static boolean isValid(String s) {// 創建一個棧用于存儲左括號Stack<Character> stack new Stack<>();// 遍歷字符串中的每個字符for (char c : s.toCharArray()) {if (c ( || c [ || c {) {// 如果是左括號&#xff0c;將其壓入棧中stack…

遺傳算法(Genetic Algorithm,GA)

遺傳算法&#xff08;Genetic Algorithm&#xff0c;GA&#xff09;是一種受生物進化理論啟發的優化算法&#xff0c;通過模擬自然選擇和遺傳機制來搜索復雜問題的最優解。 ??核心原理?? ??自然選擇與適者生存??&#xff1a;適應度高的個體更有可能繁殖&#xff0c;將…

消防應急物資智能調用立庫:豪越科技助力消防“速戰速決”

在消防救援的戰場上&#xff0c;時間就是生命&#xff0c;每一秒都關乎著人民群眾的生命財產安全。然而&#xff0c;在過去的緊急救援中&#xff0c;應急物資無法及時到位的情況時有發生&#xff0c;成為制約救援效率的關鍵難題&#xff0c;給救援工作帶來了巨大的困境。 想象一…

【MySQL】數據類型和表的操作

目錄 一. 常用的數據類型 1.數值類型 1.1 整形類型 1.2 浮點型類型 2.字符串類型 char和varchar的區別 如何選擇char和varchar 3.日期類型 4.二進制類型 二. 表的操作 1.查看所有表 2.表的創建 3.查看表的結構 4.表的修改 4.1 添加新的列 4.2 修改表中現有的列 4…

漲薪技術|0到1學會性能測試第43課-apache status模塊監控

前面的推文我們認識了apache目錄結構與配置知識,今天我們繼續來看下apache監控技術,究竟是怎么做性能監控的。后續文章都會系統分享干貨,帶大家從0到1學會性能測試。 Apache監控技術 關于apache監控通常會有兩種方法: 一是:使用apache自帶的status監控模塊進行監控; 二是…

關于 MCP 的理論知識學習

文章目錄 1. 寫在最前面2. 基本概念2.1 Why MCP2.1.1 大模型訪問的局限2.1.2 過渡階段—Function Call2.1.3 當前階段— MCP 3. 碎碎念4. 參考資料 1. 寫在最前面 最近有一項任務是寫舊版本遷移到新版本的支持文檔&#xff0c;文檔的編寫是借助于 cursor 幫忙寫的。但是實現的…

C++學習之路,從0到精通的征途:List類的模擬實現

目錄 一.list的介紹 二.list的接口實現 1.結點 2.list結構 3.迭代器 &#xff08;1&#xff09;begin &#xff08;2&#xff09;end 4.修改 &#xff08;1&#xff09;insert &#xff08;2&#xff09;push_back &#xff08;3&#xff09;push_front &#xff0…

【游戲ai】從強化學習開始自學游戲ai-2 使用IPPO自博弈對抗pongv3環境

文章目錄 前言一、環境設計二、動作設計三、狀態設計四、神經網路設計五、效果展示其他問題總結 前言 本學期的大作業&#xff0c;要求完成多智能體PPO的乒乓球對抗環境&#xff0c;這里我使用IPPO的方法來實現。 正好之前做過這個單個PPO與pong環境內置的ai對抗的訓練&#…

計算機考研精煉 操作系統

第 14 章 操作系統概述 14.1 基本概念 14.1.1 操作系統的基本概念 如圖 14 - 1 所示&#xff0c;操作系統是計算機系統中的一個重要組成部分&#xff0c;它位于計算機硬件和用戶程序&#xff08;用戶&#xff09;之間&#xff0c;負責管理計算機的硬件資源&#xff0c;為用戶和…

什么是基爾霍夫第一定律

基爾霍夫第一定律&#xff08;Kirchhoffs First Law&#xff09;&#xff0c;也稱為基爾霍夫電流定律&#xff08;Kirchhoffs Current Law&#xff0c;簡稱 KCL&#xff09;&#xff0c;是電路分析中最基礎的定律之一。它描述了電路中電流的守恒特性&#xff0c;適用于任何集總…

解決 RN Switch 組件在安卓端樣式很丑的問題

解決此種問題的方式有很多 可以導入原生庫react-native-switch 切圖 (會缺少動畫) 使用 js 組件 這里使用 js 繪制組件&#xff08;原生體驗&#xff09;解決此類問題 Switch.tsx import React, { useEffect, useRef, useState } from react; import { Animated, Pressabl…

【AI】【MCP】搭建私人王炸MCP自動化工作流

目錄 一、什么是MCP 二、MCP大集合 三、準備工作 3.1 安裝node.js 3.2 安裝vscode 3.3 安裝cline插件 3.3.1 安裝 3.3.2 配置Cline 四、配置MCP服務 4.1 Search-mcp服務 4.2 playwright-mcp 服務 前言&#xff1a;夢想組合&#xff0c;輕松辦公&#xff0c;告別手動&a…

Git 實操:如何使用交互式 Rebase 移除指定提交(真實案例分享)

在日常開發中&#xff0c;有時候我們提交了一些不想保留的記錄&#xff0c;比如測試代碼、錯誤的功能提交等。 ?? 在操作 4. 強制推送到遠程倉庫前的注意事項 強制推送&#xff08;git push --force 或 git push -f&#xff09;確實很強大但也危險&#xff0c;因為它會重寫…

11.Excel:函數

一 函數是什么 函數是定義好的公式。 單元格內輸入sum然后tab&#xff0c;框選要求和的范圍&#xff0c;然后回車鍵。 補充&#xff1a;公式。 公式以開頭&#xff0c;可以用于計算&#xff0c;返回數值。 分別點擊各個數值&#xff0c;中間用加號連接。這樣很不方便&#xff…

Springboot使用ThreadLocal提供線程局部變量,傳遞登錄用戶名

文章目錄 概述使用創建ThreadLocalUtil工具類在登錄攔截器中使用ThreadLocal存儲登錄用戶名在/userInfo接口中獲取登錄用戶名 注意事項參考視頻 概述 使用 創建ThreadLocalUtil工具類 utils/ThreadLocalUtil.java package org.example.utils;/*** ThreadLocal 工具類*/ Supp…

1399. 統計最大組的數目

1399. 統計最大組的數目 題目鏈接&#xff1a;1399. 統計最大組的數目 代碼如下&#xff1a; class Solution { public:int countLargestGroup(int n) {int res 0;unordered_map<int, int> um;int maxValue 0;for (int i 1;i < n;i) {string value to_string(i);…

VS Code 插件Git History Diff 使用

右上角 查看單個文件記錄

數學建模論文手的學習日常01

目錄 一.要寫的內容&#xff1a; 二.文章標題&#xff1a; 三.摘要&#xff08;非常非常非常重要&#xff09; 四、關鍵詞&#xff1a; 五、問題重述 六、模型假設 七、符號說明 八、模型的建立與求解 九、模型的分析與檢驗 十、模型的評價、改進與推廣 十一、參考…

深度學習: AI 體育領域

一、引言 在科技與體育深度融合的當下&#xff0c;AI 體育逐漸成為推動體育行業變革的重要力量。深度學習憑借其強大的數據分析與模式識別能力&#xff0c;為 AI 體育帶來了全新的發展機遇。從運動員動作分析到智能健身指導&#xff0c;從賽事預測到運動康復輔助&#xff0c;深…