XGBoost

xgboost 学习笔记

主要内容均来自官方文档,官方文档是英文版,所以简单的翻译了一下,方便日后查看。
详细内容见官方手册

安装 XGBoost

1
2
3
4
5
ubuntu -python3:
pip3 install xgboost

导入:
import xgboost as xgb

数据接口

XGBoost 可以从以下结构中加载数据:

  • LibSVM text format file
  • CSV
  • Numpy 2D array
  • Scipy 2D sparse array
  • Pandas
  • XGBoost binary buffer file.

加载的数据都放在 DMatrix对象中,下面是具体加载的过程演示:

  • LibSVM text format file

    1
    2
    dtrain = xgb.DMatrix('train.svm.txt')
    dtest = xgb.DMatrix('test.svm.buffer')
  • CSV

    1
    2
    3
    // 需要指定标签所在的列
    dtrain = xgb.DMatrix('train.csv?format=csv&label_column=0')
    dtest = xgb.DMatrix('test.csv?format=csv&label_column=0')
XGBoost 不支持种类特征,需要先加载为Numpy数组,然后进行 `one-hot` 编码;推荐使用pandas 加载数据.
  • Numpy

    1
    2
    3
    4
    data = np.random.rand(5, 10)  # 5个样本,每个样本10个特征
    label = np.random.randint(2, size=5) # 二值标签

    dtrain = xgb.DMatrix(data, label=label)
  • Scipy

    1
    2
    csr = scipy.sparse.csr_matrix((dat, (row, col)))
    dtrain = xgb.DMatrix(csr)
  • Pandas

    1
    2
    3
    data = pandas.DataFrame(np.arange(12).reshape((4,3)), columns=['a', 'b', 'c'])
    label = pandas.DataFrame(np.random.randint(2, size=4))
    dtrain = xgb.DMatrix(data, label=label)
  • 保存为 XGBoost 二进制文件

    1
    2
    dtrain = xgb.DMatrix('train.svm.txt')
    dtrain.save_binary('train.buffer')
  • 缺失值处理

    1
    dtrain = xgb.DMatrix(data, label=label, missing=-999.0)
  • 样本权重

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

参数设置

XGBoost 可以通过列表或者字典来设置参数,例如:

  • Booster 参数

    1
    2
    3
    param = {'max_depth': 2, 'eta': 1, 'objective': 'binary:logistic'}
    param['nthread'] = 4
    param['eval_metric'] = 'auc'
  • 指定多个评估指标

    1
    param['eval_metric'] = ['auc', 'ams@0']
  • 指定验证集来监视性能

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

训练

  • 模型训练

    1
    2
    num_round = 10
    bst = xgb.train(param, dtrain, num_round, evallist)
  • 模型保存

    1
    bst.save_model('0001.model')
  • 保存模型和特征

    1
    2
    3
    4
    # dump model
    bst.dump_model('dump.raw.txt')
    # dump model with feature map
    bst.dump_model('dump.raw.txt', 'featmap.txt')
  • 模型加载

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

早停

如果你有验证集,则可以使用早停机制来寻找最佳的 num_round, 需要将 验证集传入 evals,如果传入多个,则使用最后一个。

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

如果模型在 early_stopping_rounds次,监控的参数 param['eval_metric'] 都没有提升,则会停止训练,train 返回的是最后一次训练的模型,而不是最佳模型,最佳模型可以通过一下方式找到:

  • bst.best_score
  • bst.best_iteration
  • bst.best_ntree_limit # 使用最佳模型

同样的,监控多个参数时,最后一个参数起早停的作用。

预测

已经训练好的模型,或者已经加载的模型可以拿来预测新数据:

1
2
3
data = np.random.rand(7, 10)
dtest = xgb.DMatrix(data)
ypred = bst.predict(dtest)

使用最佳的迭代次数的模型:

1
ypred = bst.predict(dtest, ntree_limit=bst.best_ntree_limit)

绘制

你可以使用绘图模块来画出树结构:

  • 绘制参数重要性
1
xgb.plot_importance(bst)
  • 绘制目标树
1
xgb.plot_tree(bst, num_trees=2)
  • Ipython 中绘制树
1
xgb.to_graphviz(bst, num_trees=2)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值