打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
XGboost上


作者:章华燕

编辑:祝鑫泉


环境介绍:

· Python版本:3.6.2

· 操作系统:Windows

· 集成开发环境:PyCharm



安装Python环境:

1.安装Python:

    首先,我们需要安装Python环境。本人选择的是64位版本的Python 3.6.2。去Python官网https://www.python.org/选择相应的版本并下载。如下如所示:

    接下来安装,并最终选择将Python加入环境变量中。

2.安装依赖包:

    可以去网址:http://www.lfd.uci.edu/~gohlke/pythonlibs/中去下载你所需要的如下Python安装包:

numpy-1.13.1+mkl-cp36-cp36m-win_amd64.whl

scipy-0.19.1-cp36-cp36m-win_amd64.whl xgboost-0.6-cp36-cp36m-win_amd64.whl

    假设上述三个包所在的目录为D:\Application,则运行Windows 命令行运行程序cmd,并将当前目录转到这两个文件所在的目录下。并依次执行如下操作安装这两个包:

>> pip install numpy-1.13.1+mkl-cp36-cp36m-win_amd64.whl

>> pip install scipy-0.19.1-cp36-cp36m-win_amd64.whl

>> pip install xgboost-0.6-cp36-cp36m-win_amd64.whl


 3.安装Scikit-learn

    众所周知,scikit-learn是Python机器学习最著名的开源库之一。因此,我们需要安装此库。执行如下命令安装scikit-learn机器学习库:

>> pip install -U scikit-learn

4.测试是否安装成功


from sklearn import svm
X = [[0, 0], [1, 1]]>>> y = [0, 1]
clf = svm.SVC() >>> clf.fit(X, y)
clf.predict([[2., 2.]]) array([1])
import xgboost as xgb


注意:如果如上所述正确输出,则表示安装完成。否则就需要检查安装步骤是否出错,或者系统是否缺少必要的Windows依赖库。常用的一般情况会出现缺少VC++运行库,在Windows 7、8、10等版本中安装Visual C++ 2015基本上就能解决问题。

5.安装PyCharm

  • 对于PyChram的下载,请点击PyCharm官网去下载,当然windows下软件的安装不用解释,傻瓜式的点击 下一步 就行了。


注意:PyCharm软件是基于Java开发的,所以安装该集成开发环境前请先安装JDK,建议安装JDK1.8。

经过上述步骤,基本上软件环境的问题全部解决了,接下来就是实际的XGBoost库实战了……




XGBoost的优点

1.正则化

   XGBoost在代价函数里加入了正则项,用于控制模型的复杂度。正则项里包含了树的叶子节点个数、每个叶子节点上输出的scoreL2模的平方和。从Bias-variancetradeoff角度来讲,正则项降低了模型的variance,使学习出来的模型更加简单,防止过拟合,这也是xgboost优于传统GBDT的一个特性。

2.并行处理

    XGBoost工具支持并行。Boosting不是一种串行的结构吗?怎么并行的?注意XGBoost的并行不是tree粒度的并行,XGBoost也是一次迭代完才能进行下一次迭代的(第t次迭代的代价函数里包含了前面t-1次迭代的预测值)。XGBoost的并行是在特征粒度上的。

    我们知道,决策树的学习最耗时的一个步骤就是对特征的值进行排序(因为要确定最佳分割点),XGBoost在训练之前,预先对数据进行了排序,然后保存为block结构,后面的迭代中重复地使用这个结构,大大减小计算量。这个block结构也使得并行成为了可能,在进行节点的分裂时,需要计算每个特征的增益,最终选增益最大的那个特征去做分裂,那么各个特征的增益计算就可以开多线程进行

  3.灵活性

    XGBoost支持用户自定义目标函数和评估函数,只要目标函数二阶可导就行。

  4.缺失值处理

     对于特征的值有缺失的样本,xgboost可以自动学习出它的分裂方向。

  5.剪枝

     XGBoost 先从顶到底建立所有可以建立的子树,再从底到顶反向进行剪枝。比起GBM,这样不容易陷入局部最优解。

  

    XGBoost允许在每一轮boosting迭代中使用交叉验证。因此,可以方便地获得最优boosting迭代次数。而GBM使用网格搜索,只能检测有限个值。



XGBooST详解: 

1.数据格式

XGBoost可以加载多种数据格式的训练数据:  

  1. libsvm 格式的文本数据;

  2. Numpy 的二维数组;

  3. 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)


  • 将scipy.sparse格式的数据转化为 DMatrix 格式

    >>> csr = scipy.sparse.csr_matrix( (dat, (row,col)) ) >>> dtrain = xgb.DMatrix( csr )


  • 将 DMatrix 格式的数据保存成XGBoost的二进制格式,在下次加载时可以提高加载速度,使用方式如下

    >>> dtrain = xgb.DMatrix('train.svm.txt')

    >>> dtrain.save_binary("train.buffer")


  • 可以用如下方式处理 DMatrix中的缺失值:

    >>> dtrain = xgb.DMatrixdata, label=label, missing = -999.0)


  • 当需要给样本设置权重时,可以用如下方式

    >>> w = np.random.rand(5,1)

    >>> dtrain = xgb.DMatrix( data, label=label, missing = -999.0, weight=w)

2.参数设置

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 线程数}


3.训练模型

有了参数列表和数据就可以训练模型了 

num_round = 10

bst = xgb.train( plst, dtrain, num_round, evallist )

4.模型预测

# X_test类型可以是二维List,也可以是numpy的数组

dtest = DMatrix(X_test) ans = model.predict(dtest)

5.保存模型

  • 在训练完成之后可以将模型保存下来,也可以查看模型内部的结构

 bst.save_model('test.model')

  • 导出模型和特征映射(Map)

       你可以导出模型到txt文件并浏览模型的含义:

# dump model

bst.dump_model('dump.raw.txt')

# dump model with feature map

bst.dump_model('dump.raw.txt','featmap.txt')

6.加载模型

通过如下方式可以加载模型:

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

bst.load_model("model.bin")      # load data

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
腾讯阿里都在用!机器学习最热研究方向入门,附学习路线图
Python之pypmml:pypmml的简介、安装、使用方法之详细攻略
数据挖掘小白系列!XGBOOST参数超详解!参数选择,顺序,值一网打尽!
XGBoost、LightGBM与CatBoost算法对比与调参
机器学习中的概念区分:模型vs算法
严酷的魔王: xgboost: 速度快效果好的boosting模型 | 统计之都 (中国统计学门户网站,免费统计学服务平台)
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服