xgboost api

import xgboost as xgb

读取数据

dtrain = xgb.DMatrix(‘demo/data/agaricus.txt.train’)
dtest = xgb.DMatrix(‘demo/data/agaricus.txt.test’)

通过 map 指定参数

param = {‘max_depth’:2, ‘eta’:1, ‘silent’:1, ‘objective’:‘binary:logistic’ }
num_round = 2
bst = xgb.train(param, dtrain, num_round)

预测

preds = bst.predict(dtest)

# 要加载 numpy 的数组到 DMatrix 对象中, 代码如下:
import numpy as np
import xgboost as xgb
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)
data
array([[4.58112586e-01, 5.15109055e-01, 9.49322368e-01, 4.12068451e-01,
        9.07828945e-01, 6.01836350e-01, 2.67689084e-02, 8.71999699e-01,
        9.70469774e-01, 4.08043402e-01],
       [3.84152246e-01, 3.33657143e-01, 5.09202802e-01, 7.49937855e-01,
        6.76731623e-01, 5.98826160e-01, 8.87044516e-01, 2.42738478e-01,
        5.54069014e-01, 7.31676395e-01],
       [4.31604612e-04, 2.37646980e-01, 7.08828313e-01, 2.97212746e-01,
        7.08635495e-01, 5.25163997e-01, 3.93572198e-01, 9.49710807e-01,
        7.81015022e-01, 2.29557159e-01],
       [7.72886296e-01, 2.38108229e-01, 1.25507593e-01, 2.79567575e-01,
        2.82561160e-02, 7.04470072e-01, 2.61917976e-01, 5.98723606e-01,
        6.72975320e-01, 7.21076548e-01],
       [2.88186647e-01, 6.24797266e-01, 5.15669053e-01, 8.68095215e-01,
        4.43562171e-01, 5.07861559e-01, 6.53741982e-01, 9.29474058e-01,
        7.91150281e-02, 1.52469552e-01]])
label
array([1, 1, 1, 0, 0])
dtrain
<xgboost.core.DMatrix at 0x1274e9310>
import scipy

稀疏矩阵的Dmartix的数据导入

csr = scipy.sparse.csr_matrix((dat, (row, col)))

dtrain = xgb.DMatrix(csr)

使用自带的libsvm数据格式

dtrain = xgb.DMatrix(‘train.svm.txt’)

dtrain.save_binary(“train.buffer”)

自定义缺失值

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)

通过字典的形式设置参数

param = {'bst:max_depth':2, 'bst:eta':1, 'silent':1, 'objective':'binary:logistic' }
param['nthread'] = 4
param['eval_metric'] = 'auc'

其他评价指标

param[‘eval_metric’] = [‘auc’, ‘ams@0’]

#alternativly:
#plst = param.items()
#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’)

#转存模型
bst.dump_model(‘dump.raw.txt’)
#转储模型和特征映射
bst.dump_model(‘dump.raw.txt’,‘featmap.txt’)

加载模型

bst = xgb.Booster({‘nthread’:4}) #init model

bst.load_model(“model.bin”) # load data

提前停止

如果您有一个验证集, 你可以使用提前停止找到最佳数量的 boosting rounds(梯度次数). 提前停止至少需要一个 evals 集合. 如果有多个, 它将使用最后一个.

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

该模型将开始训练, 直到验证得分停止提高为止. 验证错误需要至少每个 early_stopping_rounds 减少以继续训练.

如果提前停止,模型将有三个额外的字段: bst.best_score, bst.best_iteration 和 bst.best_ntree_limit. 请注意 train() 将从上一次迭代中返回一个模型, 而不是最好的一个.

这与两个度量标准一起使用以达到最小化(RMSE, 对数损失等)和最大化(MAP, NDCG, AUC). 请注意, 如果您指定多个评估指标, 则 param [‘eval_metric’] 中的最后一个用于提前停止.

预测

#7 个样本, 每一个包含 10 个特征

data = np.random.rand(7, 10)

dtest = xgb.DMatrix(data)

ypred = bst.predict(xgmat)

如果在训练过程中提前停止, 可以用 bst.best_ntree_limit 从最佳迭代中获得预测结果:

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

当你观察到训练精度高,但是测试精度低时,你可能遇到了过拟合的问题。

通常有两种方法可以控制 xgboost 中的过拟合。

第一个方法是直接控制模型的复杂度
这包括 max_depth, min_child_weight 和 gamma
第二种方法是增加随机性,使训练对噪声强健
这包括 subsample, colsample_bytree
你也可以减小步长 eta, 但是当你这么做的时候需要记得增加 num_round 。

处理不平衡的数据集
对于广告点击日志等常见情况,数据集是极不平衡的。 这可能会影响 xgboost 模型的训练,有两种方法可以改善它。

如果你只关心预测的排名顺序(AUC)
通过 scale_pos_weight 来平衡 positive 和 negative 权重。
使用 AUC 进行评估
如果你关心预测正确的概率
在这种情况下,您无法重新平衡数据集
在这种情况下,将参数 max_delta_step 设置为有限数字(比如说1)将有助于收敛


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值