集成算法:Bagging模型、AdaBoost模型和Stacking模型

概述

目的:讓機器學習效果更好,單個不行,集成多個
集成算法
Bagging:訓練多個分類器取平均
f ( x ) = 1 / M ∑ m = 1 M f m ( x ) f(x)=1/M\sum^M_{m=1}{f_m(x)} f(x)=1/Mm=1M?fm?(x)
Boosting:從弱學習器開始加強,通過加權來進行訓練
F m ( x ) = F m ? 1 ( x ) + a r g m i n h ∑ i = 1 n L ( y i , F m ? 1 ( x i ) + h ( x i ) ) F_m(x)=F_{m-1}(x)+argmin_h\sum^n_{i=1}L(y_i,F_{m-1}(x_i)+h(x_i)) Fm?(x)=Fm?1?(x)+argminh?i=1n?L(yi?,Fm?1?(xi?)+h(xi?))
(加入一棵樹,新的樹更關注之前錯誤的例子)
Stacking:聚合多個分類或回歸模型(可以分階段來做)

Bagging模型(隨機森林)

全稱: bootstrap aggregation(說白了就是并行訓練一堆分類器)
最典型的代表就是隨機森林,現在Bagging模型基本上也是隨機森林。
image.png
隨機:數據采樣隨機,每棵樹只用部分數據;數據有多個特征(屬性)組成,每棵樹隨機選擇部分特征。隨機是為了使得每個分類器擁有明顯差異性。
森林:很多個決策樹并行放在一起
如何對所有樹選擇最終結果?分類的話可以采取少數服從多數,回歸的話可以采用取平均值。

構造樹模型

image.png
由于二重隨機性,使得每個樹基本上都不會一樣,最終的結果也會不一樣。
樹模型:
image.png

隨機性

之所以要進行隨機,是要保證泛化能力,如果樹都一樣,那就沒意義了!
如下圖所示,當每個弱分類器分類錯誤的樣本各不相同時,則能得到一個效果優異的集成模型。
image.png

隨機森林優勢

它能夠處理很高維度的數據,即數據擁有很多特征(屬性),并且不用做特征選擇(集成算法自動選擇了重要的特征)。
在訓練完后,它能夠給出哪些feature比較重要。
image.png
可以進行可視化展示,便于分析。
容易做成并行化方法,速度比較快。
解答為什么隨機森林能夠給出哪些feature比較重要。
假如有四個分類器 A , B , C , D A,B,C,D A,B,C,D,他們對應關注(隨機選擇到)的屬性為 a , b , c , d a,b,c,d a,b,c,d
A , B , C , D A,B,C,D A,B,C,D的結果并且按少服從多數(也可以去平均等決策策略)得到錯誤了 e r r o r 1 error_1 error1?
之后我們給 B B B制作假數據,把之前真的數據結果打亂或者換成不合理的值,得到 B ′ B' B,之后
A , B ′ , C , D A,B',C,D A,B,C,D的結果并且按少服從多數(也可以去平均等決策策略)得到錯誤了 e r r o r 2 error_2 error2?
如果 e r r o r 2 ≈ e r r o r 1 error_2\approx error_1 error2?error1?,則說明屬性 B B B并不重要。
如果 e r r o r 2 ? e r r o r 1 error_2 \gg error_1 error2??error1?,則說明屬性 B B B非常重要,對結果造成了巨大影響。

關于樹的個數

image.png
理論上越多的樹效果會越好,但實際上基本超過一定數量就差不多上下浮動了。

Boosting模型(提升算法模型)

概述:
F m ( x ) = F m ? 1 ( x ) + a r g m i n h ∑ i = 1 n L ( y i , F m ? 1 ( x i ) + h ( x i ) ) F_m(x)=F_{m-1}(x)+argmin_h\sum^n_{i=1}L(y_i,F_{m-1}(x_i)+h(x_i)) Fm?(x)=Fm?1?(x)+argminh?i=1n?L(yi?,Fm?1?(xi?)+h(xi?))
假如有三個分類器 A , B , C A,B,C A,B,C,這個時候正如公式所示, A , B , C A,B,C A,B,C有種串聯的感覺。
假如有1000條數據, A A A僅分類正確900條,之后 B B B就關注錯誤的100條數據,僅那100條作為數據預測(這個做法有點極端,也可以拿小部分900條里面的數據),之后 B B B正確預測出50條,那么 C C C就那拿剩下的50條錯誤的數據用來給 C C C預測。
典型代表: AdaBoost, Xgboost

AdaBoost模型

Adaboost會根據前一次的分類效果調整數據權重,如果某一個數據在這次分錯了,那么在下一次我就會給它更大的權重
最終的結果:每個分類器根據自身的準確性來確定各自的權重,再合并結果。
Adaboost工作流程
每一次切一刀,最終合在一起,弱分類器效果就更好了
image.png

Stacking模型

堆疊:很暴力,拿來一堆分類器直接上
可以堆疊各種各樣的分類器( KNN,SVM,RF等等)
為了刷結果,不擇手段!
分階段:第一階段得出各自結果,第二階段再用前一階段結果訓練
image.png
堆疊在一起確實能使得準確率提升,但是速度是個問題。

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

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

相關文章

插入排序以及希爾排序; 先學會插入,希爾會更簡單喔

1.前言 首先肯定是要學會插入排序再學習希爾排序會更簡單,因為代碼部分有很多相似之處;如果你覺得你很強,可以直接看希爾排序的講解。哈哈哈!,每天進步一點點,和昨天的自己比 2.插入排序 讓我們先來看看…

鴻蒙Ability Kit(程序框架服務)【UIAbility組件與UI的數據同步】

UIAbility組件與UI的數據同步 基于當前的應用模型,可以通過以下幾種方式來實現UIAbility組件與UI之間的數據同步。 [使用EventHub進行數據通信]:在基類Context中提供了EventHub對象,可以通過發布訂閱方式來實現事件的傳遞。在事件傳遞前&am…

Rustdesk 自建服務器教程

一、環境 阿里云輕量服務器、debian11 系統 二、服務端搭建 2.1、開放防火墻指定端口 TCP(21115, 21116, 21117, 21118, 21119)UDP(21116) 2.2、安裝 rustdesk 服務器文件 在 github 下載頁https://github.com/rustdesk/rustdesk-server/releases/,下載 rustde…

【自撰寫,國際象棋入門】第1課、棋盤和棋子

第1課 棋盤和棋子 一、國際象棋的棋盤 國際象棋的棋盤為一8乘8的黑、白格相間的棋盤,8條豎線的編號分別為A-H,8條橫線的編號分別為1-8,在記譜時用豎線編號橫線編號的方式表示棋盤上的格子,例如a1格、h8格等.棋盤上有幾條重要的大…

c++程序員為什么要做自己的底層庫

五一期間,在家里翻到之前上學時候用的電腦和工作日志,粗略瀏覽一番,感慨10年歲月蹉跎,仍然沒有找到自己技術方向的“道”。遂有感而發,寫下此文。 算起來,接觸軟件開發也有10年時間了,最開始是…

Java——異常

1.什么是異常 將程序執行過程中發生的不正常行為稱為異常。 常見的異常有:算數異常,空指針異常,數組越界異常 每一種異常都有對應的類對齊描述 為了對每一種異常進行管理,Java內部實現了一個對異常的體系結構 1. Throwable&#x…

CS2游戲30萬掛箱賬號被封,飾品市場要變天

Steam游戲平臺上CS2的玩家在線人數常年位于第一位,即便偶爾會被爆款游戲擠下來,但一切都是暫時的。飾品交易作為CS2的重要組成部分,早已成為了維系游戲熱度的不二法門。可相對應的,各種掛箱子的工作室及個人也孕育而生。 但近來V社…

mysql多啟動

binary安裝: 1、redhat rpm 2、mysql rpm 3、mysql glibc source安裝: 1、5.1mysql(./configure && make && make install) 2、5.5mysql(cmake && make && make install) 單啟動: 1、安裝 tar xf xxx.tar…

【Docker學習】docker pull詳細說明

docker pull是我們經常用到的一個命令。我們使用一些官方鏡像,如MySql、Nginx等都需要用docker pull下載。不過不用的話,也可以。比如使用docker run,要是找不到鏡像,會自動下載。 命令: docker image pull 描述&am…

Uniapp寫一個簡單的商品瀑布流界面+商品詳情

最終效果: 整體內容比較簡單,參考了一篇瀑布流文章和一篇商品詳情文章隨便修改整了下,主要是給想做這方便面的新人一個簡單邏輯的展示(其實我也是第一次寫這個emmm) 一.組件下載: uni-icon uni-goods-nav…

什么是ACP?

前言 ACP指的是應用程序控制平面,是微服務架構中的一個關鍵組成部分。它負責管理微服務架構中的各個微服務,包括服務發現和注冊、負載均衡、服務路由、熔斷和降級、配置管理等方面的功能。 A:可用性 所有請求都有響應。C:強一致…

[DDR5 Jedec 3-4] 模式寄存器 Mode Register MRR/MRW

依公知及經驗整理,原創保護,禁止轉載。 專欄 《深入理解DDR》 1. 概念 模式寄存器用于定義各種操作模式。在初始化過程中,可以通過重新執行MRS命令來更改模式寄存器的內容。即使用戶只想修改模式寄存器變量的一個子集,在發出MRS命令時也必須編程所有變量。 只有當所有ban…

C語言案例-輸入任意三個數,按從大到小的順序輸出.

目錄 問題待續、更新中 問題 輸入任意三個數,按從大到小的順序輸出. 最大值 3數&#xff0c;重新排序輸出 輸出數據if來&#xff0c;ab ac bc比&#xff0c;比中里面交換值&#xff0c;輸出abc時為降序 代碼如下: #include <stdio.h> void main() {int a,b,c,t;printf(&…

現實殘酷!存款百萬只是少數人的游戲,普通家庭能存多少?

近期&#xff0c;網絡上掀起了一股關于普通家庭終身存款上限的熱烈討論。一位網友通過簡單的算術方式提出了一個假設&#xff1a;如果一對夫妻每年收入15萬&#xff0c;并成功將6萬存入銀行&#xff0c;那么從25歲步入社會至60歲退休&#xff0c;他們理論上能積累到210萬的存款…

從0開發一個Chrome插件:Manifest 文件詳解

前言 這是《從0開發一個Chrome插件》系列的第六篇文章,本系列教你如何從0去開發一個Chrome插件,每篇文章都會好好打磨,寫清楚我在開發過程遇到的問題,還有開發經驗和技巧。 專欄: 從0開發一個Chrome插件:什么是Chrome插件?從0開發一個Chrome插件:開發Chrome插件的必要…

C++知識點總結(36):二分進階練習

二分答案練習 一、憤怒的羊駝題目描述輸入描述輸出描述樣例1提示參考答案 二、偷吃西瓜題目描述輸入描述輸出描述樣例1提示參考答案 三、丟沙包題目描述輸入描述輸出描述樣例1提示參考答案 四、木材加工題目描述輸入描述輸出描述樣例1提示參考答案 五、路標設置題目描述輸入描述…

Go語言之GORM框架(四)——預加載,關聯標簽與多態關聯,自定義數據類型與事務(完結篇)

前言 本來是想著寫多表關系的&#xff0c;不過寫了一半發現重復的部分太多了&#xff0c;想了想與其做一些重復性工作&#xff0c;不如把一些當時覺得抽象的東西記錄一下&#xff0c;就當用一篇雜記完成專欄的最后一篇文章吧。 預加載 簡單示例 預加載主要用于在多表關系中…

谷歌瀏覽器的平替,內置開掛神器,我已愛不釋手!

油猴瀏覽器正式版是一款基于谷歌Chromium源碼開發的瀏覽器&#xff0c;它集成了集成了強大的油猴擴展&#xff08;Tampermonkey&#xff09;&#xff0c;使得用戶可以輕松安裝各種腳本&#xff0c;從而增強網頁瀏覽體驗。提供了一個更加個性化和高效的瀏覽體驗。 油猴擴展&…

git使用流程

1.下載git 搜索下載 2.注冊github賬號&#xff08;打開爬墻工具&#xff09; 創建一個倉庫 3.配置郵箱和密碼 4.所以找一個文件夾 鼠標右鍵 選擇 open Git Bash here&#xff08;當前文件夾下打開命令行&#xff09; 輸入命令 配置用戶名和郵箱 5.將建的倉庫克隆下來 …

【JS實戰案例匯總——不定時更新版】

一&#xff1a;轉換時間案例 1 需求&#xff1a; 用戶輸入秒數&#xff0c;系統會自動將秒數轉變為小時、分鐘、秒&#xff0c;并且不滿10的要在前面補零 2 算法&#xff1a; 小時:hour parseInt(總秒數/60/60%24) 分鐘:minute parseInt(總秒數/60%60) 秒數:second pa…