经常出入DC竞赛、kaggle、天池等大数据比赛的同学应该很了解xgboost这座大山,几乎所有的比赛都绕不过它,可能只需要这一个库,在比赛中就可以得到很高的分数,究竟是为什们呢?那么就来窥探一下它的庐山真面目吧。
起源
xgboost 的全称是 eXtreme Gradient Boosting。正如其名,它是 Gradient Boosting Machine 的一个 c++ 实现,作者为曾在华盛顿大学研究机器学习的大牛陈天奇。因为其出众的效率与较高的预测准确度在比赛论坛中引起了参赛选手的广泛关注。为了方便大家使用,陈天奇将 xgboost 封装成了 python 库,从此作为普通人的我们也可以使用这种开挂般操作的库了。
安装
xgb(xgboost)安装很简单,和一般的库相同:
pip install xgboost
可在ide导入验证是否安装成功
import xgboost as xgb
数据形式
xgb可以接受一下格式文件:(通过xgboost.DMatrix()方法)
- LibSVM文本格式文件
- 逗号分隔值(CSV)文件
- NumPy 2D阵列
- SciPy 2D稀疏阵列
- DataFrame数据框
- XGBoost二进制缓冲区文件
需要注意的是:XGBoost不支持分类功能; 如果您的数据包含分类功能,请先将其加载为NumPy阵列,然后执行onehot编码。
XGBoost无法解析带有标头的CSV文件。
参数设定
XGBoost可以使用列表或字典来设置参数,如下所示:
param = {'max_depth': 2, 'eta': 1, 'silent': 1, 'objective': 'binary:logistic'} param['nthread'] = 4 param['eval_metric'] = 'auc' param['eval_metric'] = ['auc', 'ams@0']
一般提前定义这些参数,训练时只需将param参数传入即可。
训练
bst = xgb.train(param, dtrain, num_round, evallist)
param:各项参数,是一个字典
dtrain:训练数据,由xgb.DMatrix传入
num_round: boosting迭代计算次数
evallist:一个列表,用于对训练过程中进行评估列表中的元素。例如:evallist = [(dtest, 'eval'), (dtrain, 'train')],用来为监视性能的验证
预测
模型训练好之后,接下来就是预测:
dtest = xgb.DMatrix(data)
ypred = bst.predict(dtest)
这样,最简单的xgboost使用就完成啦。