首頁  >  文章  >  科技週邊  >  LightGBM實戰+隨機搜尋調參:準確率96.67%

LightGBM實戰+隨機搜尋調參:準確率96.67%

PHPz
PHPz原創
2024-06-08 22:45:30677瀏覽

LightGBM實戰+隨機搜尋調參:準確率96.67%

大家好,我是Peter~

LightGBM是經典的機器學習演算法,它的背景、原理和特點都非常值得研究。 LightGBM的演算法產生了一些特點,例如高效能、可擴展和高準確性。本文將簡要介紹LightGBM的特點、原理以及一些基於LightGBM和隨機搜尋優化的案例。

LightGBM演算法

在機器學習領域,梯度提昇機(Gradient Boosting Machines, GBMs)是一類強大的整合學習演算法,它們透過逐步添加弱學習器(通常是決策樹)來最小化預測誤差,從而建立一個強大的模型。 GBMs通常用於最小化預測誤差,從而建立一個強大的模型,這可以透過最小化殘差或損失函數來實現。這種演算法被廣泛使用,並經常被用於決策樹等弱學習器所建構的強大模型的最小化預測誤差。

在大數據時代,資料集的規模急劇增長,傳統的GBMs由於其運算和儲存成本高昂,難以有效地擴展。

  • 例如,對於水平分割的決策樹生長策略,雖然可以產生平衡的樹,但往往會導致模型的區分能力下降;而對於基於葉子的生長策略,雖能提高精度卻容易過擬合。
  • 此外,大多數GBM實作在每次迭代中都需要遍歷整個資料集來計算梯度,這在資料量龐大時效率低。因此,需要一個既能高效處理大規模資料又能保持模型準確度的演算法。

為了解決這些問題,Microsoft在2017年推出了LightGBM(Light Gradient Boosting Machine),一個更快、更低記憶體消耗、更高效能的梯度提升框架。

官方學習位址:https://lightgbm.readthedocs.io/en/stable/

LightGBM的原理

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

  • 原則:LightGBM使用直方圖優化技術,將連續的特徵值離散化成特定的bin(即直方圖的桶),減少了在節點分割時需要計算的資料量。
  • 優點:這種方法可以在減少記憶體使用的同時,提高計算速度。
  • 實作細節:對於每個特徵,演算法都維護一個直方圖,記錄該特徵在不同分桶中的統計資料。在進行節點分裂時,可以直接利用這些直方圖的信息,而不需要遍歷所有資料。

2、深度限制的leaf-wise樹生長策略:

  • 原理:與傳統的水平分割不同,leaf-wise的生長策略是每次從在當前所有葉子節點中選擇分裂收益最大的節點進行分裂。
  • 優點:這種策略可以使得決策樹更專注於資料中的異常部分,通常可以得到更好的精確度。
  • 缺點:容易導致過擬合,特別是當資料中有雜訊時。
  • 改進措施:LightGBM透過設定最大深度限制來防止過度擬合。

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

  • 原理:對於資料集中的大梯度樣本,GOSS演算法只保留資料的一部分(通常是大梯度的樣本),減少計算量同時保證不會損失太多的資訊。
  • 優點:這種方法可以在不顯著損失精確度的情況下加快訓練速度。
  • 應用場景:特別適用於資料傾斜嚴重的情況。

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

  • 原則:EFB是一種減少特徵數量,提高計算效率的技術。它將互斥的特徵(即從不同時為非零的特徵)進行合併,以減少特徵維度。
  • 優點:提高了記憶體的使用效率和訓練速度。
  • 實現細節:透過特徵的互斥性,演算法可以在同一時間處理更多的特徵,從而減少了實際處理的特徵數。

5、支援平行與分散式學習:

  • 原理:LightGBM支援多執行緒學習,能夠利用多個CPU進行平行訓練。
  • 優點:顯著提高了在多核心處理器上的訓練速度。
  • 擴充:也支援分散式學習,可以利用多台機器共同訓練模型。

6、快取最佳化:

  • 原則:最佳化了對資料的讀取方式,可以使用更多的快取來加快資料交換的速度。
  • 優點:特別是在大數據集上,快取最佳化可以顯著提升效能。

7、支援多種損失函數:

  • 特點:除了常用的迴歸和分類的損失函數外,LightGBM還支援自訂損失函數,滿足不同的業務需求。

8、正規化和剪枝:

  • 原理:提供了L1和L2正規化項來控制模型複雜度,避免過度擬合。
  • 實作:實現了後向剪枝的策略來進一步防止過度擬合。

9、模型解釋性:

  • 特點:由於是基於決策樹的模型,LightGBM具有良好的模型解釋性,可以透過特徵重要性等方式理解模型的決策邏輯。

LightGBM的特點

高效性

  • #速度優勢:透過直方圖優化和leaf-wise 生長策略,LightGBM 在保證精度的同時大幅提升了訓練速度。
  • 記憶體使用:比起其他GBM實現,LightGBM 需要的記憶體更少,這使得它能夠處理更大的資料集。

準確性

  • 最佳優先的生長策略:LightGBM 採用的leaf-wise 生長策略可以更緊密地擬合數據,通常可以比水平分割更好的精度。
  • 避免過擬合的方法:透過設定最大深度限制和後向剪枝,LightGBM 能夠在提升模型精度的同時避免過度擬合。

可擴展性

  • 平行和分散式學習:LightGBM 的設計支援多執行緒和分散式運算,這使得它能夠充分利用現代硬體的運算能力。
  • 多平台支援:LightGBM 可以在 Windows、macOS 和 Linux 等多種作業系統上運行,支援 Python、R、Java 等多種程式語言。

易用性

  • 參數調優:LightGBM 提供了豐富的參數選項,方便使用者根據特定問題進行調整。
  • 預訓練模型:使用者可以從預訓練的模型開始,加速自己的建模過程。
  • 模型解釋工具:LightGBM 提供了特徵重要性評估工具,幫助使用者理解模型的決策過程。

導入庫

In [1]:

import numpy as npimport lightgbm as lgbfrom sklearn.model_selection import train_test_split, RandomizedSearchCVfrom sklearn.datasets import load_irisfrom sklearn.metrics import accuracy_scoreimport warningswarnings.filterwarnings("ignore")

載入資料

載入公開的iris資料集:

In [2]:

# 加载数据集data = load_iris()X, y = data.data, data.targety = [int(i) for i in y]# 将标签转换为整数

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]
分割資料

In [5]:

# 划分训练集和测试集X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)
同時建立LightGBM資料集:

In [6]:

lgb_train = lgb.Dataset(X_train, label=y_train)
#參數設定

In [7]:

# 设置参数范围param_dist = {'boosting_type': ['gbdt', 'dart'],# 提升类型梯度提升决策树(gbdt)和Dropouts meet Multiple Additive Regression Trees(dart)'objective': ['binary', 'multiclass'],# 目标;二分类和多分类'num_leaves': range(20, 150),# 叶子节点数量'learning_rate': [0.01, 0.05, 0.1],# 学习率'feature_fraction': [0.6, 0.8, 1.0],# 特征采样比例'bagging_fraction': [0.6, 0.8, 1.0],# 数据采样比例'bagging_freq': range(0, 80),# 数据采样频率'verbose': [-1]# 是否显示训练过程中的详细信息,-1表示不显示}
隨機搜尋調參

#In [8]:

# 初始化模型model = lgb.LGBMClassifier()# 使用随机搜索进行参数调优random_search = RandomizedSearchCV(estimator=model, param_distributinotallow=param_dist, # 参数组合 n_iter=100,  cv=5, # 5折交叉验证 verbose=2,  random_state=42,  n_jobs=-1)# 模型训练random_search.fit(X_train, y_train)Fitting 5 folds for each of 100 candidates, totalling 500 fits
輸出最佳的參數組合:

In [9]:

# 输出最佳参数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}
使用最佳參數建模

In [10]:

# 使用最佳参数训练模型best_model = random_search.best_estimator_best_model.fit(X_train, y_train)# 预测y_pred = best_model.predict(X_test)y_pred = [round(i) for i in y_pred]# 将概率转换为类别# 评估模型print('Accuracy: %.4f' % accuracy_score(y_test, y_pred))Accuracy: 0.9667

以上是LightGBM實戰+隨機搜尋調參:準確率96.67%的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn