- 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 這樣的機器學習模型時可以更改的主要設定或選項。它們控制著模型如何從資料中學習,這對模型的準確性和效能有重要影響。
使用關鍵引數,可以為您的特定資料、任務和限制定製 LightGBM 模型。透過更改這些引數,您可以最佳化模型的效率、速度和泛化能力。
為什麼使用核心引數
LightGBM 中的核心引數可以幫助您 -
控制模型複雜度:限制樹的大小和深度,避免使模型過於簡單(遺漏模式)或過於複雜(擬合噪聲)。
提高準確性:更改模型的學習過程,例如它應該學習的速度,以快速發現最佳選項。
防止過擬合:使用限制或懲罰來防止模型學習資料中的噪聲而不是潛在模式。
加速訓練:透過決定每個階段使用多少資料和多少特徵來加快訓練速度。
適應不同的任務:為您的特定問題(如迴歸或分類)選擇最佳設定,並正確監控效能。
LightGBM 中的核心引數
在這裡,我們將重點關注控制模型行為的核心 LightGBM 引數 -
1. boosting_type (預設值 = 'gbdt')
此引數控制訓練過程中使用的提升技術。選項如下 -
'gbdt'(梯度提升決策樹):預設方法,稱為“梯度提升決策樹”或“gbdt”,使用梯度提升依次構建決策樹。
'dart'(Dropout 遇見多加性迴歸樹):在訓練期間,一些樹會被隨機消除以防止過擬合。
'goss'(基於梯度的單側取樣):選擇具有較大梯度的顯著資料點以加速訓練。
'rf'(隨機森林):隨機森林,稱為“rf”,獨立建立樹並聚合其預測。
2. objective
建立 LightGBM 將嘗試最佳化的損失函式或目標函式。
'regression':用於預測連續變數的技術,例如房價。
'binary':對於涉及二元分類的任務(例如,是/否,垃圾郵件/非垃圾郵件)使用“binary”。
'multi-class':要指代涉及多類分類的問題,請使用“multi-class”。
3. metric
此引數提供將用於評估模型效能的評估指標。
'binary_logloss':二分類的對數損失。
'auc':ROC 曲線下面積,主要用於分類任務。
'rmse':指回歸情況下的均方根誤差。
4. learning_rate (預設值 = 0.1)
此核心引數控制每次迭代向損失函式最小值移動時的步長。
較低的值(如 0.01)表示學習速度較慢但準確性較高。
較高的數字(例如,0.1)可能允許更快的學習,但存在錯過最佳響應的風險。
5. num_iterations (預設值 = 100)
它主要用於設定模型應執行的提升迭代次數。較高的值意味著更多的提升輪次和更好的學習,但它會增加訓練時間。
6. num_leaves (預設值 = 31)
它用於確定每棵樹的複雜度。
較高的值提供更復雜的樹,但可能導致過擬合。
較低的值簡化了樹,減少了過擬合的可能性。
7. max_depth (預設值 = -1)
它主要用於限制樹的最大深度。如果將其設定為 -1,則表示沒有限制。
較低的值(例如 3 或 5)減少了深度,從而減少了模型。
較高的數字允許更深的樹,這可以檢測更復雜的模式,但可能會過擬合。
8. min_data_in_leaf (預設值 = 20)
它是葉節點中所需的最小資料點數量。
較高的數字透過確保每個葉節點都有足夠的資料點來降低過擬合的可能性。
較低的值可以提高模型的靈活性,同時增加過擬合的危險。
9. feature_fraction (預設值 = 1.0)
它用於控制用於訓練每棵樹的特徵數量。
分數 1.0 表示完全使用所有特徵。
小於 1.0 的值隨機選擇一組子集,從而防止過擬合。
10. bagging_fraction (預設值 = 1.0)
確定每次迭代中用於訓練的資料點比例。
值 1.0 代表所有資料點。
較低的值包含一個隨機子集,這增加了隨機性並有助於防止過擬合。
11. bagging_freq (預設值 = 0)
確定 Bagging 的頻率。如果設定為正值,則啟用 Bagging,並且資料會在每個 bagging_freq 週期隨機選擇。
12. lambda_l1 & lambda_l2 (預設值 = 0.0)
它分別控制 L1 和 L2 正則化。較高的值會向模型新增正則化,透過懲罰較大的值來防止過擬合。
13. min_gain_to_split (預設值 = 0.0)
它是建立葉節點上的另一個分割所需的最小增益。較高的值使模型更加保守,從而防止過擬合。
使用核心引數實現 LightGBM
讓我們使用 LightGBM 為乳腺癌資料集構建一個使用這些核心引數的模型 -
安裝 LightGBM
首先執行以下命令以在您的系統中安裝 LightGBM -
pip install lightgbm
匯入庫並載入資料
安裝包後,我們將匯入所需的庫並載入資料 -
import lightgbm as lgb from sklearn.datasets import load_breast_cancer from sklearn.model_selection import train_test_split from sklearn.metrics import accuracy_score # Load dataset data = load_breast_cancer() X, y = data.data, data.target # Split data into training and testing sets X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
定義核心引數
現在讓我們為我們的模型定義核心引數 -
# Define LightGBM parameters
params = {
'boosting_type': 'gbdt',
'objective': 'binary',
'metric': 'binary_logloss',
'num_leaves': 31,
'learning_rate': 0.05,
'num_iterations': 100,
'max_depth': 5,
'feature_fraction': 0.8,
'bagging_fraction': 0.8,
'bagging_freq': 5,
'lambda_l1': 0.1,
'lambda_l2': 0.1,
'min_gain_to_split': 0.01
}
準備 LightGBM 的資料
在此階段,我們需要為 Light Gradient Boosting Machine 準備資料。
# Prepare data for LightGBM train_data = lgb.Dataset(X_train, label=y_train)
訓練模型
現在使用準備好的資料集訓練模型 -
# Train the LightGBM model model = lgb.train(params, train_data)
進行預測並評估模型
現在您必須使用訓練好的模型進行預測並評估其準確性 -
# Make predictions
y_pred = model.predict(X_test)
y_pred_binary = [1 if pred > 0.5 else 0 for pred in y_pred]
# Evaluate model accuracy
accuracy = accuracy_score(y_test, y_pred_binary)
print(f"Accuracy is as follows: {accuracy}")
這將導致以下結果
Accuracy is as follows: 0.9737