XGBoost

Python


import xgboost as xgb
# read in data
dtrain = xgb.DMatrix('demo/data/agaricus.txt.train')
dtest = xgb.DMatric('demo/data/agaricus.txt.test')
# specify parameters via map
param = {'max_depth': 2, 'eta': 1, 'silent': 1, 'objective': 'binary:logistic'}
num_round = 2
bst = xgb.train(param, dtrain, num_round)
# make prediction
preds = bst.predict(dtest)

數(shù)據(jù)接口


可以從以下途徑加載數(shù)據(jù)

  • LibSVM text format file
  • Comma-separated values (CSV) file
  • NumPy 2D sparse array
  • SciPy 2D sparse array
  • Pandas data frame
  • XGBoost binary buffer file

數(shù)據(jù)存儲在 DMatrix 對象中,從CSV文件中讀取數(shù)據(jù)到DMatrix的方法如下:

    dtrain = xgb.DMatrix('train.csv?format=csv&label_column=0')
    dtest  = xgb.DMatrix('test.csv?format=csv&label_column=0')

在構(gòu)造DMatrix時(shí)可以用默認(rèn)值來代替缺失數(shù)據(jù),方法如下:

dtrain = xgb.DMtrix(data, label=label, missing=-999.0)

權(quán)重設(shè)置如下:

w = np.random.rand(5, 1)
dtrain = xgb.DMatrix(data, label=label, missing=-999.0, weight=w)

設(shè)置參數(shù)


XGBoost可以使用 a list of pairs 或者字典來設(shè)置參數(shù),例如:

  • Booster parameters

     param = {'max_depth': 2, 'eta': 1, 'silent': 1, 'objective': 'binary:logistic'}
     param['nthread'] = 4
     param['eval_metric'] = 'auc'
    
  • 也可以指定 multiple eval metrics:

     param['eval_metric'] = ['auc', 'ams@0']
         
     #  alternatively:
     #  plst = param.items()
     #  plst += [('eval_metric', 'ams@0')]
    
  • 指定 validations set 來觀察性能

     evallist = [(dtest, 'eval'), (dtrain, 'train')] 
    

訓(xùn)練


訓(xùn)練模型需要一個(gè)參數(shù)列表和數(shù)據(jù)集

num_round = 10
bst = xgb.train(param, dtrain, num_round, evallist)

訓(xùn)練完之后,可以對模型進(jìn)行存儲

bst.save_model('0001.model')

模型和它的 feature map 可以從文本文件中加載

# dump model
bst.dump_model('dump.raw.txt')
# dump model with feature map
bst.dump_model('dump.raw.txt', 'featmap.txt')

保存的模型可以用以下方式加載:

bst = xgb.Booster({'nthread': 4})    # init model
bst.load_model('model.bin')    # load data

Early Stopping


為了和validation進(jìn)行對比,可以提前停止,來尋找最佳的 boosting rounds 。提前停止需要 evals 中有至少一個(gè)集合。如果有多個(gè)集合的話,可以用下面的方式來停止:

train(..., evals=evals, early_stopping_rounds=10)

模型將會訓(xùn)練直到 validation score 不在提升。 Validation error needs to decrease at least every early_stopping_rounds to continue training.
如果提前停止了,模型將會有三個(gè)額外的 fields :bst.best_score, bst.best_iterationbst.best_ntree_limit。xgboost.train() 會從返回最后一次迭代中選擇模型,而不是最好的一個(gè)。
這個(gè)對于所有的矩陣包括 minimize (RMSE, log loss, etc.) 和 maximize (MAP, NDCG, AUC) 都是適用的. 如果指定了多余一個(gè)評估矩陣,那么只有 param['eval_metric'] 中的最后一個(gè)會起到作用。

預(yù)測


訓(xùn)練好的或者是加載的模型可以用來對數(shù)據(jù)集進(jìn)行預(yù)測,方法如下:

#  7 entities, each contains 10 features
data = np.random.rand(7, 10)
dtest = xgb.DMatrix(data)
ypred = bst.predict(dtest)

如果使用了提前停止,可以通過 bst.best_ntree_limit 來獲得最好的一輪迭代的預(yù)測結(jié)果。

作圖


可以使用 plotting 模塊來畫 importance and output tree。 畫 importance,使用 xgboost.plot_importance()。這個(gè)函數(shù)需要安裝matplotlib模塊。

xgb.plot_tree(bst, num_trees=2)
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容