總網頁瀏覽量

星期三, 5月 29, 2019

LightGBM explained系列——Histogram-based algorithm是什麼?

之前有介紹

LightGBM, Light Gradient Boosting Machine

演算法如何使用,那天我突然覺得會使用machine learning的package固然很厲害,但有些時候還是要有一個尋根的心態,所以想帶給大家一個新的系列:
Lightgbm explained系列

如果想更了解LightGBM,可以看我的LightGBM explained系列文


這次是介紹一下,LightGBM在決定best split point所用的演算法 "Histogram-based algorithm"
中文名稱翻作"直方圖優化演算法"



LightGBM explained-Histogram-based algorithm

要搞懂LightGBM的演算法架構,必須先理解基底演算法:
Histogram-based algorithm直方圖優化演算法針對split point finding的優化

針對連續型特徵資料,特徵值(feature)進行裝箱(bin)處理,裝箱處理就是特徵工程中的離散化。換句話說,將某個區間的數據映射到離散的數據值



四個for迴圈:

  • 第一個for 針對當前模型所有葉子節點(也就是資料的特徵/欄位)進行處理
    根據前面的例子,就是對”身高”、”體重”欄位進行處理。
建立直方圖
  • 第二個for針對訓練資料中的每個feature進行處理,開始先建立一個新的直方圖
    對”身高”、”體重”創立一個直方圖。
  • 第三個for 針對所有樣本,以直方圖儲存/表達兩個資訊
    1. 每個bin中樣本的梯度之和(H[ f.bins[i] ].g)
    2. 每個bin中樣本數量(H[ f.bins[i] ].n)
      身高直方圖H[“身高”f.bins[0]].g梯度 + 累積梯度g0 = 0 bin的樣本梯度身高直方圖H[“身高”f.bins[1]].g梯度 + 累積梯度g1 = 1 bin的樣本梯度……180歸屬於3 bin,計算梯度,加上g3;175歸屬於2 bin,計算梯度,加上g2;160歸屬於2 bin,計算梯度,加上g2;……。
    3. 有幾個bin?依據已事先分好的bins數決定。
      身高直方圖H[“身高”f.bins[0]].n數量+1= 0 bin的數量總和……
      g2數量總和= 2;g3數量總和= 1;……。

尋找最佳spliting point
  • 第四個for 針對所有直方圖(即所有bin),尋找最佳的spliting point
    1. 以當前bin做為分割點,計算SL(=當前bin為基準向左所有bin的總梯度和)
      和nL(=當前bin為基準向左所有bin的數量總和)
    2. 計算SR(當前bin為基準向右所有bin的數量總和) = SP(所有bin的梯度總和) – SL和nR(當前bin為基準向右所有bin的數量總和) = nP(所有bin的數量總和) – nL
      有加速的作用? 從#data變成#bin,減少複雜度。
    3. 計算∆Loss=(SL^2)/nL +(SR^2)/nR -(SP^2)/n_P
      Loss的計算依據? 應是依據使用loss function而訂。
    4. 以information gain最高(=Loss最小)的bin做為spliting point


例如:

身高的連續數值0~200              
  • [0, 100) → B11
  • [100, 150) → B12
  • [150, 180) → B13
  • [180, 200) → B14


身高
性別
0
180
0
1
175
1
2
160
0







j父節點

k左節點


l右節點=父節點-左節點


計算:B13 = 2 – 2 = 0;B14 = 1 – 0 = 0
            B21 = 2 – 1 = 1;B22 = 1 – 1 = 0

Reference




沒有留言:

張貼留言

Related Posts Plugin for WordPress, Blogger...