本文介紹了LightGBM演算法相關內容。
簡介
LightGBM(Light Gradient Boosting Machine)是一個基於決策樹演算法的分布式梯度提升架構。設計初衷是提供一個快速、高效、低記憶體、高準確度、支援並行和大規模資料處理的工具。LightGBM可以減少資料對記憶體的使用、減少通訊代價以及提升多機並行時的效率,在資料計算上實現線性加速。
使用情境
LightGBM是一個演算法架構,包括GBDT模型、隨機森林和羅吉斯迴歸等模型。通常應用於二分類、多分類和排序等情境。
例如:在個人化商品推薦情境中,通常需要做點擊預估模型。使用使用者過往的行為(點擊、曝光未點擊、購買等)作為訓練資料,來預測使用者點擊或購買的機率。根據使用者行為和使用者屬性提取一些特徵,包括:
類別特徵(Categorical Feature):字串類型,如性別(男/女)。
物品類型:服飾、玩具和電子等。
數值特徵(Numrical Feature):整型或浮點型,如使用者活躍度或商品價格等。
參數說明
下表中的參數為建立模型CREATE MODEL
文法中model_parameter
參數的取值,您可以根據當前需求選擇對應的參數。
參數 | 說明 |
boosting_type | 弱學習器的類型。取值範圍如下:
說明 設定該參數值時,需要使用單引號將參數值包裹起來。例如: |
n_estimators | 迭代次數。取值為整數。預設值為100。 |
loss | 學習任務及相應的學習目標。取值範圍如下:
|
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 | 模型的儲存類型。取值範圍如下:
|
n_jobs | 訓練的線程數。取值為整數。預設值為4。 說明 訓練的線程數越多,訓練越快。 |
is_unbalance | 是否提高樣本少的類別的權重,用於解決樣本不平衡問題。取值範圍如下:
|
categorical_feature | 類型特徵。取值為字串數組。一般情況下,演算法會通過判斷資料類型來自動化佈建,但也可以人為指定。 樣本:當 |
automl | 是否開啟自動調參功能。取值範圍如下:
|
automl_train_tag | 訓練的標籤。 |
automl_test_tag | 測試的標籤。 |
automl_column | 自動調參用來區別訓練集和開發集的列名。使用時需要指定 說明 當設定
則會從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');