因为工作原因,需要平凡接触 XGBoost 这个模型。为了方便起见,除了公司提供的 Linux 服务器以外,自己也在本地安装了 XGBoost,从此开始遇到各种问题,甚至还重装了 anaconda3,可谓是血泪史。所以在此记录下自己遇到的各种问题和最后解决的途径,也欢迎大家在评论区留言给出自己独到的见解~
MacBook Pro (13-inch, M1, 2020)
芯片 Apple M1
内存 16 GB
环境 Python 3.7
编译器 Pycharm
我的 Python 是从 anaconda3 安装的 Anaconda3-2019.10-MacOSX-x86_64.sh
,以下为各类安装包的地址,真的非常全,感谢清华大学开源镜像站!
anaconda3 下载地址
我是从 Github 库下载最新版 XGBoost 安装,Github 地址如下:
https://github.com/dmlc/xgboost
1. 安装Homebrew
HomeBrew是mac系统的包管理软件,类似于ubuntu的apt-get或者centos的yum,安装方法如下,在终端中输入:
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
我是之前就安装了 HomeBrew,所以不清楚这个链接是否需要,如果有卡顿大家也可以选择国内的下载站,网上搜一下就有
2. 安装gcc-6
brew install gcc --without-multilib
这个过程可能会比较久,如果有代码报错可以把 --without-multilib
去掉
如果有必要的话可能也需要安装
brew install llvm
和
brew install clang-omp
3. 选择根目录
选择根目录作为安装xgboost的地址
cd ~
根据之前多部血泪的经验,这一步真的不能省
4. 开始克隆 xgboost
git clone --recursive https://github.com/dmlc/xgboost
到这一步我一直克隆到一半就断,后来直接上github网站用桌面版打开直接复制到了根目录,大家可以根据自己方便的方式获取下载包
5. 直接键入
cd xgboost; cp make/config.mk ./config.mk; make -j4
6. 键入
cd python-package; sudo python setup.py install
1. Pycharm 内直接安装
一开始我想的很简单,就和别的算法包一样,直接在编译器里安装就好了
真的是轻便简单,但是会遇到各种问题
首先是
import xgboost
这个阶段就会报错,后来通过删掉重装,终于能把这个包导入了,但在代码运行阶段直接开始报更过的错误,比如:XGBoostError: XGBoost Library (libxgboost.dylib) could not be loaded
和 AttributeError: /home/hp/anaconda3/lib/libxgboost.so: undefined symbol: XGDMatrixSetDenseInfo
还有 llysm: symblo not found
贴别是最后一种错误,我真的遇到了无数次,完全没办法解决,最后通过重装了 python 解决了。所以重装真的能解决很多问题!牢记上面提供的软件镜像站哦~
2. 通过 pip 或者 conda 安装
其实我是相信conda 安装 pyxgboost是正确的方式,但是我自己安装的时候它自动把我的anaconda3 downgrade了,导致我正常的 python 运行也出现了障碍,这也是最后导致我重装 python 的原因。但是在此还是提供 conda 安装方法,毕竟网上很多教程还是推荐的:
conda install py-xgboost
如果之前安装的版本出现报错,需要先把之前安装的卸载了:
pip uninstall xgboost
或者
pip3 uninstall xgboost
以下是一段简单的 xgb 代码,如果能成功跑出说明算法包安装没有问题,大家快快尝试吧~
#%%
from sklearn import datasets
from sklearn.model_selection import train_test_split
import xgboost as xgb
from sklearn import metrics
# 导入鸢尾花的数据
iris = datasets.load_iris()
# 特征数据
data = iris.data[:100] # 有4个特征
# 标签
label = iris.target[:100]
# 提取训练集和测试集
# random_state:是随机数的种子。
train_x, test_x, train_y, test_y = train_test_split(data, label, random_state=0)
dtrain = xgb.DMatrix(train_x, label = train_y)
dtest = xgb.DMatrix(test_x)
# 参数设置
params={'booster':'gbtree',
'objective': 'binary:logistic',
'eval_metric': 'auc',
'max_depth':4,
'lambda':10,
'subsample':0.75,
'colsample_bytree':0.75,
'min_child_weight':2,
'eta': 0.025,
'seed':0,
'nthread':8,
'silent':1}
watchlist = [(dtrain,'train')]
bst=xgb.train(params,dtrain,num_boost_round=100,evals=watchlist)
ypred=bst.predict(dtest)
# 设置阈值, 输出一些评价指标
# 0.5为阈值,ypred >= 0.5输出0或1
y_pred = (ypred >= 0.5)*1
# ROC曲线下与坐标轴围成的面积
print ('AUC: %.4f' % metrics.roc_auc_score(test_y,ypred))
# 准确率
print ('ACC: %.4f' % metrics.accuracy_score(test_y,y_pred))
print ('Recall: %.4f' % metrics.recall_score(test_y,y_pred))
# 精确率和召回率的调和平均数
print ('F1-score: %.4f' %metrics.f1_score(test_y,y_pred))
print ('Precesion: %.4f' %metrics.precision_score(test_y,y_pred))
metrics.confusion_matrix(test_y,y_pred)
以上就是我在本地安装并运行 xgboost 遇到的各种问题,因为整个过程很长,所以感觉是值得记录下来的笔记,欢迎大家发表自己的意见遇到问题我们可以一起解决。谢谢