XGBoost是一種基于決策樹(shù)(CART)的分布式的高效的梯度提升算法只怎,它可被應(yīng)用到分類(lèi)啡专、回歸适肠、排序等任務(wù)中霍衫,與一般的GBDT算法相比,XGBoost主要有以下幾個(gè)優(yōu)點(diǎn):
- 對(duì)葉節(jié)點(diǎn)的權(quán)重進(jìn)行了懲罰侯养,相當(dāng)于添加了正則項(xiàng)敦跌,防止過(guò)擬合
- XGBoost的目標(biāo)函數(shù)優(yōu)化利用了損失函數(shù)關(guān)于待求函數(shù)的二階導(dǎo)數(shù),而GBDT只利用了一階信息
- XGBoost支持列采樣逛揩,類(lèi)似于隨機(jī)森林峰髓,構(gòu)建每棵樹(shù)時(shí)對(duì)屬性進(jìn)行采樣,訓(xùn)練速度快息尺,效果好
- 類(lèi)似于學(xué)習(xí)率携兵,學(xué)習(xí)到一棵樹(shù)后,對(duì)其權(quán)重進(jìn)行縮減搂誉,從而降低該棵樹(shù)的作用徐紧,提升可學(xué)習(xí)空間
- 構(gòu)建樹(shù)的算法包括精確的算法和近似的算法,近似的算法對(duì)每維特征加權(quán)分位進(jìn)行分桶炭懊,具體的算法利用到了損失函數(shù)關(guān)于待求樹(shù)的二階導(dǎo)數(shù)并级。
- 添加了對(duì)于稀疏數(shù)據(jù)的支持,當(dāng)數(shù)據(jù)的某個(gè)特征缺失時(shí)侮腹,將該數(shù)據(jù)劃分到默認(rèn)的子節(jié)點(diǎn)嘲碧,本文提出了一個(gè)算法來(lái)求解這個(gè)默認(rèn)方向。
- 可并行的近似直方圖算法父阻,分裂節(jié)點(diǎn)時(shí)愈涩,數(shù)據(jù)在block中按列存放,而且已經(jīng)經(jīng)過(guò)了預(yù)排序加矛,因此可以并行計(jì)算履婉,即同時(shí)對(duì)各個(gè)屬性遍歷最優(yōu)分裂點(diǎn)
那么如何在mac下安裝xgboost呢
系統(tǒng)版本
macOS Sierra 版本 10.12.3
有兩種方法:
1. pip安裝
- 第一步:安裝HomeBrew
HomeBrew是mac系統(tǒng)的包管理軟件,類(lèi)似于ubuntu的apt-get
或者centos的yum
斟览,安裝方法如下毁腿,在終端中輸入:
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
- 第二步:安裝livm
brew install llvm
llvm是Mac下的一個(gè)編譯器,可以用來(lái)編譯C和C++程序.最新的llvm已經(jīng)包含了OpenMP.
注意, Mac下的XCode帶有clang編譯器, 但是是不支持OpenMP的,所以不能用來(lái)編譯XGBoost.
- 第三步:安裝clang-omp
brew install clang-omp
有人提到clang-omp已經(jīng)從HomeBrew移除了, 如果找不到clang-omp可以嘗試
brew install --with-clang llvm
- 第四步, 用pip安裝XGBoost
pip install xgboost
大功告成!
2. 從Github庫(kù)下載最新版XGBoost安裝
- 第一步:克隆最新的XGBoost到本地
git clone --recursive https://github.com/dmlc/xgboost
- 第二步:安裝gcc
brew install gcc5 --without-multilib
- 第三步:修改XGBoost的config文件
cd xgboost
cp make/config.mk ./config.mk
很多攻略都是直接將以下這兩行
# export CC = gcc
# export CXX = g++
改為:
export CC = gcc-5
export CXX = g++-5
但是我直接這樣做卻一直報(bào)錯(cuò),無(wú)法編譯通過(guò)已烤。搞了半天才發(fā)現(xiàn)系統(tǒng)找不到gcc,原來(lái)是macOS已經(jīng)不自帶gcc環(huán)境了鸠窗,通過(guò)Homebrew安裝系統(tǒng)也識(shí)別不到。
正常情況下是可以通過(guò)port來(lái)查看系統(tǒng)里安裝的gcc的:
安裝gcc_select
/opt/local/bin/port install gcc_select
查看gcc列表
port select --list gcc
還可以選擇gcc的版本
sudo port select --set gcc mp-gcc5
但是很不幸胯究,我執(zhí)行port select --list gcc
得到的結(jié)果是
Available versions for gcc:
none (active)
但是明明Homebrew安裝成功了啊塌鸯,于是到Homebrew的安裝目錄下瞧一瞧:cd /usr/local/bin
,發(fā)現(xiàn)里面靜靜躺著gcc5
,gcc7
唐片,系統(tǒng)就是無(wú)法識(shí)別這里的gcc丙猬。。费韭。搜了半天沒(méi)找到解決方案茧球,最后,機(jī)智的我直接把config.mk
修改成:
export CC = /usr/local/bin/gcc-5
export CXX = /usr/local/bin/g++-5
export MPICXX = /usr/local/bin/mpicxx
就是帶上具體的路徑星持,然后保存
- 第四步:開(kāi)始編譯
make clean_all && make -j4
- 第五步:安裝python包
cd python-package
python setup.py install
至些XGBoost終于安裝成功抢埋!
在python環(huán)境中測(cè)試一下:
import xgboost
xgboost.__version__
輸出'0.6'