16_集成學習

描述

集成學習(Ensemble Learning)是一種通過結合多個模型的預測結果來提高整體性能的技術。集成學習的核心思想是通過多個弱學習器的組合,可以構建一個強學習器。

sklearn中常見的集成學習算法:

  • Bagging:通過自助采樣法(Bootstrap Sampling)生成多個訓練集,然后分別訓練多個模型,最后通過投票或平均的方式得到最終結果。
  • Boosting:通過迭代的方式訓練多個模型,每個模型都試圖糾正前一個模型的錯誤,最終通過加權投票的方式得到結果。
  • Stacking:通過訓練多個不同的模型,然后將這些模型的輸出作為新的特征,再訓練一個元模型(Meta-Model)來進行最終的預測。

sklearn中的集成學習算法在sklearn.ensemble 中;后面的XGBClassifier算法需要單獨安裝xgboost庫;LGBMClassifier需要安裝lightgbm庫。

Bagging

Bagging 的目標是通過減少模型的方差來提高性能,適用于高方差、易過擬合的模型。

  • 數據集重采樣:對訓練數據集進行多次有放回的隨機采樣,每次采樣得到一個子數據集。
  • 訓練多個模型:在每個子數據集上訓練一個基學習器(通常是相同類型的模型)。
  • 結果合并:將多個基學習器的結果進行合并,通常是通過投票(分類問題)或平均(回歸問題)。

最具代表性的算法是:隨機森林是 Bagging 的經典實現,它通過構建多個決策樹,每棵樹在訓練時隨機選擇特征,從而減少過擬合的風險。

優勢

  • 可以有效減少方差,提高模型穩定性。
  • 適用于高方差的模型(如決策樹)

缺點

  • 訓練過程時間較長,需要訓練多個模型
  • 結果難以解釋

Boosting

Boosting 的目標是通過減少模型的偏差來提高性能,適用于弱學習器。Boosting 的核心思想是逐步調整每個模型的權重,強調那些被前一輪模型錯誤分類的樣本。

  • 序列化訓練:模型是一個接一個地訓練的,每一輪訓練都會根據前一輪的錯誤進行調整。
  • 加權投票:最終的預測是所有弱學習器預測的加權和,其中錯誤分類的樣本會被賦予更高的權重。
  • 合并模型:每個模型的權重是根據其在訓練過程中的表現來確定的。

典型算法:

  • AdaBoost:通過改變樣本的權重,使得每個后續分類器更加關注前一輪錯誤分類的樣本。
  • 梯度提升樹:GBT 通過迭代優化目標函數,逐步減少偏差。
  • XGBoost:XGBoost 是一種高效的梯度提升算法,廣泛應用于數據科學競賽中,具有較強的性能和優化。
  • LightGBM:是一種基于梯度提升樹的框架,相較于 XGBoost,具有更快的訓練速度和更低的內存使用。

優勢

  • 適用于偏差較大的模型,能有效提高預測準確性。
  • 性能好,在許多實際應用中表現優異。

缺點

  • 對噪聲數據比較敏感,容易導致過擬合。

  • 訓練過程較慢,特別是在數據量較大的情況下。

Stacking

Stacking 是一種通過訓練不同種類的模型并組合它們的預測來提高整體預測準確度的方法。核心思想是:

  • 第一層(基學習器):訓練多個不同類型的基學習器(例如,決策樹、SVM、KNN 等)來對數據進行預測。
  • 第二層(元學習器):將第一層學習器的預測結果作為輸入,訓練一個元學習器(通常是邏輯回歸、線性回歸等),來做最終的預測。

優勢

  • 可以使用不同類型的基學習器,捕捉數據中不同的模式。
  • 理論上可以結合多種模型的優勢,達到更強的預測能力。

缺點

  • 訓練過程復雜,需要對多個模型進行訓練,且模型之間的結合方式也需要精心設計。
  • 比其他集成方法如 Bagging 和 Boosting 更復雜,且容易過擬合。

應用樣例

StackingClassifier

from sklearn.ensemble import StackingClassifier
from sklearn.linear_model import LogisticRegression
from sklearn.tree import DecisionTreeClassifier
from sklearn.svm import SVC
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_splitiris = load_iris()
X_train, X_test, y_train, y_test = train_test_split(iris.data, iris.target, random_state=42)# 定義基學習器
estimators = [('dt', DecisionTreeClassifier(max_depth=1)),('svc', SVC(kernel='linear', probability=True))
]
# final_estimator 參數指定元學習器
stacking = StackingClassifier(estimators=estimators, final_estimator=LogisticRegression())
stacking.fit(X_train, y_train)
print(stacking.score(X_train,y_train),stacking.score(X_test,y_test))

XGBClassifier

from xgboost.sklearn import XGBClassifiermodel = XGBClassifier(eval_metric='error',max_depth=1)
model.fit(X_train,y_train)
print(model.score(X_train,y_train),model.score(X_test,y_test))

XGBClassifier常用參數:

  • learning_rate:小的學習率意味著更多的迭代次數,通常能帶來更好的結果,但會增加計算時間。
  • max_depth:控制每棵樹的深度,避免過擬合。
  • subsample:訓練每棵樹時使用的樣本比例。
  • colsample_bytree:在構建樹時對特征進行采樣的比例。
  • n_estimators:決策樹的個數
  • eval_metric:校驗數據所需的評價指標。回歸任務默認‘rmse’,分類任務默認‘error’。其他可選值’logloss’、‘auc’
  • gamma:懲罰項系數,指定節點分裂所需的最小損失函數下降值。值越大,算法越保守。
  • alpha:L1 正則化系數,默認為 1。
  • booster:指定弱學習器的類型,默認值為 ‘gbtree’。可以選擇 ‘gblinear’ 使用線性模型。

LGBMClassifier

from lightgbm.sklearn  import LGBMClassifiermodel = LGBMClassifier(max_depth=1,boosting_type='gbdt',learning_rate=0.2)
model.fit(X_train,y_train)
print(model.score(X_train,y_train),model.score(X_test,y_test))

LGBMClassifier常用參數:

  • n_estimators:指定弱分類器的數量,默認是100
  • learning_rate:控制每個弱分類器的貢獻,默認0.1。一個較小的學習率一般需要更多的樹來提高模型性能
  • max_depth:控制每棵樹的深度,避免過擬合。
  • boosting_type:提升類型,可以是 gbdt(默認)、dart、goss等,分別對應傳統提升樹、Dropouts與GOSS。
  • class_weight:用于解決分類不平衡問題,可以設置成balanced或者手動指定每個類別的權重。
  • num_leaves:葉子節點的數量,較高的值能夠提高訓練的準確度,但也容易導致過擬合

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

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

相關文章

學習STC51單片機43(芯片為STC89C52RCRC)智能小車9(語音識別小車)

每日一言 不必與他人比較速度,你走的每一步都在書寫自己的傳奇。 案例:語音識別小車 這個是最后一個功能了,其實就是用語音功能讓小車自己切換各種模式,當然了我們需要先學習一下語音模塊 硬件:SU-03T 這個叫做非特定…

Android 中 解析 XML 字符串的幾種方式

在 Android 開發中,解析 XML 文件有多種方式,每種方式都有其特點和適用場景。常見的 XML 解析方式有 DOM 解析、SAX 解析 和 XmlPullParser 解析。 1、DOM 解析 DOM(Document Object Model)解析是一種基于樹結構的解析方式&#…

云端算力革命:川翔云電腦如何重新定義創作自由

在設計與科技深度融合的時代,高性能硬件的桎梏正成為創意釋放的最大障礙。川翔云電腦以云端算力為支點,通過彈性算力、高效存儲、多端接入三大核心優勢,讓頂級 GPU 資源觸手可及。 一、核心優勢:突破物理極限的云端工作站 彈性算…

1.容器技術與docker環境部署

一:docker概述 因為 Docker 輕便、快速的特性,可以使應用達到快速迭代的目的。每次小的變更,馬上就可以看到效果,而不用將若干個小變更積攢到一定程度再變更。每次變更一小部分其實是一種非常安全的方式,在開發環境中…

關于 RSA:RSA 加密算法過程

RSA 是一種非對稱加密算法,用“公鑰”加密,用“私鑰”解密,保證數據傳輸安全。 比喻理解:鎖和鑰匙 想象一下: 公鑰是“上鎖的鎖”,別人可以用它鎖住箱子(加密),但打不開…

SM3算法C語言實現(無第三方庫,帶測試)

一、SM3算法介紹 SM3算法是中國國家密碼管理局(OSCCA)于2010年發布的商用密碼散列函數標準,屬于我國自主設計的密碼算法體系之一 ,標準文檔下載地址為:SM3密碼雜湊算法 。SM3算法輸出長度為256位(32字節&a…

搜索二叉數(c++)

前言 在學習數據結構的時候我們學習過二叉樹,那啥是搜索二叉樹呢?我們知道單純的二叉樹沒有增刪查改的實際意義,因為沒有任何限制條件的二叉樹其實用處很局限。但是堆就不一樣了,他就是一個二叉樹加上了大小堆的限制條件&#xf…

vc MFC在opencv的Mat圖像上顯示中文:Mat轉位MFC的CImage,畫圖寫文字,再轉回Mat

vc MFC在opencv的Mat圖像上顯示中文:Mat轉位MFC的CImage,畫圖寫文字,再轉回Mat // Step 1 創建CImage獲取dc int iImgW matImgSized.cols; int iImgH matImgSized.rows; int iChannel matImgSized.channels(); bool bCon matImgSized.is…

Docker環境部署

目錄 一:Docker 概述 1.什么是 Docker 2:Docker 的優勢 3.Docker 的應用場景 4:Docker 核心概念 二:Docker 安裝 1:本安裝方式使用阿里的軟件倉庫 三:Docker 鏡像操作 1:獲取鏡像 2.查看鏡像信息 3.查看鏡像詳細信息 4.修改鏡像標簽(老名字新名字) 5:刪…

Axios 攔截器實現原理深度剖析:構建優雅的請求處理管道

在構建現代前端應用時,網絡請求處理是關鍵環節。作為最流行的HTTP客戶端庫之一,Axios通過其攔截器機制(Interceptors)提供了強大的請求/響應處理能力。本文將深入Axios源碼,揭示攔截器背后的精妙設計與實現原理。 一、…

寶塔安裝nginx-http-flv-module,音視頻直播,第二篇

1,先安裝環境安裝nginx 先卸載原有nigix nigix 大于等于 1.2.6 cd /www/server # 進入寶塔目錄 yum install git -y git clone https://gitee.com/winshining/nginx-http-flv-module.git 使用源碼安裝nigix 在 自定義模塊 區域點擊「添加」,填寫以下參…

低延遲4G專網:保障關鍵業務的實時通信

在工業互聯網、智慧園區、應急通信等對“實時性”要求極高的場景中,網絡延遲的高低,直接決定了業務運行的可靠性與安全性。IPLOOK依托多年核心網研發經驗,推出的低延遲4G專網解決方案,正是為此類關鍵業務打造的“通信專線”&#…

NLP語言發展路徑分享

自然語言處理初期發展歷程 早期:離散表示 one-hot(只表達“有/無”,語義完全丟失)→ n-gram(局部上下文,但高維稀疏)→ TF-IDF(考慮詞頻與權重,但不能表達詞關聯&#x…

如何將文件從安卓設備傳輸到電腦?

將文件從 Android 手機傳輸到 PC 是例行公事嗎?想讓文件傳輸更輕松嗎?幸運的是,您可以從本文中獲得 7 種方法,其中包含詳細的步驟,幫助您輕松了解如何將文件從 Android 傳輸到 PC,涵蓋了從無線工具到傳統 U…

【經驗分享】淺談京東商品SKU接口的技術實現原理

京東商品 SKU 接口的技術實現原理涉及數據建模、架構設計、接口協議、安全機制及性能優化等多個技術層面。以下從技術角度詳細拆解其實現邏輯: 一、SKU 數據模型與存儲架構 1. SKU 數據模型設計 核心字段定義: 基礎屬性:SKU ID、商品名稱、…

虛擬機配置node.js(前端環境搭建)

1.在windows下安裝node.js(以及npm) 修改npm鏡像為阿里云的 npm install --registryhttps://registry.npmmirror.com 2.在Linux下安裝node.js(Centos7 只支持16版本之前的) wget https://npmmirror.com/mirrors/node/v15.14.0/n…

多模態大語言模型arxiv論文略讀(129)

Task Success Prediction for Open-Vocabulary Manipulation Based on Multi-Level Aligned Representations ?? 論文標題:Task Success Prediction for Open-Vocabulary Manipulation Based on Multi-Level Aligned Representations ?? 論文作者:M…

【Redis】Redis 關于 BigKey 的實踐規約

目錄 一、BigKey 的概念 1.1 普通 key 的設計規則 1.2 BigKey 的定義 1.3 BigKey 存在的問題 二、BigKey 的發現與解決方案 第一種方式:redis-cli --bigkeys 第二種方式:scan掃描 第三種方式:第三方工具 第四種方式:網絡…

Golang 與 C/C++ 交互實踐

在軟件開發的實際場景中,我們常常會遇到需要將不同語言的優勢結合起來的情況。Golang 憑借其高效的并發性能和簡潔的語法,在網絡編程和系統開發領域備受青睞;而 C/C 則以其強大的底層操作能力,在系統資源管理方面具有獨特優勢。那…

五子棋流量主小程序單模式多模式開源版

功能和特點: 核心游戲功能: 1515 標準棋盤 黑白棋交替落子 自動判斷勝負和平局 悔棋功能 計時功能 UI 設計: 木紋風格棋盤 立體感棋子(使用陰影和漸變) 響應式布局,適配不同屏幕尺寸 勝利彈窗動畫 交互體驗…