集成學習——Bagging,Boosting

一.什么是集成學習

集成學習的基本思想是通過結合多個基學習器的預測結果,來提高模型的泛化能力和穩定性。這些基學習器可以是相同類型的算法,也可以是不同類型的算法。

當基學習器之間具有一定的差異性時,它們在面對不同的樣本子集或特征子集時,可能會犯不同的錯誤。通過將這些基學習器集成起來,可以相互補充,減少錯誤,從而提高整體的預測準確性。

二.?集成學習的作用

1.增加準確度:多個模型通常比單個模型預測更準確。

2.減少過擬合:通過模型多樣性降低對訓練數據特定模式的依賴。

3.對噪聲數據和異常數據有更高的容忍度。

三.主要的集成學習方法

1.Bagging

原理:通過自助采樣獲得多個訓練集,分別訓練模型,然后取平均值(回歸時)或投票(分類時)。

代表算法:隨機森林算法。

bagging是一種并行式的集成學習方法,不同訓練集訓練模型之間沒有聯系

隨機森林:決策樹 + Bagging

隨機森林api(使用前要記得 from sklearn.ensemble import RandomForestClassifier):

RandomForestClassifier(n_estimators = 40,  #隨機森林中決策樹的數量,一般在50-100之間criterion = 'gini',  #分割特征的方法max_depth = None,bootstrap = None,random_state = 42  #隨機數種子
)

Bagging分類器:

BaggingClassifier(estimator = DecisionTreeClassifier(),  #集成算法使用決策樹n_estimators = 60,  #多少個決策樹max_samples = 0.8,  #每次采樣80%的樣本max_features = 0.8,  #每次采樣80%的特征random_state = 42  #隨機數種子
)

2.Boosting

原理:在每一輪迭代中,根據當前的樣本權重分布,訓練一個弱學習器。這個弱學習器會嘗試對訓練數據進行擬合,但它的性能可能相對較弱。然后,根據弱學習器的預測結果,調整樣本的權重。具體來說,對于被錯誤分類的樣本,增加其權重;對于被正確分類的樣本,降低其權重。這樣,在下一輪迭代中,弱學習器會更加關注那些之前被錯誤分類的樣本。這個過程不斷重復,直到達到預設的迭代次數或者滿足其他停止條件。

代表算法:AdaBoost

Boosting是一種串行集成學習方法,將多個弱學習器集合成一個強學習器。

逐步改進:每個新模型都專注于糾正前一個模型的錯誤。

加權訓練:錯誤分類的樣本在后續訓練中獲得更高權重。

線性組合:將所有弱學習器的預測結果加權組合。

AdaBoost api(使用前要記得 from sklearn.ensemble import AdaBoostClassifier):

AdaBoostClassifier(estimator = DecisionTreeClassifier(),n_estimators = 60,learning_rate = 0.8,random_state = 42)

四.總結

Bagging:從原始訓練數據集中有放回地隨機抽樣,生成多個子數據集,然后分別在這些子數據集上訓練不同的基學習器,最后將這些基學習器的預測結果進行組合(分類任務通常采用投票法,回歸任務通常采用平均法)來得到最終的預測結果。

Boosting:在訓練過程中,根據前一個基學習器的預測結果來調整樣本的權重,使得被錯誤分類的樣本在后續的訓練中得到更多的關注,然后依次訓練多個基學習器,每個基學習器都在上一輪調整后的樣本權重基礎上進行訓練,最后將這些基學習器按照一定的權重組合起來進行預測。

五.小練習

1.

?

import matplotlib.pyplot as plt
from IPython.core.pylabtools import figsize
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score, classification_report, confusion_matrix
import numpy as np
import pandas as pdiris = load_iris()x = iris.data
y = iris.targetx_train, x_test, y_train, y_test = train_test_split(x, y, test_size = 0.3, random_state = 42)
R_forest = RandomForestClassifier(n_estimators = 100,criterion = 'gini',max_depth = 3,random_state = 42
)
R_forest.fit(x_train, y_train)
y_predict = R_forest.predict(x_test)
print('準確率:', accuracy_score(y_predict, y_test))print('分類')
print(classification_report(y_test, y_predict, target_names=iris.target_names))cm = confusion_matrix(y_test, y_predict)
cm_df = pd.DataFrame(cm,index = [f"預測{cls}" for cls in iris.target_names],columns = [f"實際{cls}" for cls in iris.target_names]
)
print(cm_df)plt.figure((figsize(10, 6)))
plt.barh(iris.feature_names, R_forest.feature_importances_)
plt.title('importance')
plt.xlabel('feature_importances')
plt.ylabel('feature_names')
plt.tight_layout()
plt.show()

2.

?

import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import classification_report, roc_auc_scoredata = pd.read_csv('creditcard.csv')scaler = StandardScaler()
data['Amount'] = scaler.fit_transform(data['Amount'].values.reshape(-1, 1))# 刪除Time列
df = data.drop('Time', axis=1)x = data.drop('Class', axis=1)
y = data['Class']
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.3, random_state=42, stratify=y)# 4. 訓練模型
model = RandomForestClassifier(n_estimators=100,class_weight='balanced',random_state=42)
model.fit(x_train, y_train)y_predict = model.predict(x_test)
y_prob = model.predict_proba(x_test)[:, 1]print("分類報告:")
print(classification_report(y_test, y_predict, digits=4))
print(f"AUC-ROC: {roc_auc_score(y_test, y_prob):.4f}")

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

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

相關文章

【筆試訓練】給一個數組構建二叉樹|從前序遍歷與中序遍歷構建二叉樹|二叉樹中的最大路徑和

文章目錄 1.給一個數組構建二叉樹2.從前序遍歷和中序遍歷構建二叉樹3.二叉樹中的最大路徑和 1.給一個數組構建二叉樹 思路:就是借助一個隊列實現層序遍歷的思想。 先將root節點入隊列,構造左右節點后,root取出來時,將其左右孩子都…

Swift實戰:如何優雅地從二叉搜索樹中挑出最接近的K個值

文章目錄 摘要描述題解答案題解代碼分析示例測試及結果時間復雜度空間復雜度總結未來展望 摘要 在日常開發中,我們經常會遇到“在一堆數據中找出最接近某個值”的需求。尤其在搜索引擎、推薦系統或者地理坐標匹配中,這種“最近匹配”的問題非常常見。Le…

Linux512 ssh免密登錄 ssh配置回顧

下載MX 官網 參考 OK 登個tom試試 然后再計劃登個RealServer 計劃再用僅主機網卡試試 連不上 看來要通過JumpServer再聯 通過網卡訪問 被踢掉了 成功通過跳板機JumpServer登入到RealServer 方法一免密登錄 現計劃嘗試方法二 只有1個tom 我連了兩個tom 看來是根據IP劃…

編譯原理AST以Babel為例進行解讀、Webpack中自定義loader與plugin

AST樹詳解 編譯原理 主要研究如何將高級編程語言的源代碼轉換為機器能理解的目標代碼(通常是二進制代碼或中間代碼)。編譯器的底層實現通常包含多個階段,包括詞法分析、語法分析、語義分析和代碼生成。 一、AST的核心概念與作用 AST&#…

51c大模型~合集127

我自己的原文哦~ https://blog.51cto.com/whaosoft/13905076 #Executor-Workers架構 圖解Vllm V1系列2 本文詳細介紹了vllm v1的Executor-Workers架構,包括Executor的四種類型(mp、ray、uni、external_launcher)及其適用場景&#xff…

《Effective Python》第1章 Pythonic 思維詳解——深入理解流程控制中的解構利器match

《Effective Python》第1章 Pythonic 思維詳解——深入理解流程控制中的解構利器match 引言 Python 3.10 引入了全新的 match 語句,它不僅是一個“類 switch”的語法結構,更是一種**結構化模式匹配(structural pattern matching&#xff09…

Nacos源碼—8.Nacos升級gRPC分析五

大綱 7.服務端對服務實例進行健康檢查 8.服務下線如何注銷注冊表和客戶端等信息 9.事件驅動架構源碼分析 7.服務端對服務實例進行健康檢查 (1)服務端對服務實例進行健康檢查的設計邏輯 (2)服務端對服務實例進行健康檢查的源碼 (3)服務端檢查服務實例不健康后的注銷處理 (…

[手寫系列]Go手寫db — — 完整教程

[手寫系列]Go手寫db ZiyiDB是一個簡單的內存數據庫實現,支持基本的SQL操作,包含create、insert、delete、select、update、drop。目前一期暫支持int類型以及字符類型數據,后續會支持更多數據結構以及能力。本項目基于https://github.com/eato…

十三、動態對象創建(Dynamic Object Creation)

十三、動態對象創建(Dynamic Object Creation) 目錄 13.1 對象創建(Object creation)13.2 new / delete 操作符13.3 數組的 new 與 delete13.4 總結 背景說明 有時候我們需要知道程序中對象的數量、類型和聲明周期,…

一、網絡基礎

IPv4:32位二進制 -- 點分十進制標識 192.168.1.1(連續的32位,為了好看方便每8位一段) IPv6:128位二進制 IP(Internet協議) 洪泛:除流量進入接口外的所有接口的復制 OSI模型&#…

前端面試測試題目(一)

一、Vue的雙向綁定機制(v-model底層實現原理) Vue的雙向綁定核心由 響應式系統 和 指令語法糖 共同實現,具體原理如下: 響應式系統 Vue通過數據劫持和依賴收集實現數據變化到視圖的同步: ? 數據劫持:在Vue…

我用Deepseek + 亮數據爬蟲神器 1小時做出輿情分析器

我用Deepseek 亮數據爬蟲神器 1小時做出輿情分析器 一、前言二、Web Scraper API 實戰(1)選擇對應的URL(2)點擊進入對應url界面(3)API結果實例和爬取結果展示(4)用戶直接使用post請…

機器學習實戰:歸一化與標準化的選擇指南

在機器學習實戰中——是否需要歸一化(Normalization)或標準化(Standardization),取決于所使用的模型類型。 ? LightGBM / XGBoost 是否需要歸一化或標準化? 不需要。 🔧 原因: L…

磁珠特點,原理與應用

什么是磁珠? 磁珠在1930年由日本東京工業大學的加藤與五郎和武井武兩位教授發明,TDK首次生產,是電感的一種,區別就是:電感外面包裹著鐵氧體材質。 因鐵氧體具有高電阻率,低渦流損耗,高頻時依舊…

【連載14】基礎智能體的進展與挑戰綜述-多智能體系統設計

基礎智能體的進展與挑戰綜述 從類腦智能到具備可進化性、協作性和安全性的系統 【翻譯團隊】劉軍(liujunbupt.edu.cn) 錢雨欣玥 馮梓哲 李正博 李冠諭 朱宇晗 張霄天 孫大壯 黃若溪 在基于大語言模型的多智能體系統(LLM-MAS)中,合作目標和合…

React Native踩坑實錄:解決NativeBase Radio組件在Android上的兼容性問題

React Native踩坑實錄:解決NativeBase Radio組件在Android上的兼容性問題 問題背景 在最近的React Native項目開發中,我們的應用在iOS設備上運行良好,但當部署到Android設備時,進入語言設置和隱私設置頁面后應用崩潰。我們遇到了…

[Windows] 網絡檢測工具InternetTest v8.8.2.2503 單文件版_支持查詢IP_DNS_WIFI密碼一鍵恢復

InternetTest(詳情請戳 官網 / 作者項目地址)是一款免費開源的網絡檢測實用工具,其可實現監控、診斷互聯網網絡連接,例如進行 ping 測試、延遲測試、WiFi 密碼查看、IP 地址或域名信息查詢等算是搭建網站及服務器的實用維護工具。…

配置Hadoop集群-集群配置

以下是 Hadoop 集群的核心配置步驟,基于之前的免密登錄和文件同步基礎,完成 Hadoop 分布式環境的搭建: 1. 集群規劃 假設集群包含 3 個節點: master:NameNode、ResourceManagerslave1:DataNode、NodeMana…

Spring Bean有哪幾種配置方式?

大家好,我是鋒哥。今天分享關于【Spring Bean有哪幾種配置方式?】面試題。希望對大家有幫助; Spring Bean有哪幾種配置方式? 1000道 互聯網大廠Java工程師 精選面試題-Java資源分享網 Spring Bean的配置方式主要有三種&#xff…

Webpack中Compiler詳解以及自定義loader和plugin詳解

Webpack Compiler 源碼全面解析 Compiler 類圖解析: 1. Tapable 基類 Webpack 插件系統的核心,提供鉤子注冊(plugin)和觸發(applyPlugins)能力。Compiler 和 Compilation 均繼承此類,支持插件…