1、xgboost库的安装

先在网址https://www.lfd.uci.edu/~gohlke/pythonlibs/#xgboost 中下载whl文件,注意一定要下载跟自己当前安装Python版本一致的whl文件

比如我是Python3.6,64位操作系统,所以要安装xgboost-0.72-cp36-cp36m-win_amd64.whl。

然后将它放到conda文件夹下,用anaconda prompt切换到该路径下,使用pip install xgboost-0.72-cp36-cp36m-win_amd64.whl安装文件就可以了。

2、原理说明

说明:监督学习与非监督学习

监督学习是根据带标签的数据进行数据学习。所谓监督学习,就是两步,一是定出模型确定参数,二是根据训练数据找出最佳的参数值,所谓最佳,从应用角度看,就是最大程度地吸收了10万条训练数据中的知识。

如何寻找最佳参数?

确定目标函数,根据目标函数的值确定预测模型的好坏,但是存在的问题是:1)预测样本中有错误值;2)样本中可能含有极端值。比如说我们对60岁以上年纪的人的数据预测模型去预测6岁孩子的数据,结果自然是不具有参考性的。那么,如何使得参数最优呢?

那就是正则化。

所谓正则化就是对参数施加一定的控制,防止参数走向极端。以上面的例子来说,假如10万条数据中,得癌症的病人都是60岁以上老人,没得癌症的病人都是30岁以下年轻人,检查结果中有一项是骨质密度,通常,老人骨质密度低,年轻人骨质密度高。那么我们学习到的模型很可能是这样的,对骨质密度这项对应的参数θ_j设的非常大,其他的参数都非常小,简单讲,模型倾向于就用这一项检查结果去判断病人是否得癌症,因为这样会让目标函数最小。

常用的正则化就是L2正则,也就是所有参数的平方和。我们希望这个和尽可能小的同时,模型对训练数据有尽可能好的预测。

最后,我们将L2正则项加到最初的目标函数上,就得出了最终的目标函数:
obj = ∑_i(sigmoid(∑_j θ_j*x_ij) - y_i)^2 + ∑_j(θ_j^2)

能使这个函数值最小的那组参数就是我们要找的最佳参数。这个obj包含的两项分别称为损失函数和正则项
这里的正则项,本质上是用来控制模型的复杂度。

Xgboost就是一个监督模型,可以用于分类和回归,其结构就是一堆CART树,即将每棵树的预测值加到一起作为最终的预测值,可谓简单粗暴。
CART树与决策树的区别:CART可以用于分类和回归。https://blog.csdn.net/lzzdflg/article/details/78649925
CART是在给定输入随机变量X条件下输出随机变量Y的条件概率分布,与ID3和C4.5的决策树所不同的是,ID3和C4.5生成的决策树可以是多叉的,每个节点下的叉树由该节点特征的取值种类而定,比如特征年龄分为(青年,中年,老年),那么改节点下可分为3叉。而CART为假设决策树为二叉树,内部结点特征取值为”是”和”否”。左分支取值为”是”,有分支取值为”否”。这样的决策树等价于递归地二分每一个特征,将输入空间划分为有限个单元,并在这些单元上预测概率分布,也就是在输入给定的条件下输出条件概率分布。
通常目标函数包含两部分:训练误差和正则化

obj(θ)=L(θ)+Ω(θ)obj(θ)=L(θ)+Ω(θ)

其中L是损失函数,度量模型预测与真实值的误差。常用的损失函数:
预测问题的平方损失函数:

L(θ)=Σi(yi−yi^)2L(θ)=Σi(yi−yi^)2

logistic 损失:

L(θ)=Σi[yiln(1+e−yi^)+(1−yi)ln(1+eyi^)]L(θ)=Σi[yiln(1+e−yi^)+(1−yi)ln(1+eyi^)]

ΩΩ是正则化项,度量模型的复杂度,避免过拟合,常用的正则化有L1 和L2正则化。

假设有两颗回归树,则两棵树融合后的预测结果如上图。
用公式表示为:

yi^=ΣKk=1fk(xi),fk∈Fyi^=Σk=1Kfk(xi),fk∈F

其中, K 是树的个数, fk(xi)fk(xi)是第k棵树对于输入 xixi 输出的得分, fkfk是相应函数, FF 是相应函数空间。
则目标函数为:

obj(θ)=Σnil(yi,yi^)+ΣKk=1Ω(fk)obj(θ)=Σinl(yi,yi^)+Σk=1KΩ(fk)

函数ll描述yiyi , yi^yi^之间的距离。
常用的模型融合方法是Random Foreast和Boosting Tree,这两种方法构造树的方式不同。Tree Ensemble中,模型的参数是什么呢?其实就是指树的结构和叶子节点上面分数的预测。如何求参数?定义目标函数,通过优化目标函数进行求解。

xgboost进一步理解
传统GBDT以CART作为基分类器,xgboost还支持线性分类器,这个时候xgboost相当于带L1和L2正则化项的逻辑斯蒂回归(分类问题)或者线性回归(回归问题)。
传统GBDT在优化时只用到一阶导数信息,xgboost则对代价函数进行了二阶泰勒展开,同时用到了一阶和二阶导数。顺便提一下,xgboost工具支持自定义代价函数,只要函数可一阶和二阶求导。
xgboost在代价函数里加入了正则项,用于控制模型的复杂度。正则项里包含了树的叶子节点个数、每个叶子节点上输出的score的L2模的平方和。从Bias-variance tradeoff角度来讲,正则项降低了模型的variance,使学习出来的模型更加简单,防止过拟合,这也是xgboost优于传统GBDT的一个特性。
Shrinkage(缩减),相当于学习速率(xgboost中的eta)。xgboost在进行完一次迭代后,会将叶子节点的权重乘上该系数,主要是为了削弱每棵树的影响,让后面有更大的学习空间。实际应用中,一般把eta设置得小一点,然后迭代次数设置得大一点。(补充:传统GBDT的实现也有学习速率)
列抽样(column subsampling)。xgboost借鉴了随机森林的做法,支持列抽样,不仅能降低过拟合,还能减少计算,这也是xgboost异于传统gbdt的一个特性。
对缺失值的处理。对于特征的值有缺失的样本,xgboost可以自动学习出它的分裂方向。XGBoost对于确实值能预先学习一个默认的分裂方向
xgboost工具支持并行。boosting不是一种串行的结构吗?怎么并行的?注意xgboost的并行不是tree粒度的并行,xgboost也是一次迭代完才能进行下一次迭代的(第t次迭代的代价函数里包含了前面t-1次迭代的预测值)。xgboost的并行是在特征粒度上的。我们知道,决策树的学习最耗时的一个步骤就是对特征的值进行排序(因为要确定最佳分割点),xgboost在训练之前,预先对数据进行了排序,然后保存为block结构,后面的迭代中重复地使用这个结构,大大减小计算量。这个block结构也使得并行成为了可能,在进行节点的分裂时,需要计算每个特征的增益,最终选增益最大的那个特征去做分裂,那么各个特征的增益计算就可以开多线程进行。
我:
可并行的近似直方图算法。树节点在进行分裂时,我们需要计算每个特征的每个分割点对应的增益,即用贪心法枚举所有可能的分割点。当数据无法一次载入内存或者在分布式情况下,贪心算法效率就会变得很低,所以xgboost还提出了一种可并行的近似直方图算法,用于高效地生成候选的分割点。

xgboost安装与原理的更多相关文章

  1. pxe网络安装操作系统 原理与详细过程

    摘要:在实际工作中,我们经常会遇到这样的情况:想要安装Linux但是计算机不带光驱或软驱,或者是笔记本配置的非标准的软驱和光驱,如1394接口,USB接口等,在Linux安装时所引导的Linux内核一 ...

  2. win7 64 python2 xgboost安装

    综述: 首先,关于xgboost是啥,可以看这一篇:机器学习(四)--- 从gbdt到xgboost 安装Python3 环境下的xgboost 可以通过pip install , 在网址中下载对应版 ...

  3. hadoop高可用安装和原理详解

    本篇主要从hdfs的namenode和resourcemanager的高可用进行安装和原理的阐述. 一.HA安装 1.基本环境准备 1.1.1.centos7虚拟机安装,详情见VMware安装Cent ...

  4. oozie配置安装与原理

     概述 当前开源的hadoop任务工作流管理主要有oozie和Azkaban,本文先介绍oozie的配置安装与基本运行原理. 配置安装 (参考https://segmentfault.com/a/11 ...

  5. mydumper安装、原理介绍

    一.安装   安装依赖包: yum install glib2-devel mysql-devel zlib-devel pcre-devel openssl-devel cmake 下载二进制包: ...

  6. xgboost安装

    安装连接:https://www.zhihu.com/question/46377605 软件连接:https://www.lfd.uci.edu/~gohlke/pythonlibs/#xgboos ...

  7. Cobbler实现自动化安装(上)--原理篇

    了解Cobbler之前,我们需要先对PXE及KickStart有一定的认识. PXE PXE(Pre-bootExecution Environment),预启动执行环境,通过网络接口启动计算机,支持 ...

  8. xgboost 安装

    git clone --recursive https://github.com/dmlc/xgboostcd xgboost/make -j4 cd python-package/ python s ...

  9. [Python Debug] How to install external python package? MAC系统下的xgboost安装

    从昨天晚上开始安装xgboost,经历了各种稀奇古怪的错误,终于现在程序可以跑起来了.整个过程对python编译环境,路径设置,package安装方法有了一定了解,当然还有一些疑惑,所以姑且做个记录. ...

随机推荐

  1. Canvas和svg总结比较

    Canvas 基本用法 getContext() 描边和填充 strokeStyle:设置描边样式fillStyle:设置填充样式stroke():描边fill():填充 绘制矩形 fillRect( ...

  2. 【RxJava Demo分析】(二)Schedulers线程调度器 · Hans Zone

    用Schedulers(调度器)实现多任务(并发,Concurrency)的例子 废话不多说我们看一下有关于RxJava的代码: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ...

  3. UEditor问题整理

    网上可以使用的富文本编辑器有很多,但是经过慎(sui)重(shou)思(yi)考(cha),选择了UEditor,毕竟是百度的东西,质量上应该经得起推敲,另外,使用别人的插件,总要去适应别人的编码习惯 ...

  4. MyBatis 判断条件为等于的时候,常量需要加 .toString()

    当MyBatis 判断条件为等于的时候,常量需要加 .toString() 来转换,这种方法是稳定的,推荐使用,比如: <!-- 正确的,稳定,推荐使用 --> <if test=& ...

  5. SYC极客大挑战部分题目writeup

    Welcome 复制黏贴flag即可 我相信你正在与我相遇的路上马不停蹄 关注微信工作号回复"我要flag"即可获得flag 代号为geek的行动第一幕:毒雾初现 发现flag为摩 ...

  6. 必备技能三、render渲染函数

    Vue 推荐使用在绝大多数情况下使用 template 来创建你的 HTML.然而在一些场景中,你真的需要 JavaScript 的完全编程的能力,这就是 render 函数,它比 template ...

  7. 19 JPQL

    使用Spring Data JPA提供的查询方法已经可以解决大部分的应用场景,但是对于某些业务来说,我们还需要灵活的构造查询条件,这时就可以使用@Query注解,结合JPQL的语句方式完成查询 @Qu ...

  8. ajax参数contentType与数据提交方式

    使用bootstrapTable时,服务器端无法获取参数(flask,request.form.get方法),检查发现是因为ajax提交的时候,方式是payload,要想用form提交,需要设置con ...

  9. ubuntu16.04 + caffe + SSD 硬件配置

    搞了几个月,终于把SSD试通了,不是科班出身的就是弯路多啊.几个月才跑通了caffe + ssd,痛苦至极,好在柳暗花明.好了,废话不多说,入正题. SSD作为object detection的论文, ...

  10. MySQL5.7 数据库的my.cnf配置

    [client] port socket=/tmp/mysql.sock default-character-set=utf8 [mysql] no-auto-rehash default-chara ...