機器學習——LightGBM

LightGBM(light gradient boosting machine,輕量梯度提升機)是對XGBoost進行改進的模型版本,其三者之間的演變關系為:GBDT-》XGBoost-》LightGBM依次對性能進行優化,盡管XGBoost已經很高效了,但是仍然有缺陷,故此時就得到一個更為高效的模型版本LightGBM

由于XGBoost的復雜度是由于對每個特征值進行預排序,遍歷所有可能的分裂點計算增益,其排序算法的復雜度=特征數×特征分裂點的數量×樣本數。對XGBoost優化主要就從特征數、特征分裂點、樣本數三個方面進行優化

?其涉及的優化方面涉及算法和策略(機器學習的三要素:模型、策略和算法),以下是LightGBM采樣的四個優化方法:

①直方圖算法(Histogram-based Split,從特征分裂點的優化)

由于XGBoost通過對每個特征值進行排序,遍歷所有可能的分裂點計算增益,其計算復雜度高(特征數×特征分裂點數×樣本量),內存消耗較大。其優化的方式是將連續特征離散化轉化為直方圖的bins,僅需遍歷所有的bins而非所有的樣本來尋找最優特分裂點。使得其復雜度降低到O(特征數×bins數×樣本量),同時還可以通過直方圖差加速(父結點直方圖剪去子結點直方圖得到另外一個子結點的直方圖),其速度提升十倍,內存消耗降低到1/10

知識補充:

在機器學習中,bins(即分箱或者區間)指的是將連續型特征(年齡、收入、溫度等)的數值范圍離散化為多個區間,對每個區間進行整數編號即劃分區間

②單邊梯度抽樣(Gradient-based One-Side Sampling,從對應樣本量的優化)

這個單邊梯度抽樣是分為對高梯度樣本和低梯度樣本進行分別抽樣,使得在減少30%~50%的數據量時,幾乎不損失精度。這種方法避免了傳統隨機采樣過程中可能丟失重要樣本信息

核心思想分為三個 :

A.保留高梯度樣本:選取梯度絕對值最大的前a%樣本,

B.隨機抽樣低梯度樣本:從剩余樣本中隨機抽取b%,并為其梯度乘以(1-a)/b作為補償分布偏移。一般a和b的默認取值為0.2和0.1

C.僅用抽樣數據計算分裂增益值,降低原本使用全部樣本進行增益計算的計算復雜度。

其分裂增益計算的數學表達式:

知識補充:

梯度在GBDT中代表樣本的預測難度,即梯度的絕對值越大,樣本越難擬合

③互斥特征捆綁算法(Exclusive Feature Bunding,從特征數上優化)

高維特征中,許多特征是互斥的(如“用戶性別”和“懷孕次數”不會同時為非零值),對于這種互斥或者沖突最少的特征進行捆綁,將捆綁的特征映射到同一個bin范圍(如原特征A的bin范圍是0-10,特征B的bin范圍為11-20);那么怎么識別這種互斥或者沖突最少的特征呢?可以選擇使用貪心算法和圖著色算法獲取沖突最少特征。那么如何定義沖突最少呢?此時可以定義一個捆綁特征沖突率,當該沖突率低于閾值(max_conflict_rate)時,即可對其特征進行捆綁。

知識補充1:

(如“用戶性別”和“懷孕次數”不會同時為非零值)這一內容怎么理解?

對于性別為男性的用戶,懷孕次數幾乎總是 0(除非特殊場景)。

對于性別為女性的用戶,懷孕次數可能為 0、1、2 等。如果在一些場景為>0的樣本

結論:在同一行數據中,這兩個特征不會同時為非零值(男性懷孕次數為0,女性懷孕次數可能為非零)。因此它們是互斥特征(如果其為男性,那么其懷孕次數自動為0;而懷孕次數不為0,一定是女性,在這種場景下兩個特征就可以視為單一特征)

知識補充2:

捆綁特征選擇算法(圖著色算法):將所有特征視為圖的各個頂點,用一條邊連接兩個不互相獨立的特征,邊的權重則表示兩個相連接的特征的沖突比率(max_conflict_rate),通過閾值比較判定兩點之間是否需要被涂上同一個顏色。但是這樣會存在一個問題,特征捆綁后怎么進行取值的問題?比如一個特征A的取值范圍是[20,40),另外一個特征B的取值范圍為[30,60),此時特征捆綁后不做什么特殊處理后,就會得到取值范圍為[20,60],那么我現在有一個值為30的特征值,我該放進A特征中,還是放進B特征中呢?故需要對不互相獨立的特征進行一個偏置處理,即比如對特征B的取值范圍加上一個10的偏置值,使得B特征的取值范圍變成[40,70],此時就可以對里面的特征進行很好的區分了

④leaf-wise生長策略(帶有深度限制葉子結點生長,即有max_depth作為葉子結點生長限制條件,為了避免出現XGBoost的過擬合的問題)

XGBoost的Level_wise策略:逐層分裂所有葉子結點,避免過擬合但產生冗余分裂(出現某些增益低的結點無需分裂),故其產生的是一個對稱樹。

LightGBM的leaf_wise策略:只分裂增益最大的葉子,生成不對稱樹,并通過設置max_depth來防止過擬合。故其產生的是一個不對稱樹

綜上,LightGBM較XGBoost更適合處理大規模(百萬級別以上的樣本)、高維特征、實時性高的數據樣本;而對于小規模本地上運行的樣本、樣本需要精細調制的、需要強解釋的模型,建議使用XGBoost框架。

幸運的是,LightGBM作為工業級的框架,其已經封裝成庫,直接可以在pycharm中通過pip install lightgbm的指令進行安裝。Lightgbm庫提供了分類和回歸兩大類接口,以及可以繪制模型特征重要性圖

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

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

相關文章

內網服務器無法通過公網地址訪問映射到公網的內網服務

內網服務器無法通過公網地址訪問映射到公網的內網服務 問題現象問題原因解決方法總結 前幾天遇到一個網絡問題,在這里做下記錄,希望能幫助到有相同問題的朋友。 問題現象 網絡拓撲如上所示,服務器1和服務器2在同一內網,網段均為1…

python每日十題(13)

一般把計算機完成一條指令所花費的時間稱為一個指令周期。指令周期越短,指令執行就越快。本題答案為D選項。 順序程序具有順序性、封閉性和可再現性的特點,使得程序設計者能夠控制程序執行的過程(包括執行順序、執行時間),對程序執…

Python 裝飾器(Decorators)

什么是裝飾器? 裝飾器(Decorator)本質上是一個 修改其他函數功能的函數。它的核心思想是:不修改原函數代碼,動態添加新功能。比如: 記錄函數執行時間 檢查用戶權限 緩存計算結果 自動重試失敗操作 理解…

uWebSockets開發入門

一、常用C++ WebSocket開源庫 一些常用的 C++ WebSocket 開源庫,它們支持 WebSocket 協議的實現,適用于客戶端或服務器端開發。 1. Boost.Beast (推薦) 特點:基于 Boost.Asio 的高性能庫,支持 HTTP/WebSocket,屬于 Boost 官方庫的一部分,穩定且跨平臺。 適用場景:需要高…

多智能體功能分化的核心優勢是什么:提升效率,查漏補缺

多智能體功能分化的核心優勢是什么:提升效率,查漏補缺 在于通過分工協作提升整體效率、靈活性和魯棒性。 1. 提升效率與專業性 原理:單一智能體無需處理全流程,通過專業化分工減少冗余計算和決策延遲。 示例: 自動駕駛系統: 感知智能體:專門處理攝像頭、激光雷達等傳…

項目復盤:websocket不受跨域限制的原理

主要還是因為: 1、WebSocket 是獨立于 HTTP 的應用層協議,通過 HTTP 建立連接后,完全脫離 HTTP 語義約束。這意味著 不受 HTTP 同源策略限制 不需要預檢請求 不依賴 CORS 頭機制 2、建立連接時的握手請求仍使用 HTTP 格式,但…

COMPASS:通過殘差強化學習和技能合成實現跨具身移動策略

25年2月來自 Nvidia、UC Berkeley 和 UT Austin 的論文“COMPASS: Cross-embOdiment Mobility Policy via ResiduAl RL and Skill Synthesis”。 隨著機器人越來越多地部署在不同的應用領域,可泛化的跨具身移動策略變得越來越重要。雖然經典的移動棧已被證明在特定…

無人機,雷達定點飛行時,位置發散,位置很飄,原因分析

參考: 無人車傳感器 IMU與GPS數據融合進行定位機制_gps imu 組合定位原始數-CSDN博客 我的無人機使用雷達定位,位置模式很飄 雷達的更新頻率也是10HZ, 而px飛控的頻率是100HZ,沒有對兩者之間的頻率差異做出處理 所以才導致無人…

學習threejs,使用Sprite精靈、SpriteMaterial精靈材質

👨??? 主頁: gis分享者 👨??? 感謝各位大佬 點贊👍 收藏? 留言📝 加關注?! 👨??? 收錄于專欄:threejs gis工程師 文章目錄 一、🍀前言1.1 ??THREE.Sprite1.1.1 ??代碼…

外星人入侵(python設計小游戲)

這個游戲簡而言之就是操作一個飛機對前方的飛船進行射擊,和一款很久之前的游戲很像,這里是超級低配版那個游戲,先來看看效果圖: 由于設計的是全屏的,所以電腦不能截圖。。。。 下面的就是你操控的飛船,上面…

什么是CMS?常用CMS有哪些?

一、內容管理系統(Content Management System)? ?什么是CMS?:位于 Web 前端(服務器)和后端辦公系統之間的軟件系統,用于內容創建、編輯、審批和發布。支持文本、圖片、視頻、數據庫等各類數字內容的管理…

Go 語言規范學習(3)

文章目錄 Properties of types and valuesRepresentation of valuesUnderlying types【底層類型】Core types【核心類型】Type identityAssignabilityRepresentabilityMethod sets BlocksDeclarations and scopeLabel scopesBlank identifierPredeclared identifiersExported i…

在 Ubuntu 上安裝 Docker 的完整指南

1. 卸載舊版本(如有) 在安裝新版本前,建議先卸載舊版本: sudo apt remove docker docker-engine docker.io containerd runc 2. 安裝依賴包 更新軟件包索引并安裝必要的依賴: sudo apt update sudo apt install -y ca-certificates curl gnupg lsb-release 3. 添加 Do…

turtle的九個使用

一 import turtle as t color [red,green,blue,orange,pink] for i in range(len(color)):t.penup()t.goto(-20070*i,0)t.pendown()t.pencolor(color[i])t.circle(50, steps 5) t.done()二 #在____________上補充代碼 #不要修改其他代碼import random as r import turtle a…

23種設計模式-備忘錄(Memento)設計模式

備忘錄設計模式 🚩什么是備忘錄設計模式?🚩備忘錄設計模式的特點🚩備忘錄設計模式的結構🚩備忘錄設計模式的優缺點🚩備忘錄設計模式的Java實現🚩代碼總結🚩總結 🚩什么是…

利用虛擬化技術實現高級Hook

虛擬化技術為系統監控和Hook提供了更強大、更隱蔽的實現方式。以下是幾種基于虛擬化的Hook技術實現方法: 1. 基于VT-x/AMD-V的硬件虛擬化Hook 基本原理 利用CPU的硬件虛擬化擴展(Intel VT-x/AMD-V)在Ring -1層級監控系統行為,實現無法被常規方法檢測的…

某魚、某寶 sign 簽名算法分析記錄

【作者主頁】:小魚神1024 【知識星球】:小魚神的逆向編程圈 【擅長領域】:JS逆向、小程序逆向、AST還原、驗證碼突防、Python開發、瀏覽器插件開發、React前端開發、NestJS后端開發等等 本文章中所有內容僅供學習交流使用,不用于其…

Compose筆記(十三)--事件總線

這一節了解一下Compose中的事件總線,在Jetpack Compose里,官方沒有直接提供事件總線,但可以借助第三方庫或者自定義實現來達成事件總線的功能,進而在不同的 Compose 控件間同步數據。 自定義事件總線 import androidx.compose.r…

Python的inspect模塊

在Python編程中,**inspect**模塊是一個強大的工具包,它提供了一系列函數來獲取對象的信息,主要用于獲取對象的源代碼、參數信息、類繼承關系、方法屬性等。這對于調試、自動化文檔生成、代碼分析等場景都非常有用。本文將詳細介紹inspect模塊…

2025跳槽學習計劃

(1)編程基礎: 目錄學習資料Chttps://www.bilibili.com/video/BV1z64y1U7hs?spm_id_from333.1387.favlist.content.clickLinuxPytorchhttps://www.bilibili.com/video/BV1if4y147hS?spm_id_from333.1387.favlist.content.clickopencv數據結…