xgboost回歸代碼及lgb參數說明
阿新 • • 發佈:2018-06-12
集成學習 算法 機器學習 了解xgboost 找到網絡一個圖 侵刪 感謝原作者提供圖
https://pic3.zhimg.com/v2-07783eb41e619927e8911b85442b9e38_r.jpg Note: 對於 Python/R 包, 這個參數是被忽略的, 使用 train and cv 的輸入參數 num_boost_round (Python) or nrounds (R) 來代替
Note: 在內部, LightGBM 對於 multiclass 問題設置 num_class * num_iterations 棵樹
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: 在內部, 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參數說明