XGBoost

作者: Martian22 | 来源:发表于2018-10-17 22:48 被阅读0次

    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)
    

    数据接口


    可以从以下途径加载数据

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

    数据存储在 DMatrix 对象中,从CSV文件中读取数据到DMatrix的方法如下:

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

    在构造DMatrix时可以用默认值来代替缺失数据,方法如下:

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

    权重设置如下:

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

    设置参数


    XGBoost可以使用 a list of pairs 或者字典来设置参数,例如:

    • 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')] 
      

    训练


    训练模型需要一个参数列表和数据集

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

    训练完之后,可以对模型进行存储

    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进行对比,可以提前停止,来寻找最佳的 boosting rounds 。提前停止需要 evals 中有至少一个集合。如果有多个集合的话,可以用下面的方式来停止:

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

    模型将会训练直到 validation score 不在提升。 Validation error needs to decrease at least every early_stopping_rounds to continue training.
    如果提前停止了,模型将会有三个额外的 fields :bst.best_score, bst.best_iterationbst.best_ntree_limitxgboost.train() 会从返回最后一次迭代中选择模型,而不是最好的一个。
    这个对于所有的矩阵包括 minimize (RMSE, log loss, etc.) 和 maximize (MAP, NDCG, AUC) 都是适用的. 如果指定了多余一个评估矩阵,那么只有 param['eval_metric'] 中的最后一个会起到作用。

    预测


    训练好的或者是加载的模型可以用来对数据集进行预测,方法如下:

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

    如果使用了提前停止,可以通过 bst.best_ntree_limit 来获得最好的一轮迭代的预测结果。

    作图


    可以使用 plotting 模块来画 importance and output tree。 画 importance,使用 xgboost.plot_importance()。这个函数需要安装matplotlib模块。

    xgb.plot_tree(bst, num_trees=2)
    

    相关文章

      网友评论

          本文标题:XGBoost

          本文链接:https://www.haomeiwen.com/subject/mhcdzftx.html