您的位置:首页 > 其它

GBDT安装(xgboost LightGBM)

2017-03-23 10:27 489 查看

1,XGBoost 之model

1.训练集和测试集都是libsvm格式,如下所示:(label idx:val idxN:valN)并且idx从1开始的

1 3:1 10:1 11:1 21:1 30:1 34:1 36:1 40:1 41:1 53:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 117:1 124:1

0 3:1 10:1 20:1 21:1 23:1 34:1 36:1 39:1 41:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 116:1 120:1

2.最终生成的模型如下所示:

booster[0]:
0:[f824<4] yes=1,no=2,missing=2
1:[f459<4] yes=3,no=4,missing=4
3:[f718<8] yes=7,no=8,missing=8
7:[f4<16] yes=15,no=16,missing=16
15:leaf=0.04
16:leaf=0.0832258
8:[f3<74.5] yes=17,no=18,missing=18
17:[f3<3.5] yes=31,no=32,missing=32
31:leaf=0.0392857
32:leaf=0.075
18:[f546<1.5] yes=33,no=34,missing=34
33:leaf=-0.0166667
34:leaf=0.0454545
4:[f1892<-9.53674e-07] yes=9,no=10,missing=9
9:[f5<14.875] yes=19,no=20,missing=19
19:[f9<27.45] yes=35,no=36,missing=36
35:leaf=0.0414993
36:leaf=-0
20:[f9<9.15] yes=37,no=38,missing=38
37:leaf=-0.0434783
38:leaf=0.0227181
10:[f8<1.65] yes=21,no=22,missing=21
21:leaf=0.0798883
22:[f6<24] yes=41,no=42,missing=42
41:leaf=0.06
42:leaf=0.008
2:[f507<-9.53674e-07] yes=5,no=6,missing=5
5:[f3238<6] yes=11,no=12,missing=12
11:[f707<-9.53674e-07] yes=23,no=24,missing=23
23:[f453<4] yes=43,no=44,missing=44
43:leaf=0.0668712
44:leaf=0.02723
24:[f343<2] yes=45,no=46,missing=46
45:leaf=0.044
46:leaf=0.0803738
12:[f778<4] yes=25,no=26,missing=26
25:[f718<6] yes=47,no=48,missing=48
47:leaf=0.06
48:leaf=0.0358086
26:[f902<4] yes=49,no=50,missing=50
49:leaf=0.0586066
50:leaf=0.00294413
6:[f5<5.875] yes=13,no=14,missing=13
13:[f9<5.25] yes=27,no=28,missing=28
27:leaf=0.045098
28:leaf=0.00555556
14:[f8<5.25] yes=29,no=30,missing=29
29:[f69<1.5] yes=51,no=52,missing=52
51:leaf=0.0565657
52:leaf=0.0762115
30:[f5<37] yes=53,no=54,missing=54
53:leaf=0.0211009
54:leaf=0.09
booster[1]:
0:[f507<-9.53674e-07] yes=1,no=2,missing=1
1:[f5577<-9.53674e-07] yes=3,no=4,missing=3
3:[f2316<4] yes=7,no=8,missing=8
7:[f1693<4] yes=15,no=16,missing=16
15:[f8<1.35] yes=23,no=24,missing=23
23:leaf=0.0791827
24:leaf=0.0481712
16:[f9<32.85] yes=25,no=26,missing=26
25:leaf=0.0391999
26:leaf=0.0156137
8:[f778<4] yes=17,no=18,missing=18
17:[f2<0.375] yes=27,no=28,missing=28
27:leaf=0.0620543
28:leaf=0.0371438
18:[f819<4] yes=29,no=30,missing=30
29:leaf=0.0330582
30:leaf=0.00373361
4:[f9<3.15] yes=9,no=10,missing=10
9:leaf=-0.00125297
10:[f611<-9.53674e-07] yes=19,no=20,missing=19
19:[f9<26.25] yes=31,no=32,missing=31
31:leaf=0.0723316
32:leaf=0.0504592
20:[f9<18.75] yes=33,no=34,missing=34
33:leaf=0.0596224
34:leaf=0.0112981
2:[f2<14.35] yes=5,no=6,missing=5
………………
booster[2]: ……
booster[3]:……
相关解释:”numRound: 4, maxDepth: 3”表示生成树的个数为4,树的最大深度为3;booster
表示第n棵树;以下保存树的结构,0号节点为根节点,每个节点有两个子节点,节点序号按层序技术,即1号和2号节点为根节点0号节点的子节点,相同层的节点有相同缩进,且比父节点多一级缩进。
  在节点行,首先声明节点序号,中括号里写明该节点采用第几个特征(如f824即为训练数据的第824个特征),同时表明特征值划分条件,“[f824<2] yes=1,no=2,missing=2”:表示f824号特征大于2时该样本划分到1号叶子节点,f824>=2时划分到2号叶子节点,当没有该特征(None)划分到2号叶子节点。

2,GBDT的安装:

InstallationInstructions

Thepackage can be installed as a python package or compiled as C++ biinary.

Python Installation Instructions

Precompiledpackages are available for linux x86_64 platform and python 2.

Install stable version: 
pip install gbdt

Install latest development version: 
pip install git+https://github.com/yarny/gbdt.git


C++ Binary Compilation Instructions

Thepackage can be compiled in both Linux and OSX platforms. It depends on bazel,
gflags,glogs, gperf, protobuf3. Per limitation of bazel, for linux, please use ubuntu 14 andabove to build. The built binary can be used in lower version linux machine. Weinclude a convenient script to set up the dependencies.

Install bazel
Run 
setup_dependencies/setup.sh
.
Run 
bazel build -c opt src:gbdt
 to build the binary.
Find your binary at 
bazel-bin/src/gbdt
.
 

一  #####Python版本安装  gbdt……

1, pip install

[@10.134.105.160 gbdt]# pip install gbdt

Downloading/unpacking gbdt

  Downloadinggbdt-0.3.1.2.tar.gz (3.1MB): 3.1MB downloaded

  Runningsetup.py (path:/tmp/pip_build_root/gbdt/setup.py) egg_info for package gbdt

Installing collected packages: gbdt

  Runningsetup.py install for gbdt

Successfully installed gbdt

Cleaning up...

 

 

[@10.134.105.160 docs]# pip install -t/usr/local/python-2.7.6/lib/python2.7/site-packages/ gbdt

Downloading/unpacking gbdt

  Downloadinggbdt-0.3.1.2.tar.gz (3.1MB): 3.1MB downloaded

  Runningsetup.py (path:/tmp/pip_build_root/gbdt/setup.py) egg_info for package gbdt

Installing collected packages: gbdt

  Runningsetup.py install for gbdt

Successfully installed gbdt

Cleaning up...

2 ####  python2.7 import gbdt

[@10.134.105.160 docs]# python2.7

Python 2.7.13 (default, Dec 20 2016, 11:36:08)

[GCC 4.4.6 20110731 (Red Hat 4.4.6-3)] on linux2

Type "help", "copyright","credits" or "license" for more information.

>>> import gbdt

Traceback (most recent call last):

  File"<stdin>", line 1, in <module>

  File"/usr/local/python-2.7.6/lib/python2.7/site-packages/gbdt/__init__.py",line 11, in <module>

    from._forest import Forest

  File"/usr/local/python-2.7.6/lib/python2.7/site-packages/gbdt/_forest.py",line 1, in <module>

    from libgbdtimport Forest as _Forest

ImportError: /lib64/libc.so.6: version `GLIBC_2.14'not found (required by /usr/local/python-2.7.6/lib/python2.7/site-packages/gbdt/lib/linux_x86_64/libgbdt.so)

>>> 

解决错误

PATH和LD_LIBRARY_PATH本质都是变量,所谓变量的意思就是由别人赋值产生的,直觉往往会让我们添加和减少这个变量本身的某些路径,实际上这是不正确的。正确的做法是我们要去修改赋予这个变量数值的那些配置文件,加一条路径或者减一条。说到底变量只关乎显示,不关乎其用于显示的内容。

PATH:  可执行程序的查找路径

查看当前环境变量:

echo $PATH

 设置: 

方法一:export PATH=PATH:/XXX但是登出后就失效

方法二:修改~/.bashrc或~/.bash_profile或系统级别的/etc/profile

                 1. 在其中添加例如exportPATH=/opt/ActivePython-2.7/bin:$PATH

                 2. source .bashrc  (Source命令也称为“点命令”,也就是一个点符号(.)。source命令通常用于重新执行刚修改的初始化文件,使之立即生效,而不必注销并重新登录)

LD_LIBRARY_PATH: 动态库的查找路径

设置:

方法一:export  LD_LIBRARY_PATH=LD_LIBRARY_PATH:/XXX但是登出后就失效

方法二: 修改~/.bashrc或~/.bash_profile或系统级别的/etc/profile

                 1. 在其中添加例如exportPATH=/opt/ActiveP/lib:$LD_LIBRARY_PATH

                 2. source .bashrc  (Source命令也称为“点命令”,也就是一个点符号(.)。source命令通常用于重新执行刚修改的初始化文件,使之立即生效,而不必注销并重新登录)

方法三:这个没有修改LD_LIBRARY_PATH但是效果是一样的实现动态库的查找, 

               1. /etc/ld.so.conf下面加一行/usr/local/MySQL/lib

               2. 保存过后ldconfig一下(ldconfig命令的用途,主要是在默认搜寻目录(/lib和/usr/lib)以及动态库配置文件/etc/ld.so.conf内所列的目录下,搜索出可共享的动态链接库(格式如前介绍,lib*.so*),进而创建出动态装入程序(ld.so)所需的连接和缓存文件.缓存文件默认为/etc/ld.so.cache,此文件保存已排好序的动态链接库名字列表.)

方法三设置稍微麻烦,好处是比较不受用户的限制。

gbdt安装python版本------ **pip源码安装;***yum install python-devel.x86_64  yum install python27-python-devel.x86_64  ---> pip install numpy >= 0.6 && pip install SciPy >= 0.9 ; (numpy.distutils.system_info.NotFoundError: no lapack/blas resources found) --->  yum
install blas* && yum install lapack* --->  pip install SciPy ( python -c "import scipy; print scipy.__version__") & pip install sklearn

 

二,安装c 版本,但是需要bazel支持,bazel又需要依赖JDK1.8

/usr/local/bazel

 

#### 安装JDK略过

###  安装bazel

https://github.com/bazelbuild/bazel/releases下载源码。。。

 

 ####[@10.134.105.160 GBDT]#./bazel-0.4.4-installer-darwin-x86_64.sh --user

    raw set itself is deprecated.

  - Remove support for --javawarn; use e.g.--javacopt=-Xlint:all

    instead

 

## Buildinformations

   - [Buildlog](http://ci.bazel.io/job/Bazel/JAVA_VERSION=1.8,PLATFORM_NAME=darwin-x86_64/1246/)

   - [Commit](https://github.com/bazelbuild/bazel/commit/80a07b5)

Uncompressing.......

 

Bazel is nowinstalled!

 

Make sure youhave "/root/bin" in your path. You can also activate bash

completion byadding the following line to your ~/.bashrc:

  source /root/.bazel/bin/bazel-complete.bash

 

Seehttp://bazel.build/docs/getting-started.html to start a new project!

[@10.134.105.160GBDT]#

 自2007年发布以来,scikit-learn已经成为Python重要的机器学习库了。scikit-learn简称sklearn,支持包括分类、回归、降维和聚类四大机器学习算法。还包含了特征提取、数据处理和模型评估三大模块。

  sklearn是Scipy的扩展,建立在NumPy和matplotlib库的基础上。利用这几大模块的优势,可以大大提高机器学习的效率。

  sklearn拥有着完善的文档,上手容易,具有着丰富的API,在学术界颇受欢迎。sklearn已经封装了大量的机器学习算法,包括LIBSVM和LIBINEAR。同时sklearn内置了大量数据集,节省了获取和整理数据集的时间。

机器学习基础

  定义:针对经验E和一系列的任务T和一定表现的衡量P,如果随着经验E的积累,针对定义好的任务T可以提高表现P,就说明机器具有学习能力。

sklearn安装
    sklearn目前的版本是0.17.1,可以使用pip安装。在安装时需要进行包依赖检查,具体有以下几个要求:
·        Python(>=2.6 or >=3.3)
·        NumPy(>=1.6.1)
·        SciPy(>=0.9)

AdaBoost算法详细讲解(不错)

 AdaBoost 是一种迭代算法,其核心思想是针对同一个训练集训练不同的分类器,即弱分类器,然后把这些弱分类器集合起来,构造一个更强的最终分类器。(很多博客里说的三个臭皮匠赛过诸葛亮)

  算法本身是改变数据分布实现的,它根据每次训练集之中的每个样本的分类是否正确,以及上次的总体分类的准确率,来确定每个样本的权值。将修改权值的新数据送给下层分类器进行训练,然后将每次训练得到的分类器融合起来,作为最后的决策分类器。

完整的adaboost算法如下

        这里阐述下算法的具体过程:

        1.初始化所有训练样例的权重为1 / N,其中N是样例数

        2.for m=1,……M:

              a).训练弱分类器ym(),使其最小化权重误差函数(weighted
error function):

                                             

              b)接下来计算该弱分类器的话语权α:

                                               

              c)更新权重:

                                         

                            其中Zm:

                                               

                            是规范化因子,使所有w的和为1。(这里公式稍微有点乱)

             3.得到最后的分类器:

                            

 

图解AdaBoost算法

简单来说,Adaboost有很多优点:

  1)adaboost是一种有很高精度的分类器

  2)可以使用各种方法构建子分类器,adaboost算法提供的是框架

  3)当使用简单分类器时,计算出的结果是可以理解的。而且弱分类器构造极其简单

  4)简单,不用做特征筛选

  5)不用担心overfitting!

总之:adaboost是简单,有效。

 

下面我们举一个简单的例子来看看adaboost的实现过程:

图中,“+”和“-”分别表示两种类别,在这个过程中,我们使用水平或者垂直的直线作为分类器,来进行分类。

 第一步:

 



  根据分类的正确率,得到一个新的样本分布D2­,一个子分类器h1

  其中划圈的样本表示被分错的。在右边的途中,比较大的“+”表示对该样本做了加权。

也许你对上面的ɛ1,ɑ1怎么算的也不是很理解。下面我们算一下,不要嫌我啰嗦,我最开始就是这样思考的,只有自己把算法演算一遍,你才会真正的懂这个算法的核心,后面我会再次提到这个。

算法最开始给了一个均匀分布 D。所以h1
里的每个点的值是0.1。ok,当划分后,有三个点划分错了,根据算法误差表达式
得到误差为分错了的三个点的值之和,所以ɛ1=(0.1+0.1+0.1)=0.3,而ɑ1根据表达式 的可以算出来为0.42.然后就根据算法
把分错的点权值变大。如此迭代,最终完成adaboost算法。但是Dt是如何转化呢?且保证Dt之和为1:


  在训练的时候,样本权重空间的计算方法,仍然为:()

 


目前难点不太清楚的地方是,基分类器如何生成???

 

第二步:

 



  根据分类的正确率,得到一个新的样本分布D3,一个子分类器h2

  第三步:

 



  得到一个子分类器h3

整合所有子分类器:

 



因此可以得到整合的结果,从结果中看,及时简单的分类器,组合起来也能获得很好的分类效果,在例子中所有的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  xgboost GBDT