- LightGBM 教程
- LightGBM - 首頁
- LightGBM - 概述
- LightGBM - 架構
- LightGBM - 安裝
- LightGBM - 核心引數
- LightGBM - Boosting 演算法
- LightGBM - 樹生長策略
- LightGBM - 資料集結構
- LightGBM - 二分類
- LightGBM - 迴歸
- LightGBM - 排序
- LightGBM - Python 實現
- LightGBM - 引數調優
- LightGBM - 繪圖功能
- LightGBM - 早停訓練
- LightGBM - 特徵互動約束
- LightGBM 與其他 Boosting 演算法對比
- LightGBM 有用資源
- LightGBM - 有用資源
- LightGBM - 討論
LightGBM - 樹生長策略
梯度提升框架 LightGBM 使用“葉節點優先”(leaf-wise)生長,這是一種新的樹生長方法。在機器學習和資料分析中,決策樹對於分類和迴歸都非常有用。LightGBM 的一個顯著特點是其葉節點優先的樹生長方法,這與大多數決策樹學習演算法使用的標準層級優先(level-wise)樹生長技術不同。
在本章中,我們將瞭解葉節點優先的樹生長方法和層級優先的樹生長方法,並闡明它與大多數決策樹學習演算法使用的典型層級優先樹生長策略的不同之處。
LightGBM 旨在有效地訓練大型資料集並建立高精度的預測模型。在深入探討層級優先和葉節點優先樹生長之前,讓我們先定義一些關鍵術語。
梯度提升 (Gradient Boosting):一種機器學習方法,透過組合多個弱模型(通常是決策樹)來構建強大的預測模型。
決策樹 (Decision Tree):一種類似樹的模型,在葉節點處給出標籤,並在每個內部節點根據特徵進行決策。
LightGBM:LightGBM 是一種由微軟開發的梯度提升框架,用於高效地訓練決策樹,以滿足各種機器學習應用。
傳統的層級優先樹生長
瞭解傳統的層級優先樹生長方法對於理解葉節點優先生長至關重要,該方法用於決策樹和不同的梯度提升框架。當樹生長得更深時,它會在每一層水平分割,形成一個更寬、更淺的樹。層級優先樹構建方法是梯度提升中構建決策樹最流行的方法。
在進入樹的下一層之前,它會在同一層或深度上生長每個節點。選擇最佳化目標函式的最佳特徵和閾值,將根節點分成兩個子節點。然後,對每個子節點重複相同的過程,直到滿足初始條件(如最大深度、最小樣本數或最小改進)。層級優先樹生長方法確保樹是平衡的,並且每個葉子節點都在相同的深度。
葉節點優先樹生長
葉節點優先樹生長方法是梯度提升中構建決策樹的不同方法。
它透過生長樹上所有葉子節點中分割收益最大的葉子節點來工作。透過選擇最大化目標函式的特徵和閾值,將根節點分成兩個子節點。接下來,透過選擇其中一個子節點作為下一個要分割的葉子節點,重複該過程,直到達到停止條件(例如最大深度、最大葉子節點數或最小改進)。即使使用葉節點優先樹生長策略,樹也可能不平衡,或者葉子節點的深度不相同。
LightGBM 使用葉節點優先生長,而不是深度優先生長。使用這種方法,可以生成更深、更小的樹,因為演算法會選擇損失函式減少最大的葉子節點進行分割。與深度優先生長相比,這種策略可以產生更精確的模型,並且節點數量更少。
葉節點優先生長是如何工作的?
讓我們深入討論葉節點優先生長策略 -
在 LightGBM 中,所有訓練資料最初都儲存在單個根節點上。
LightGBM 計算每個可能的節點分割方案的潛在增益,即模型效能的提升。
LightGBM 透過選擇增益最大的分割方案將原始節點分成兩個新的葉子節點。
與層級優先生長(每次分割每一層的所有節點)不同,葉節點優先生長將選擇增益最大的葉子節點(在所有當前葉子節點中)並進行分割。此過程持續進行,直到滿足停止條件(例如最大樹深度、最小增益或葉子節點中的最小樣本數)。
葉節點優先生長的優點
以下是 LightGBM 中葉節點優先生長的一些優點 -
更高的精度:葉節點優先生長通常可以提供更高的精度,因為它積極地針對可以提供最大精度提升的樹的部分。
效率:LightGBM 執行速度更快,因為它不會浪費精力擴充套件對損失減少沒有意義影響的葉子節點。
葉節點優先生長的缺點
以下是 LightGBM 中葉節點優先生長的一些缺點 -
過擬合:由於樹可以在一側生長得非常深,因此如果資料不確定或較小,則更容易過擬合。為了幫助減少這種情況,LightGBM 提供了諸如 max_depth 和 min_child_samples 之類的引數。
記憶體使用不均衡:樹的生長可能不均勻,導致記憶體使用變化,並對某些程式造成挑戰。
控制葉節點優先生長的關鍵引數
下面列出了一些關鍵引數,您可以在 LightGBM 的葉節點優先樹生長中使用 -
num_leaves:定義樹允許具有的最大葉子節點數。更多的葉子節點可以提高精度,儘管它們可能會導致過擬合。
min_child_samples:每個葉子節點所需的最低資料量。增加此值可以減少過擬合。
max_depth:樹的最大深度。控制樹的深度,並具有防止它生長得太深的能力。
learning_rate:控制訓練步長的大小。儘管它需要更多的提升迴圈,但較低的值可以產生更好的結果。
LightGBM 葉節點優先樹生長的示例
以下是一個簡單的示例,說明 LightGBM 如何使用葉節點優先生長 -
import lightgbm as lgb
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
# Generate synthetic dataset
X, y = make_classification(n_samples=1000, n_features=10, n_informative=5, random_state=42)
# Split the data
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# Create a dataset for LightGBM
train_data = lgb.Dataset(X_train, label=y_train)
# Parameters for LightGBM with leaf-wise growth
params = {
'objective': 'binary',
'boosting_type': 'gbdt', # Gradient Boosting Decision Tree
'num_leaves': 31, # Controls the complexity (number of leaves)
'learning_rate': 0.05,
'metric': 'binary_logloss',
'verbose': -1
}
# Train the model
gbm = lgb.train(params, train_data, num_boost_round=100)
# Predict and evaluate
y_pred = gbm.predict(X_test)
y_pred_binary = [1 if p > 0.5 else 0 for p in y_pred]
print(f"Accuracy: {accuracy_score(y_test, y_pred_binary):.4f}")
輸出
以上 LightGBM 模型的結果是
Accuracy: 0.9450
葉節點優先與層級優先樹生長
以下是層級優先和葉節點優先樹生長方法之間的比較 -
| 標準 | 層級優先樹生長 | 葉節點優先樹生長 (LightGBM) |
|---|---|---|
| 生長模式 | 逐層新增節點,平等地擴充套件當前深度的所有葉子節點。 | 將節點新增到增益最大的葉子節點,一次專注於一個葉子節點。 |
| 樹結構 | 生成對稱樹,所有葉子節點都在同一層。 | 生成非對稱樹,某些分支可以生長得更深。 |
| 貪婪性 | 不太貪婪,因為它考慮每一層的所有可能的分割。 | 更貪婪,因為它專注於下一個最有希望的葉子節點進行分割。 |
| 效率 | 通常更節省記憶體,但可能需要更長的時間來找到最佳分割。 | 在查詢最佳分割方面更有效,但由於樹更深,因此可能會使用更多記憶體。 |
| 準確性 | 可能無法快速找到最佳分割,可能導致準確性降低。 | 由於專注於最重要的分割,因此通常會產生更好的準確性。 |
| 過擬合風險 | 過擬合風險較低,因為樹以平衡的方式生長。 | 過擬合風險較高,尤其是在資料嘈雜的情況下,因為生長更深。 |
| 使用場景 | 適用於小型資料集或記憶體使用量成為問題的情況。 | 適用於大型資料集,其中準確性是首要任務。 |