听说xgboost效果很不错,于是准备学习下,但是发现大多数资料都是在讲如何在windows或linux下安装xgboost,而且照着官方文档也没有正确的安装好多线程的xgboost。最后还是从there找到了方法。
1. Mac OSX系统一般自带python,打开终端输入python即可写python代码,所以python环境已经具备了。
2.安装 Homebrew , 类似于ubuntu中的apt-get和centos中的yum,是OSX里面的一个非常有用软件安装工具。
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
直接将上述代码粘贴至终端即可安装。(安装这个软件的目的在于更新gcc版本,因为官方文档中说只有最新的gcc版本才能使xgboost支持多线程)
3.安装最新版本的gcc (gcc-6)
brew install gcc --without-multilib
这步比较耗时,用了将近1小时。
4.从git上下载源码
cd进入你想要安装的目录,然后输入下面的代码。(我是直接在打开终端的目录)
git clone --recursive https://github.com/dmlc/xgboost
5.最关键的一步,编译xgboost的源码。(为啥不直接发布一个编译好的,因为每台电脑相差太多)
这一步也是官方文档中没有说清楚的一步,官方文档在第4步之后直接就开始编译源码了,但是其实这时gcc只是下载好了,系统并没有使用刚刚下载下来最新的gcc。这时
cd /usr/bin rm cc gcc c++ g++ ln -s /usr/local/bin/gcc-6 cc ln -s /usr/local/bin/gcc-6 gcc ln -s /usr/local/bin/c++-6 c++ ln -s /usr/local/bin/g++-6 g++
上述代码大意是,使用最新的gcc-6代替之前的gcc
接着就是正常的编译
cd 之前安装xgboost的目录/xgboost cp make/config.mk make -j4
如果没有一直警告gcc不支持多线程,则表示这一步顺利完成.
6. 不出意外,上一步编译的过程会报错,错误是:std::abs(XXX) 不对。
因为编译器变了导致了这个错误。
于是只要将std::abs(XXX) 改成
XXX>=0?XXX:-XXX
也就是用一个问号表达解决这个问题。 好在错误只有两个,都是一样的。所以改下这两处代码就行了。
然后编译,成功!
7.验证是否成功安装。
在python中输入
import xgboost as xgb
并按下回车,如果未报错,则说明已经可以在python程序中正确的导入xgboost包了!如下图: