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_iteration 和 bst.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)