这是第一次写简书,还不怎么会使用。xgboost做为一个经常在kaggle竞赛中出现的算法,足以说明它的强大与高效。本次记录安装xgboost过程中出现的问题(实实在在的安装了一天)。
百度发现,安装xgboost需要两个东西:git和mingw(此时电脑上已有anaconda,git)。
使用git下载xgboost(命令均在git bash中运行)
新建xgboost文件夹,用以下命令跳转
$ cd /c/Users/xgboostCode/
用以下命令下载xgboost
$ git clone --recursive https://github.com/dmlc/xgboost
$ cd xgboost
$ git submodule init
$ git submodule update
在下载时遇到的错误如下:
error:RPC failed;curl 18 transfer colosed with outstanding read data remaining
这时需要更改curl的postBuffer的大小
$ git config --global http.postBuffer 524288000 现在将大小更改为500M,然而我依旧出现该错误,xgboost不能下载,于是将524288000减小为24288000,成功!
下载MinGW-W64(最痛苦之事莫过于此)
The first time,很成功,看着进度条一点点推进,一种自豪感油然而生(不知道哪来的)。眼看着已经完成一大半,突然手贱的点了取消(鬼知道我在想什么,一定是鬼附身了),然后就一直定在这了。
The second time...
The third time...
......
也不知道试了多少遍,这期间试了管理员运行,更改安装目录,更改build revision的值,更改version版本号。
当然版本有那么10多个,没有一一试完,就在我下载了TDM,当算换种方式时试了MinGW最后一次,仍然是改版本号,用的应该是6.4.0,居然成功了!
然后添加环境变量
C:\Program Files\mingw-w64\x86_64-5.3.0-posix-seh-rt_v4-rev0\mingw64\bin。
说一下,Architecture必须用x86_64
编译xgboost
关闭git bash再打开,输入$ which mingw32-make
如果得到/c/Program Files/mingw-w64/x86_64-5.3.0-posix-seh-rt_v4-rev0/mingw64/bin/mingw32-make,说明配置成功。
输入以下命令
$ alias make='mingw32-make'
$ cd /c/Users/xgboostCode/xgboost定位到xgboost的位置
逐行编译
$ cd dmlc-core
$ make -j4
$ cd ../rabit
$ make lib/librabit_empty.a -j4
$ cd ..
$ cp make/mingw64.mk config.mk
$ make -j4
执行完成就安装xgboost的Python模块(此时使用cmd)
定位cd xgboostCode\xgboost\python-package
安装python setup.py install
使用Python添加os环境变量
import os
mingw_path = 'C:\\Program Files\\mingw-w64\\x86_64-5.3.0-posix-seh-rt_v4-rev0\\mingw64\\bin'
os.environ['PATH'] = mingw_path + ';' + os.environ['PATH']
最后测试
import numpy as np
import xgboost as xgb
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)
dtest = dtrain
param = {'bst:max_depth':2, 'bst:eta':1, 'silent':1, 'objective':'binary:logistic' }
param['nthread'] = 4
param['eval_metric'] = 'auc'
evallist = [(dtest,'eval'), (dtrain,'train')]
num_round = 10
bst = xgb.train( param, dtrain, num_round, evallist )
bst.dump_model('dump.raw.txt')
正常运行则说明成功了!