xgboost使用細節


from http://blog.csdn.net/zc02051126/article/details/46771793

 

在Python中使用XGBoost

下面將介紹XGBoost的Python模塊,內容如下: 
編譯及導入Python模塊 
數據接口 
參數設置 
訓練模型l 
提前終止程序 
預測

walk through python example for UCI Mushroom dataset is provided.

安裝

首先安裝XGBoost的C++版本,然后進入源文件的根目錄下的 wrappers文件夾執行如下腳本安裝Python模塊

python setup.py install

安裝完成后按照如下方式導入XGBoost的Python模塊

import xgboost as xgb

數據接口

XGBoost可以加載libsvm格式的文本數據,加載的數據格式可以為Numpy的二維數組和XGBoost的二進制的緩存文件。加載的數據存儲在對象DMatrix中。

  • 加載libsvm格式的數據和二進制的緩存文件時可以使用如下方式
dtrain = xgb.DMatrix('train.svm.txt') dtest = xgb.DMatrix('test.svm.buffer')
  • 加載numpy的數組到DMatrix對象時,可以用如下方式
data = np.random.rand(5,10) # 5 entities, each contains 10 features label = np.random.randint(2, size=5) # binary target dtrain = xgb.DMatrix( data, label=label)
  • scipy.sparse格式的數據轉化為 DMatrix格式時,可以使用如下方式
csr = scipy.sparse.csr_matrix( (dat, (row,col)) )
dtrain = xgb.DMatrix( csr )
  • 將 DMatrix 格式的數據保存成XGBoost的二進制格式,在下次加載時可以提高加載速度,使用方式如下
dtrain = xgb.DMatrix('train.svm.txt') dtrain.save_binary("train.buffer")
  • 可以用如下方式處理 DMatrix中的缺失值:
dtrain = xgb.DMatrix( data, label=label, missing = -999.0)
  • 當需要給樣本設置權重時,可以用如下方式
w = np.random.rand(5,1) dtrain = xgb.DMatrix( data, label=label, missing = -999.0, weight=w)

 

參數設置

XGBoost使用key-value格式保存參數. Eg 
* Booster(基本學習器)參數

param = {'bst:max_depth':2, 'bst:eta':1, 'silent':1, 'objective':'binary:logistic' } param['nthread'] = 4 plst = param.items() plst += [('eval_metric', 'auc')] # Multiple evals can be handled in this way plst += [('eval_metric', 'ams@0')]

 

  • 還可以定義驗證數據集,驗證算法的性能
evallist  = [(dtest,'eval'), (dtrain,'train')]

訓練模型

有了參數列表和數據就可以訓練模型了 
* 訓練

num_round = 10 bst = xgb.train( plst, dtrain, num_round, evallist )
  • 保存模型
    在訓練完成之后可以將模型保存下來,也可以查看模型內部的結構
bst.save_model('0001.model')
  • Dump Model and Feature Map 
    You can dump the model to txt and review the meaning of model
# 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

提前終止程序

如果有評價數據,可以提前終止程序,這樣可以找到最優的迭代次數。如果要提前終止程序必須至少有一個評價數據在參數evals中。 If there’s more than one, it will use the last.

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

The model will train until the validation score stops improving. Validation error needs to decrease at least every early_stopping_rounds to continue training.

If early stopping occurs, the model will have two additional fields: bst.best_score and bst.best_iteration. Note that train() will return a model from the last iteration, not the best one.

This works with both metrics to minimize (RMSE, log loss, etc.) and to maximize (MAP, NDCG, AUC).

=

Prediction

After you training/loading a model and preparing the data, you can start to do prediction.

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

If early stopping is enabled during training, you can predict with the best iteration.

ypred = bst.predict(xgmat,ntree_limit=bst.best_iteration)


免責聲明!

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



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