L2R 三:常用工具包介紹之 XGBoost與LightGBM


L2R最常用的包就是XGBoost 和LightGBM,xgboost因為其性能及快速處理能力,在機器學習比賽中成為常用的開源工具包, 2016年微軟開源了旗下的lightgbm(插句題外話:微軟的人真是夠謙虛的,開源的包都是light前綴,公司更是micro),對標xgboost,在結果相差不大的前提下,顯著縮短了訓練時間。

 

先占個坑,等有空展開寫寫。

 

下面分別介紹下兩者:

  一、XGBoost

  1.git地址:https://github.com/dmlc/xgboost   參數說明:http://xgboost.readthedocs.io/en/latest/python/python_api.html

  2.改進思想

    2.1 算法方面

      2.1.1 SPLIT FINDING ALGORITHMS

 

    2.2 系統實現

      2.2.1 Column Block for Parallel Learning

 

      2.2.2 Cache-aware Access

  3.參數說明     

xgboost參數
params = {'seed':0, 'objective':'reg:tweedie', 'eval_metric':'tweedie-nloglik@1.2', 'tweedie_variance_power':1.2}
params = {'seed':0, 'objective':'reg:linear', 'eval_metric':'rmse'}

param = {
'eta':0.1, 	
#為了防止過擬合,更新過程中用到的收縮步長。在每次提升計算之后,算法會直接獲得新特征的權重。 eta通過縮減特征的權重使提升計算過程更加保守。
#缺省值為0.3

'max_depth':3, 	
#數的最大深度。缺省值為6

'silent':0, 
#取0時表示打印出運行時信息,取1時表示以緘默方式運行,不打印運行時信息。缺省值為0
	
'objective':'reg:gamma',

'tweedie_variance_power':1.7,	
#parameter that controls the variance of the Tweedie distribution var(y) ~ E(y)^tweedie_variance_power
#取值range: (1,2)  2為gamma分布、1為Poisson分布

"tree_method":"approx", 	
	
"colsample_bytree":1.0,	
#在建立樹時對特征采樣的比例。缺省值為1

"subsample":1, 
#用於訓練模型的子樣本占整個樣本集合的比例。如果設置為0.5則意味着XGBoost將隨機的沖整個樣本集合中隨機的抽取出50%的子樣本建立樹模型,
這能夠防止過擬合。
	
'sketch_eps':0.03, (默認值)

"updater":'grow_histmaker,prune',
#‘grow_histmaker’: distributed tree construction with row-based data splitting based on global proposal of histogram counting.
#‘prune’: prunes the splits where loss < min_split_loss (or gamma).
	
'lambda': 0.1
#Parameter for Linear Booster L2 正則的懲罰系數 default為0
"alpha":0.5,
#Parameter for Linear Booster L1 正則的懲罰系數 default為0


num_round = tree_num  train階段進行設置
#The number of rounds for boosting

  

 

  二、LightGBM

  1.git地址:https://github.com/Microsoft/LightGBM    入門安裝文檔:https://lightgbm.readthedocs.io/en/latest/    中文文檔:http://lightgbm.apachecn.org/cn/latest/Quick-Start.html

  2. 改進思想

    2.1 histgram 算法

    2.2 GOSS

 

 

  3.lightgbm模型文件解析

  配置文件備注1:  配置文件根據不同任務在examples中各個子文件夾中都有示例,額外的參數是可以指定categorical_column,這個主要是區別於連續變量,這兩種類型的變量在lightgbm中可以都只占一列,而不需特別進行離散化。

  配置文件備注2:  categorical特征和continuous特征的缺失值分別用'NA'和‘-1’表示。

 

  首先,模型文件主要分三部分:模型基本概況 、各個子樹的信息以及各個特征重要性說明。

  3.1 模型基本概況

    主要包括:

      num_class=1(二分類與listwise均為1,轉換成概率),

      label_index(目標所在的列序號),

      max_feature_idx(特征最大列數,從0開始計數,和feature_names呼應)

      feature_infos(列出每個特征的取值范圍,連續變量用中括號區間表示, 離散值用冒號分隔,挨個枚舉列出來, 沒有發揮作用就用none表示)

      tree_sizes(每棵樹的size)

      version=v2

 

配置信息:

categorical_column = 12,13,14,15,16,17,19,21,23,26,28,30,32,33,34,36,37,40,41,42,43,44,45,46,47,48,49,50,51,52,66,67,160,164,202,203,214,230,231,233,236,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,276,277

 

  3.2 各子樹基本信息

    Tree = 0 :第一棵樹

    num_leaves=128: 葉子節點數,N個。

    num_cat:切分特征中,屬於categorical特征的總數,多次切分計多次。M個。

    split_feature:每次分裂時的特征,128個葉子節點便有127次分裂,N-1個

    split_gain: 每次分裂的信息增益,127次分裂便有127個分裂增益值,N-1個數值,且逐漸減小。

    threshold :每個特征分裂的閾值, 127次分裂便有127個閾值,N-1個。

    decision_type:N-1

    left_child:處於左節點的節點編號,N-1個。

    right_child:處於右節點的節點編號, N-1個。

        // 這兩個共同表明了樹的結構,節點主要分為兩種:內部節點+葉子節點。 

     // 內部節點的范圍主要是1-N-2 (N-2個), 葉子節點以負號開頭,主要是-N -- -1 (N個),合起來剛好2N-2個。

    leaf_value:各個葉子節點的預測值,N個。

    leaf_count: 每個葉子節點的樣本數目,N個。加起來的數目應該是訓練樣本的數量 * bagging_fraction

    internal_value:N-1個。各個中間節點(即內部節點)的預測值。

    internal_count:N-1個。 各個中間節點(即內部節點)上的樣本數目。

      //internal 表示中間節點, leaf為葉子節點

    cat_boundaries:M+1個,

    cat_threshold:大小為cat_boundaries最后一個元素

    shrinkage: 配置文件中設置,學習率。

    

  3.3 特征重要性 

  Column_8=50, 所有特征中最重要的,后面的數值表示在所有樹中,作為分裂特征的總次數。
  Column_10=48

  

  

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM