主要介绍应用XGBoost进行分类和回归的Python实现。
1. 安装XGBoost包
在命令行下输入: pip install xgboost, 直到安装成功
![9290af5884c842abc7433915c1d3fc40.png](https://img-blog.csdnimg.cn/img_convert/9290af5884c842abc7433915c1d3fc40.png)
2. 数据格式
XGBoost可以加载多种数据格式的训练数据:
- libsvm 格式的文本数据;
- Numpy 的二维数组;
- XGBoost 的二进制的缓存文件。加载的数据存储在对象 DMatrix 中。
下面一一列举:
- 加载libsvm格式的数据
>>> dtrain1 = xgb.DMatrix('train.svm.txt')
加载二进制的缓存文件
>>> dtrain2 = xgb.DMatrix('train.svm.buffer')
加载numpy的数组
>>> 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)
- 将 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)
3. 参数设置
XGBoost使用key-value字典的方式存储参数:
params = {
'booster': 'gbtree',
'objective': 'multi:softmax', # 多分类的问题
'num_class': 10, # 类别数,与 multisoftmax 并用
'gamma': 0.1, # 用于控制是否后剪枝的参数,越大越保守,一般0.1、0.2这样子。
'max_depth': 12, # 构建树的深度,越大越容易过拟合
'lambda': 2, # 控制模型复杂度的权重值的L2正则化项参数,参数越大,模型越不容易过拟合。
'subsample': 0.7, # 随机采样训练样本
'colsample_bytree': 0.7, # 生成树时进行的列采样
'min_child_weight': 3,
'silent': 1, # 设置成1则没有运行信息输出,最好是设置为0.
'eta': 0.007, # 如同学习率
'seed': 1000,
'nthread': 4, # cpu 线程数
}
plst = params.items()
说明:
- booster [default=gbtree]
有两中模型可以选择gbtree和gblinear。gbtree使用基于树的模型进行提升计算,gblinear使用线性模型进行提升计算。缺省值为gbtree
- silent [default=0]
取0时表示打印出运行时信息,取1时表示以缄默方式运行,不打印运行时信息。缺省值为0
- nthr