1. 程式人生 > >xgboost回歸代碼及lgb參數說明

xgboost回歸代碼及lgb參數說明

集成學習 算法 機器學習

了解xgboost 找到網絡一個圖 侵刪 感謝原作者提供圖
https://pic3.zhimg.com/v2-07783eb41e619927e8911b85442b9e38_r.jpg

技術分享圖片
xgboost訓練回歸模型很簡單,按照前面的博客安裝了xgboost庫之後:

xgboost的參數說明如下代碼:

params={
‘booster‘:‘gbtree‘,
‘objective‘: ‘multi:softmax‘, #多分類的問題
‘num_class‘:10, # 類別數,與 multisoftmax 並用
‘gamma‘:0.1,  # 用於控制是否後剪枝的參數,越大越保守,一般0.1、0.2這樣子。
‘max_depth‘:12, # 構建樹的深度,越大越容易過擬合
‘lambda‘:2,  # 控制模型復雜度的權重值的L2正則化項參數,參數越大,模型越不容易過擬合。
‘subsample‘:0.7, # 隨機采樣訓練樣本
‘colsample_bytree‘:0.7, # 生成樹時進行的列采樣
‘min_child_weight‘:3, 
# 這個參數默認是 1,是每個葉子裏面 h 的和至少是多少,對正負樣本不均衡時的 0-1 分類而言
#,假設 h 在 0.01 附近,min_child_weight 為 1 意味著葉子節點中最少需要包含 100 個樣本。
#這個參數非常影響結果,控制葉子節點中二階導的和的最小值,該參數值越小,越容易 overfitting。 
‘silent‘:0 ,#設置成1則沒有運行信息輸出,最好是設置為0.
‘eta‘: 0.007, # 如同學習率
‘seed‘:1000,
‘nthread‘:7,# cpu 線程數
#‘eval_metric‘: ‘auc‘
}

使用代碼如下:

import xgboost as xgb

data_train = xgb.DMatrix(train1[feature_use].fillna(-1), label=train1[‘target‘])
data_test = xgb.DMatrix(test1[feature_use].fillna(-1), label=test1[‘target‘])
watch_list = [(data_test, ‘eval‘), (data_train, ‘train‘)]
param = {‘max_depth‘: 5, ‘eta‘: 0.01, ‘silent‘: 1, ‘objective‘: ‘reg:linear‘,‘num_boost_round‘:950,‘subsample‘:0.8,‘colsample_bytree‘:0.2319,‘min_child_weight‘:11}
bst = xgb.train(param, data_train, num_boost_round=950, evals=watch_list)
y_pred = bst.predict(data_test)

print("xgboost success")

其中的 train test都為 pandas中的dataframe類型

lgb參數說明如下:
參考中文文檔路徑 http://lightgbm.apachecn.org/cn/latest/Parameters.html#id2

通過上一篇博客中的粒子群算法可以確定一個參數的範圍
然後根據數據的情況對參數進行微調

其中有幾個參數尤其要註意:

num_iterations, default=100, type=int, alias=num_iteration, num_tree, num_trees, num_round, num_rounds, num_boost_round
boosting 的叠代次數

Note: 對於 Python/R 包, 這個參數是被忽略的, 使用 train and cv 的輸入參數 num_boost_round (Python) or nrounds (R) 來代替
Note: 在內部, LightGBM 對於 multiclass 問題設置 num_class * num_iterations 棵樹

該參數調大可以更好擬合模型 也會導致過擬合,

抽樣考慮的特征數量:
feature_fraction, default=1.0, type=double, 0.0 < feature_fraction < 1.0, alias=sub_feature, colsample_bytree
如果 feature_fraction 小於 1.0, LightGBM 將會在每次叠代中隨機選擇部分特征. 例如, 如果設置為 0.8, 將會在每棵樹訓練之前選擇 80% 的特征
可以用來加速訓練
可以用來處理過擬合

參數之間是互相配合的
這些參數要根據你的數據集的分布情況和大小來確定

例如《集成學習》中有個說明基學習器個數和特征維數的關系:
技術分享圖片
d是特征維數 m為基學習器個數 也就是 基學習器個數應該隨著特征維數增多而增加。
希望多多交流
技術分享圖片

xgboost回歸代碼及lgb參數說明