全部產品
Search
文件中心

PolarDB:LightGBM演算法

更新時間:Jul 06, 2024

本文介紹了LightGBM演算法相關內容。

簡介

LightGBM(Light Gradient Boosting Machine)是一個基於決策樹演算法的分布式梯度提升架構。設計初衷是提供一個快速、高效、低記憶體、高準確度、支援並行和大規模資料處理的工具。LightGBM可以減少資料對記憶體的使用、減少通訊代價以及提升多機並行時的效率,在資料計算上實現線性加速。

使用情境

LightGBM是一個演算法架構,包括GBDT模型、隨機森林和羅吉斯迴歸等模型。通常應用於二分類、多分類和排序等情境。

例如:在個人化商品推薦情境中,通常需要做點擊預估模型。使用使用者過往的行為(點擊、曝光未點擊、購買等)作為訓練資料,來預測使用者點擊或購買的機率。根據使用者行為和使用者屬性提取一些特徵,包括:

  • 類別特徵(Categorical Feature):字串類型,如性別(男/女)。

  • 物品類型:服飾、玩具和電子等。

  • 數值特徵(Numrical Feature):整型或浮點型,如使用者活躍度或商品價格等。

參數說明

下表中的參數為建立模型CREATE MODEL文法中model_parameter參數的取值,您可以根據當前需求選擇對應的參數。

參數

說明

boosting_type

弱學習器的類型。取值範圍如下:

  • gbdt(預設):使用基於樹的模型進行計算。

  • gblinear:使用線性模型進行計算。

  • rf:使用隨機森林模型進行計算。

  • dart:使用dropout技術刪除部分樹,防止過擬合。

  • goss:使用單邊梯度抽象演算法進行計算。速度快,但是可能欠擬合。

說明

設定該參數值時,需要使用單引號將參數值包裹起來。例如:boosting_type='gbdt'

n_estimators

迭代次數。取值為整數。預設值為100。

loss

學習任務及相應的學習目標。取值範圍如下:

  • binary(預設):二分類。

  • regression:使用L2正則項迴歸模型。

  • regression_l1:使用L1正則項迴歸模型。

  • multiclass:多分類。

num_leaves

葉子的個數。取值為整數。預設值為128。

max_depth

樹的最大深度。取值為整數。預設值為7。

說明

如果設定為-1,則表示不對樹的深度做限制。但為防止過擬合,建議合理設定該值。

learning_rate

學習率。取值為浮點數。預設值為0.06。

max_leaf_nodes

樹的最大葉子節點數。取值為空白或者整數。預設值為空白,表示對葉子節點數無限制。

min_samples_leaf

葉子節點最少的樣本數。取值為整數。預設值為20。

說明

如果某葉子節點數目小於最少樣本數,則會和兄弟節點一起被剪枝。

subsample

訓練樣本占所有樣本的比例。取值為浮點數。取值範圍:0~1。預設值為1。

說明

如果取值小於1,則只有這部分比例值的樣本會參與訓練。

max_features

訓練特徵占所有特徵的比例。取值為浮點數。取值範圍:0~1。預設值為1。

max_depth

樹的最大深度。取值為整數。預設值為7。

說明

取值越大,精度越高,但容易過擬合。

random_state

隨機數種子。取值為整數。預設值為1。

說明

設定不同的值會影響樹的構建和訓練資料的切分。

model_type

模型的儲存類型。取值範圍如下:

  • pkl(預設):PKL類型的檔案。

  • pmml:PMML類型的檔案,可以顯示樹的結構等資訊。

n_jobs

訓練的線程數。取值為整數。預設值為4。

說明

訓練的線程數越多,訓練越快。

is_unbalance

是否提高樣本少的類別的權重,用於解決樣本不平衡問題。取值範圍如下:

  • False(預設):不提高樣本少的類別的權重。

  • True:提高樣本少的類別的權重。

categorical_feature

類型特徵。取值為字串數組。一般情況下,演算法會通過判斷資料類型來自動化佈建,但也可以人為指定。

樣本:當categorical_feature參數值設定為'AirportTo,DayOfWeek'時,表示這兩個特徵是類型特徵。

automl

是否開啟自動調參功能。取值範圍如下:

  • False(預設):不開啟自動調參功能。

  • True:開啟自動調參功能。開啟後,預設會使用早停技術,在學習任務及相應的學習目標(loss參數的值)不變時停止迭代。

automl_train_tag

訓練的標籤。

automl_test_tag

測試的標籤。

automl_column

自動調參用來區別訓練集和開發集的列名。使用時需要指定automl_columnautoml_test_tag,建議automl_train_tag的資料數量比automl_test_tag的資料數量多4~9倍。

說明

當設定automl_column參數值後,會開啟自動搜尋最優參數組合的能力。此時,在learning_rate參數和subsample參數前添加automl_首碼,就可以對已有的參數進行搜尋 ,以定位最佳參數。樣本如下:

automl_column='automl_column',automl_train_tag='train',automl_test_tag='test',automl_learning_rate='0.05,0.04,0.03,0.01',automl_subsample='0.6,0.5'

則會從0.05,0.04,0.03,0.01這幾組學習率和0.6,0.5這兩個樣本採樣參數中找到最佳參數。

樣本

建立模型與模型離線訓練

/*polar4ai*/
CREATE MODEL airline_gbm WITH
(model_class = 'lightgbm',
x_cols = 'Airline,Flight,AirportFrom,AirportTo,DayOfWeek,Time,Length',
y_cols='Delay',model_parameter=(boosting_type='gbdt'))
AS (SELECT * FROM db4ai.airlines);

模型評估

/*polar4ai*/
SELECT Airline FROM EVALUATE(MODEL airline_gbm, 
SELECT * FROM db4ai.airlines LIMIT 20) WITH 
(x_cols = 'Airline,Flight,AirportFrom,AirportTo,DayOfWeek,Time,Length',y_cols='Delay',metrics='acc');

模型預測

/*polar4ai*/
SELECT Airline FROM PREDICT(MODEL airline_gbm,
SELECT * FROM db4ai.airlines limit 20) WITH
(x_cols = 'Airline,Flight,AirportFrom,AirportTo,DayOfWeek,Time,Length');