Mac OSX 下安裝XGBoost

最近打算認真做一下Kaggle, 之前斷斷續續也參與了一些比賽, 但是每次把數據下載下來, 簡單看看數據就被其他時間打斷了, 等回想起來繼續看數據的時候, 比賽也快結束了. 參與Kaggle比賽,自然少不了屠龍神器, XGBoost. 如果你還不知道什麼是XGBoost的話, 這是Tianqi Chen開發的一個Gradient Boosting包, 和其他的Gradient Boosting包不同之處在於, XGBoost更快,而且有其他一些很好的特性,比如可以直接用在有缺失值的數據. Tianqi Chen和其他人用XGBoost橫掃了Kaggle和其他一些機器學習的比賽, 所以現在基本參加Kaggle比賽的人都會使用XGBoost.

扯了這麼多回到正題, 安裝XGBoost. XGBoost有很多的wrapper, 比如R和Python. 因為我比較喜歡Python, 所以選擇安裝Python版本的XGBoost. 本以為XGBoost和其他python包一樣, 用pip很容易安裝, 嘗試了一番之後, 發現有很多問題, 這裡記錄下來,方便其他遇到同樣問題的人.

總的來說, XGBoost有兩種安裝方式, 一是直接用pip安裝, 但可能安裝的XGBoost並不是最新的版本, 另外就是從Github上的XGBoost庫直接編譯安裝.

這裡要注意的問題是, XGBoost是支持多線程的, 要用XGBoost參加Kaggle比賽, 這個功能是必不可少的. 注意, XGBoost的多線程需要用到OpenMP, 也就是編譯器需要支持OpenMP, 這也是安裝過程中最麻煩的.

1. 用pip安裝XGBoost

第一步, 安裝HomeBrew.

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

HomeBrew是Mac的一個包管理軟體, 類似於Linux裡面的apt-get

第二步, 安裝llvm

brew install llvm

llvm是Mac下的一個編譯器,可以用來編譯C和C++程序.最新的llvm已經包含了OpenMP.

注意, Mac下的XCode帶有clang編譯器, 但是是不支持OpenMP的,所以不能用來編譯XGBoost.

第三步, 安裝clang-omp

brew install clang-omp

有人提到clang-omp已經從HomeBrew移除了, 如果找不到clang-omp可以嘗試

brew install --with-clang llvm

第三步, 安裝XGBoost

pip install xgboost

大功告成!

2. 從Github庫安裝XGBoost

第一步, 克隆最新的XGBoost到本地

git clone --recursive https://github.com/dmlc/xgboost

第二步, 安裝gcc和g++

brew install gcc5 --without-multilib

沒有brew的話, 參見上面先安裝HomeBrew.

Mac上是沒有gcc和g++的, 默認的是clang(安裝XCode之後會有).但是XCode自帶的clang是不支持OpenMP的.所以我們要自己安裝gcc, 這裡我直接選擇安裝gcc5.

第三步, 修改XGBoost的config文件

cd xgboost; cp make/config.mk

打開config.mk, 把文件中的下面兩行注釋去掉, 並且改成如下內容.

export CC = gcc-5export CXX = g++-5

這裡我們指定用剛才安裝的gcc5和g++5來編譯C和C++文件.

確定config文件裡面USE_OPENMP = 1,這裡指定使用OpenMP,也就是使XGBoost支持多線程.

第四步, 編譯XGBoost

./config.mk; make -j4

很不幸的是,我在這一步報錯了, Google了很多也解決不了. 等我解決了這個問題, 我會上來繼續更新. 如果你沒有問題的話, 繼續下一步

第五步, 安裝XGBoost Python package

cd python-package; sudo python setup.py install

大功告成!
推薦閱讀:

【轉】XGBoost參數調優完全指南(附Python代碼)
國慶回家,我在手機上訓練XGBoost模型
再看Boosting和GBM
快的不要不要的lightGBM
XGBoost 中文文檔發布,大佬們輕點踩 | ApacheCN

TAG:机器学习 | Kaggle | xgboost |