成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

LightGBM算法背景、原理、特點(diǎn)+Python實(shí)戰(zhàn)案例

人工智能
為了解決這些問(wèn)題,Microsoft在2017年推出了LightGBM(Light Gradient Boosting Machine),一個(gè)更快速、更低內(nèi)存消耗、更高性能的梯度提升框架。

大家好,我是Peter~

今天給大家分享一下樹模型的經(jīng)典算法:LightGBM,介紹算法產(chǎn)生的背景、原理和特點(diǎn),最后提供一個(gè)基于LightGBM和隨機(jī)搜索調(diào)優(yōu)的案例。

LightGBM算法

在機(jī)器學(xué)習(xí)領(lǐng)域,梯度提升機(jī)(Gradient Boosting Machines, GBMs)是一類強(qiáng)大的集成學(xué)習(xí)算法,它們通過(guò)逐步添加弱學(xué)習(xí)器(通常是決策樹)來(lái)最小化預(yù)測(cè)誤差,從而構(gòu)建一個(gè)強(qiáng)大的模型。

在大數(shù)據(jù)時(shí)代,數(shù)據(jù)集的規(guī)模急劇增長(zhǎng),傳統(tǒng)的GBMs由于其計(jì)算和存儲(chǔ)成本高昂,難以有效地?cái)U(kuò)展。

  • 例如,對(duì)于水平分割的決策樹生長(zhǎng)策略,雖然可以生成平衡的樹,但往往會(huì)導(dǎo)致模型的區(qū)分能力下降;而對(duì)于基于葉子的生長(zhǎng)策略,雖能提高精度卻容易過(guò)擬合。
  • 此外,大多數(shù)GBM實(shí)現(xiàn)在每次迭代中都需要遍歷整個(gè)數(shù)據(jù)集來(lái)計(jì)算梯度,這在數(shù)據(jù)量巨大時(shí)效率低下。因此,需要一個(gè)既能高效處理大規(guī)模數(shù)據(jù)又能保持模型準(zhǔn)確度的算法。

為了解決這些問(wèn)題,Microsoft在2017年推出了LightGBM(Light Gradient Boosting Machine),一個(gè)更快速、更低內(nèi)存消耗、更高性能的梯度提升框架。

官方學(xué)習(xí)地址:https://lightgbm.readthedocs.io/en/stable/

LightGBM的原理

1、基于直方圖的決策樹算法:

  • 原理:LightGBM使用直方圖優(yōu)化技術(shù),將連續(xù)的特征值離散化成特定的bin(即直方圖的桶),減少了在節(jié)點(diǎn)分裂時(shí)需要計(jì)算的數(shù)據(jù)量。
  • 優(yōu)點(diǎn):這種方法可以在減少內(nèi)存使用的同時(shí),提高計(jì)算速度。
  • 實(shí)現(xiàn)細(xì)節(jié):對(duì)于每個(gè)特征,算法都維護(hù)一個(gè)直方圖,記錄該特征在不同分桶中的統(tǒng)計(jì)信息。在進(jìn)行節(jié)點(diǎn)分裂時(shí),可以直接利用這些直方圖的信息,而不需要遍歷所有數(shù)據(jù)。

2、帶深度限制的leaf-wise樹生長(zhǎng)策略:

  • 原理:與傳統(tǒng)的水平分割不同,leaf-wise的生長(zhǎng)策略是每次從當(dāng)前所有葉子節(jié)點(diǎn)中選擇分裂收益最大的節(jié)點(diǎn)進(jìn)行分裂。
  • 優(yōu)點(diǎn):這種策略可以使得決策樹更加側(cè)重于數(shù)據(jù)中的異常部分,通常可以得到更好的精度。
  • 缺點(diǎn):容易導(dǎo)致過(guò)擬合,特別是當(dāng)數(shù)據(jù)中有噪聲時(shí)。
  • 改進(jìn)措施:LightGBM通過(guò)設(shè)置最大深度限制來(lái)防止過(guò)擬合。

3、單邊梯度采樣(GOSS):

  • 原理:對(duì)于數(shù)據(jù)集中的大梯度樣本,GOSS算法只保留數(shù)據(jù)的一部分(通常是大梯度的樣本),減少計(jì)算量同時(shí)保證不會(huì)損失太多的信息。
  • 優(yōu)點(diǎn):這種方法可以在不顯著損失精度的情況下加快訓(xùn)練速度。
  • 應(yīng)用場(chǎng)景:特別適用于數(shù)據(jù)傾斜嚴(yán)重的情況。

4、互斥特征捆綁(EFB):

  • 原理:EFB是一種減少特征數(shù)量,提高計(jì)算效率的技術(shù)。它將互斥的特征(即從不同時(shí)為非零的特征)進(jìn)行合并,以減少特征維度。
  • 優(yōu)點(diǎn):提高了內(nèi)存的使用效率和訓(xùn)練速度。
  • 實(shí)現(xiàn)細(xì)節(jié):通過(guò)特征的互斥性,算法可以在同一時(shí)間處理更多的特征,從而減少了實(shí)際處理的特征數(shù)。

5、支持并行和分布式學(xué)習(xí):

  • 原理:LightGBM支持多線程學(xué)習(xí),能夠利用多個(gè)CPU進(jìn)行并行訓(xùn)練。
  • 優(yōu)點(diǎn):顯著提高了在多核處理器上的訓(xùn)練速度。
  • 擴(kuò)展性:還支持分布式學(xué)習(xí),可以利用多臺(tái)機(jī)器共同訓(xùn)練模型。

6、緩存優(yōu)化:

  • 原理:優(yōu)化了對(duì)數(shù)據(jù)的讀取方式,可以使用更多的緩存來(lái)加快數(shù)據(jù)交換的速度。
  • 優(yōu)點(diǎn):特別是在大數(shù)據(jù)集上,緩存優(yōu)化可以顯著提升性能。

7、支持多種損失函數(shù):

  • 特點(diǎn):除了常用的回歸和分類的損失函數(shù)外,LightGBM還支持自定義損失函數(shù),滿足不同的業(yè)務(wù)需求。

8、正則化和剪枝:

  • 原理:提供了L1和L2正則化項(xiàng)來(lái)控制模型復(fù)雜度,避免過(guò)擬合。
  • 實(shí)現(xiàn):實(shí)現(xiàn)了后向剪枝的策略來(lái)進(jìn)一步防止過(guò)擬合。

9、模型解釋性:

  • 特點(diǎn):由于是基于決策樹的模型,LightGBM具有良好的模型解釋性,可以通過(guò)特征重要性等方式理解模型的決策邏輯。

LightGBM的特點(diǎn)

高效性

  • 速度優(yōu)勢(shì):通過(guò)直方圖優(yōu)化和 leaf-wise 生長(zhǎng)策略,LightGBM 在保證精度的同時(shí)大幅提升了訓(xùn)練速度。
  • 內(nèi)存使用:相比于其他GBM實(shí)現(xiàn),LightGBM 需要的內(nèi)存更少,這使得它能夠處理更大的數(shù)據(jù)集。

準(zhǔn)確性

  • 最佳優(yōu)先的生長(zhǎng)策略:LightGBM 采用的 leaf-wise 生長(zhǎng)策略可以更緊密地?cái)M合數(shù)據(jù),通常可以得到比水平分割更好的精度。
  • 避免過(guò)擬合的方法:通過(guò)設(shè)置最大深度限制和后向剪枝,LightGBM 能夠在提升模型精度的同時(shí)避免過(guò)擬合。

可擴(kuò)展性

  • 并行和分布式學(xué)習(xí):LightGBM 的設(shè)計(jì)支持多線程和分布式計(jì)算,這使得它能夠充分利用現(xiàn)代硬件的計(jì)算能力。
  • 多平臺(tái)支持:LightGBM 可以在 Windows、macOS 和 Linux 等多種操作系統(tǒng)上運(yùn)行,支持 Python、R、Java 等多種編程語(yǔ)言。

易用性

  • 參數(shù)調(diào)優(yōu):LightGBM 提供了豐富的參數(shù)選項(xiàng),方便用戶根據(jù)具體問(wèn)題進(jìn)行調(diào)整。
  • 預(yù)訓(xùn)練模型:用戶可以從預(yù)訓(xùn)練的模型開(kāi)始,加速自己的建模過(guò)程。
  • 模型解釋工具:LightGBM 提供了特征重要性評(píng)估工具,幫助用戶理解模型的決策過(guò)程。

導(dǎo)入庫(kù)

In [1]:

import numpy as np

import lightgbm as lgb
from sklearn.model_selection import train_test_split, RandomizedSearchCV
from sklearn.datasets import load_iris
from sklearn.metrics import accuracy_score
import warnings
warnings.filterwarnings("ignore")

加載數(shù)據(jù)

加載公開(kāi)的iris數(shù)據(jù)集:

In [2]:

# 加載數(shù)據(jù)集
data = load_iris()
X, y = data.data, data.target
y = [int(i) for i in y]  # 將標(biāo)簽轉(zhuǎn)換為整數(shù)

In [3]:

X[:3]

Out[3]:

array([[5.1, 3.5, 1.4, 0.2],
       [4.9, 3. , 1.4, 0.2],
       [4.7, 3.2, 1.3, 0.2]])

In [4]:

y[:10]

Out[4]:

[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

劃分?jǐn)?shù)據(jù)

In [5]:

# 劃分訓(xùn)練集和測(cè)試集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)

同時(shí)創(chuàng)建LightGBM數(shù)據(jù)集:

In [6]:

lgb_train = lgb.Dataset(X_train, label=y_train)

參數(shù)設(shè)置

In [7]:

# 設(shè)置參數(shù)范圍
param_dist = {
    'boosting_type': ['gbdt', 'dart'],  # 提升類型  梯度提升決策樹(gbdt)和Dropouts meet Multiple Additive Regression Trees(dart)
    'objective': ['binary', 'multiclass'],  # 目標(biāo);二分類和多分類
    'num_leaves': range(20, 150),  # 葉子節(jié)點(diǎn)數(shù)量
    'learning_rate': [0.01, 0.05, 0.1],  # 學(xué)習(xí)率
    'feature_fraction': [0.6, 0.8, 1.0],  # 特征采樣比例
    'bagging_fraction': [0.6, 0.8, 1.0],  # 數(shù)據(jù)采樣比例
    'bagging_freq': range(0, 80),  # 數(shù)據(jù)采樣頻率
    'verbose': [-1]  # 是否顯示訓(xùn)練過(guò)程中的詳細(xì)信息,-1表示不顯示
}

隨機(jī)搜索調(diào)參

In [8]:

# 初始化模型
model = lgb.LGBMClassifier()


# 使用隨機(jī)搜索進(jìn)行參數(shù)調(diào)優(yōu)
random_search = RandomizedSearchCV(estimator=model,
                                   param_distributinotallow=param_dist, # 參數(shù)組合
                                   n_iter=100, 
                                   cv=5, # 5折交叉驗(yàn)證
                                   verbose=2, 
                                   random_state=42, 
                                   n_jobs=-1)
# 模型訓(xùn)練
random_search.fit(X_train, y_train)
Fitting 5 folds for each of 100 candidates, totalling 500 fits

輸出最佳的參數(shù)組合:

In [9]:

# 輸出最佳參數(shù)
print("Best parameters found: ", random_search.best_params_)
Best parameters found:  {'verbose': -1, 'objective': 'multiclass', 'num_leaves': 87, 'learning_rate': 0.05, 'feature_fraction': 0.6, 'boosting_type': 'gbdt', 'bagging_freq': 22, 'bagging_fraction': 0.6}

使用最佳參數(shù)建模

In [10]:

# 使用最佳參數(shù)訓(xùn)練模型
best_model = random_search.best_estimator_
best_model.fit(X_train, y_train)

# 預(yù)測(cè)
y_pred = best_model.predict(X_test)
y_pred = [round(i) for i in y_pred]  # 將概率轉(zhuǎn)換為類別

# 評(píng)估模型
print('Accuracy: %.4f' % accuracy_score(y_test, y_pred))
Accuracy: 0.9667

責(zé)任編輯:武曉燕 來(lái)源: 尤而小屋
相關(guān)推薦

2023-04-11 08:00:00

PythonOtsu閾值算法圖像背景分割

2025-06-19 08:00:00

Python算法背包問(wèn)題

2009-07-07 17:30:58

JSP應(yīng)用開(kāi)發(fā)

2011-05-18 11:14:45

JSP

2017-05-26 11:00:38

Python算法

2024-06-06 10:08:32

2009-07-09 14:01:22

JVM工作原理

2010-09-26 08:50:11

JVM工作原理

2010-09-16 14:42:44

JVM

2014-10-16 14:51:42

RFID

2010-06-24 13:55:41

LEACH協(xié)議

2010-09-17 15:32:52

JVM工作原理

2025-01-16 07:10:00

2023-04-26 06:22:45

NLPPython知識(shí)圖譜

2021-06-25 17:47:12

騰訊NTA

2021-06-25 18:40:33

主機(jī)安全

2021-06-25 17:41:35

騰訊NTA

2021-06-25 17:45:25

騰訊NTA

2012-11-08 11:17:24

VDIvSphere

2010-10-15 09:24:32

無(wú)線網(wǎng)絡(luò)原理
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 国产福利视频网站 | 人人干人人玩 | 亚洲欧美日韩精品久久亚洲区 | 中文字幕av高清 | 久久精品在线 | www.99热.com| 成人伊人 | 91高清在线观看 | 黄在线免费观看 | www国产成人免费观看视频 | 国产精品精品视频一区二区三区 | 亚洲午夜视频 | 国产91精品久久久久久久网曝门 | 国产一区二区三区 | 亚洲第一色av | 日韩欧美国产精品一区二区三区 | 亚洲国产成人av好男人在线观看 | 精品久久久久香蕉网 | 久久久久免费精品国产 | 久久精品超碰 | 日本一区二区三区视频在线 | 日韩午夜在线观看 | 中文在线观看视频 | 一区二区三区视频免费观看 | 999精品视频 | 日韩国产欧美视频 | 最新日韩精品 | 成人欧美一区二区三区黑人孕妇 | 亚洲视频在线观看 | av官网在线 | 一级高清 | 久久久精品影院 | 日本精品网站 | 99精品久久久 | 成人精品一区 | 国产精品免费一区二区三区四区 | 亚洲九色 | 久久久久久久久国产精品 | 国产精品一区二区在线播放 | 午夜精品久久久久久久星辰影院 | 国产乱码精品一区二区三区五月婷 |