机器学习XGBoost算法使用

xgboost numpy pandas 2017年08月03日 星期四

XGboost 为Python实现的机器学习算法。由于该算法底层为C++实现,不同的系统环境安装也有很大的差异,具体的详情查看:http://xgboost.readthedocs.io/en/latest/build.html,文档上有该算法很详细的介绍。

表示实现原理,多年不看数学的我,不懂不懂 - - !

以下介绍下python中如何使用xgboost:

1. 训练数据和测试数据

"""
对于一组的数据,需要进行分割为训练数据和测试数据,test_size为测试数据的所占比例
X_train y_train 训练数据
X_test y_test 测试数据
所有的数据值必须是可计算的,即因素条件数值化。
"""
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(elements, target, test_size=0.2)

2. 生成用于XGBoost的 Data Matrix

"""
data : libsvm格式的文件路径,此时不需要label,解析文件的过程中会自动设置label
该参数的初始化,也可通过 numpy.narray, pandas.dataframe 进行,具体格式如下:
data :需要训练的因素的二维列表,eg: [[因素1, 因素2, ...], ]
label :于data对应的结果值列表,eg: [第一条对应的结果, ]
"""
import xgboost as xgb
data_train = xgb.DMatrix(X_train, y_train)
data_test = xgb.DMatrix(X_test, y_test)

3. 进行训练模型,参数详情参看官方文档

# eta 是防止过拟合的 ,默认0.3 越大你的算法就越保守,是降低你准确率的, 范围 (0,1)
# max_depth 是树的深度,不是用在线性分类器下的,是限制弱分类器是决策树的情况 [1, +∞]
params = {'max_depth': max_depth, 'eta': eta, 'silent': 1, 'objective': 'reg:linear'}
best = xgb.train(params, data_train, num_boost_round=num_boost_round)

 4. 模型的保存和重载

# path 保存绝对路径,eg:/path/to/best.model
best.save_model(path)  # 模型保存
best = xgb.Booster(model_file=path)  # 模型重载

5. 数值预测

"""
data: 构造的需预测值因素二维列表
label:对应的值,这里若无可用0填充,必须 len(data) == label 【真实值】
predict: 为模型best对该因素下的预测值【预测值】
"""
data_predict = xgb.DMatrix(elements, target)
predict = best.predict(data_test)

当存在真实值的时候可进行分析该模型的准确率。可进行对xgboost进行参数调整,因素条件增加来优化模型,以达到更高的准确率。