集成算法實驗與分析(軟投票與硬投票)

概述

目的:讓機器學習效果更好,單個不行,集成多個
集成算法
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

import numpy as np
import os
%matplotlib inline
import matplotlib
import matplotlib.pyplot as plt
plt.rcParams['axes.labelsize'] = 14
plt.rcParams['xtick.labelsize'] = 12
plt.rcParams['ytick.labelsize'] = 12
import warnings
warnings.filterwarnings('ignore')
np.random.seed(42)
from sklearn.model_selection import train_test_split
from sklearn.datasets import make_moonsX,y = make_moons(n_samples=500, noise=0.30, random_state=42)
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=42)
plt.plot(X[:,0][y==0],X[:,1][y==0],'yo',alpha = 0.6)
plt.plot(X[:,0][y==0],X[:,1][y==1],'bs',alpha = 0.6)

image.png
投票策略:軟投票與硬投票

  • 硬投票:直接用類別值,少數服從多數
  • 軟投票:各自分類器的概率值進行加權平均,或者自己就去概率值最大的作為結果

硬投票實驗

from sklearn.ensemble import RandomForestClassifier, VotingClassifier
from sklearn.linear_model import LogisticRegression
from sklearn.svm import SVC# 三種分類器,邏輯回歸,隨機森林,支持向量機
log_clf = LogisticRegression(random_state=42)
rnd_clf = RandomForestClassifier(random_state=42)
svm_clf = SVC(random_state=42)voting_clf = VotingClassifier(estimators =[('lr',log_clf),('rf',rnd_clf),('svc',svm_clf)],voting='hard')
voting_clf.fit(X_train,y_train)

image.png

from sklearn.metrics import accuracy_score
print('三種分類器的結果')
for clf in (log_clf,rnd_clf,svm_clf):clf.fit(X_train,y_train)y_pred = clf.predict(X_test)print (clf.__class__.__name__,accuracy_score(y_test,y_pred))
print('集成分類的硬投票結果(一般會在效果上有微量提升,但不會太大)')
voting_clf.fit(X_train,y_train)
y_pred = voting_clf.predict(X_test)
print (voting_clf.__class__.__name__,accuracy_score(y_test,y_pred))

結果輸出:
三種分類器的結果
LogisticRegression 0.864
RandomForestClassifier 0.896
SVC 0.896
集成分類的結果(一般會在效果上有微量提升,但不會太大)
VotingClassifier 0.912

軟投票實驗

from sklearn.ensemble import RandomForestClassifier, VotingClassifier
from sklearn.linear_model import LogisticRegression
from sklearn.svm import SVClog_clf = LogisticRegression(random_state=42)
rnd_clf = RandomForestClassifier(random_state=42)
svm_clf = SVC(probability = True,random_state=42)voting_clf = VotingClassifier(estimators =[('lr',log_clf),('rf',rnd_clf),('svc',svm_clf)],voting='soft')
from sklearn.metrics import accuracy_score
print('三種分類器的結果')
for clf in (log_clf,rnd_clf,svm_clf):clf.fit(X_train,y_train)y_pred = clf.predict(X_test)print (clf.__class__.__name__,accuracy_score(y_test,y_pred))
print('集成分類的軟投票結果(一般會在效果上有微量提升,但不會太大)')
voting_clf.fit(X_train,y_train)
y_pred = voting_clf.predict(X_test)
print (voting_clf.__class__.__name__,accuracy_score(y_test,y_pred))

結果輸出:
三種分類器的結果
LogisticRegression 0.864
RandomForestClassifier 0.896
SVC 0.896
集成分類的硬投票結果(一般會在效果上有微量提升,但不會太大)
VotingClassifier 0.92
總結:軟投票要求必須各個分別器都能得出概率值,一般來說軟投票效果更好一些

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

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

相關文章

排序-插入排序與選擇排序

插入排序 基本思想 把待排序的記錄按其關鍵碼值的大小逐個插入到一個已經排好序的有序序列中,直到所有的記錄插入完為止,得到一個新的有序序列 。 打撲克牌整理手牌用的就是插入排序的思想 代碼實現 void InsertSort(int* a, int n) { assert(a); …

C語言自定義類型

在C語言中,自定義類型可以通過typedef關鍵字來實現。typedef用于為現有的數據類型創建新的名稱(別名),使代碼更清晰易讀。自定義類型的一個常見用途是簡化復雜的類型聲明,特別是在使用結構體、枚舉和函數指針時。 使用…

52、有邊數限制的最短路

有邊數限制的最短路 題目描述 給定一個n個點m條邊的有向圖,圖中可能存在重邊和自環, 邊權可能為負數。 請你求出從1號點到n號點的最多經過k條邊的最短距離,如果無法從1號點走到n號點,輸出impossible。 注意:圖中可…

查看 WSL2 (Windows Subsystem for Linux 2) IP 地址

查看 WSL2 [Windows Subsystem for Linux 2] IP 地址 1. ipconfig2. ping $(hostname).local3. cat /etc/resolv.conf4. ip route show5. ip addrReferences 1. ipconfig Windows 系統上與 WSL2 (Windows Subsystem for Linux 2) 接口的地址 172.31.32.1。 Microsoft Windows…

米爾MYC-Y6ULX-V2開發板測評記錄

文章目錄 1、板子上手體驗2、板載硬件3、系統信息4、 驅動測試5、編譯linux三大件7、攝像頭測試9、總結 1、板子上手體驗 首先非常感謝芯查查給了這樣一個機會來測評這樣一款性能十分強大的開發板,我拿到手的是MYC-Y6ULX-V2核心板及開發板,這塊板子具有…

STM32HAL-最簡單的長、短、多擊按鍵框架

目錄 概述 一、開發環境 二、STM32CubeMx配置 三、編碼 四、運行結果 五、總結 概述 本文章使用最簡單的寫法實現長、短、多擊按鍵框架,非常適合移植各類型單片機,特別是資源少的芯片上。接下來將在stm32單片機上實現,只需占用1個定時…

動態控制eBPF程序加載:檢查 Tracepoint、Kprobe是否存在

前言 在 eBPF 程序開發中,確保程序能夠在各種不同的系統配置中兼容運行是至關重要的。本文將詳細介紹一個方案,通過動態檢查Tracepoint、Kprobe是否存在,并結合libbpf的API接口控制 eBPF 程序的加載。這種方法不僅可以提升程序的靈活性&…

jwt 實現用戶登錄完整java

登錄校驗邏輯 用戶登錄的校驗邏輯分為三個主要步驟,分別是校驗驗證碼,校驗用戶狀態和校驗密碼,具體邏輯如下 前端發送username、password、captchaKey、captchaCode請求登錄。判斷captchaCode是否為空,若為空,則直接…

AWS聯網和內容分發服務

概況 VPC Amazon Virtual Private Cloud (Amazon VPC) 讓您能夠全面地控制自己的虛擬網絡環境,包括資源放置、連接性和安全性。首先在 AWS 服務控制臺中設置 VPC。然后,向其中添加資源,例如 Amazon Elastic Compute Cloud (EC2) 和 Amazon …

數據分析必備:一步步教你如何用Pandas做數據分析(15)

1、Pandas 數據丟失 Pandas 數據丟失的操作實例 在現實生活中,數據丟失始終是一個問題。機器學習和數據挖掘等領域在模型預測的準確性方面面臨嚴重問題,因為缺少值會導致數據質量較差。在這些領域中,缺失值處理是使模型更準確和有效的主要重…

定個小目標之每天刷LeetCode熱題(7)

今天這道題是道簡單題,使用雙指針進行迭代即可,畫了下草圖如下 代碼如下 class Solution {public ListNode reverseList(ListNode head) {if (head null || head.next null) {return head;}ListNode p head, q head.next, temp null;while (q ! nu…

【Python如何將EXCEL拆分】

文章目錄 Python將一個EXCEL表拆分多個excel表Python將一個EXCEL表中一個sheet拆分多個sheet表 Python將一個EXCEL表拆分多個excel表 在Python中,你可以使用pandas庫來讀取Excel文件,并將一個大的Excel表格(工作表)拆分成多個單獨…

Writerside生成在線幫助文檔或用戶手冊軟件基礎使用教程

Writerside是JetBrains出的一個技術文檔工具,既能用在JetBrains IDE上,也能單獨用。它能幫你輕松寫、建、測、發技術文檔,像產品說明、API參考、開發指南等都能搞定。 特點: 文檔即代碼:它讓你像管代碼一樣管文檔&…

【大數據Spark】常見面試題(萬字!建議收藏)

文章目錄 入門級中等難度中高級難度數據傾斜解決方法 入門級 什么是Apache Spark?它與傳統的MapReduce有何不同? Apache Spark是一個開源的分布式計算系統,它提供了高效的數據處理和分析能力。與傳統的MapReduce相比,Spark具有更快…

海光CPU:國產信創的“芯“動力解讀

國產信創CPU-海光CPU CPU:信創根基,國之重器 國產CPU形成三大陣營:自主架構、x86及ARM。自主陣營中,龍芯和申威以LoongArch和SW-64為基石;ARM陣營由鯤鵬、飛騰主導,依托ARM授權研發處理器;x86陣…

紅帽練習 之邏輯卷 pv lv gv

邏輯卷習題 1 在/dev/sdb 存儲設備上創建物理設備分區 創建2個大小各為256MB的分區 并設置為linux lvm類型 使用first 和second 作為這些分區的名稱 parted /dev/sdb mklabel gpt parted /dev/sdb primary mkpart first 1M 256M parted /dev/sdb set 1 …

【Linux|數據恢復】extundelete和ext4magic數據恢復工具使用

環境:Centos7.6_x86 一、extundelete工具 1、extundelete介紹 Extundelete 是一個數據恢復工具,用于從 ext3 或 ext4 分區中恢復刪除文件。根據官網0.2.4版本介紹是支持ext4,但實際上使用發現ext4格式有些問題,會報以下錯誤&…

動態SQL IF語句

IF語句學習 第一種寫法(標準) 我們先來看以下標準寫法: select * from .. <where> <if test""> and ....... <if test""> and ....... <where> 我們用了一個where標簽 , 內嵌if語句 第二種寫法: 這是第二種寫法:不用where標…

大降分!重郵計算機專碩復試線大降50分!重慶郵電計算機考研考情分析!

重慶郵電大學&#xff08;Chongqing University of Posts and Telecommunications&#xff09;簡稱重郵&#xff0c;坐落于中國重慶市主城區南山風景區內&#xff0c;是中華人民共和國工業和信息化部與重慶市人民政府共建的教學研究型大學&#xff0c;入選國家“中西部高校基礎…

一篇文章搞懂Go語言切片底層原理(圖文并茂+舉例講解)

1. 切片和數組的底層關系 Go語言切片的數據結構是一個結構體&#xff1a; type slice struct {array unsafe.Pointerlen intcap int }Go語言中切片的內部結構包含地址、大小和容量。將數組比喻成一個蛋糕&#xff0c;那么切片就是需要切的那一塊&#xff0c;而那一塊的的…