最近做项目又需要用XGBoost画出决策树来解释,之前用花了大力气装了graphviz画决策树,后来重新安装了Anaconda后环境就没了,也忘了当时踩过的坑,在网上找到的都是千篇一律但是装不好的博客,所以又踩了一次坑,install uninstall了好几次,写一篇博客以免以后自己又忘了。。。
1、Mac下安装graphviz
我先在Anaconda的环境中尝试安装,apply了以下两个包,可是不能用,后面想要remove也操作不了,后来就没管了,继续下面的安装步骤了(不知道这一步有没有用)
1、打开终端,查看是否安装了brew,若出现下面则说明brew是OK的,安装了之后才进行下一步
2、终端中输入brew install graphviz
,在电脑上下载和安装graphviz,若长时间停留在Updating Homebrew...
可以用control+C
跳过更新,然后出现很多downloading,需要等一段时间
3、进入需要安装的环境下,进入环境为activate + 环境名
,退出环境为conda deactive
,然后用pip3对Python安装graphviz,输入pip3 install graphviz
然后就可以在Python的IDE中使用了。下面是XGBoost可视化决策树。
2、XGBoost可视化决策树
1、xgb是xgboost的分类器或者regressor,对训练集进行拟合后得到
import xgboost
from xgboost import XGBRegressor
from sklearn.model_selection import RandomizedSearchCV
import scipy.stats as st
# 随机搜索调参
# 基本模型
xgb = XGBRegressor(booster = 'gbtree',
objective = 'reg:squarederror',
eval_metric = 'rmse',
n_jobs = -1,
random_state = 1)
# 给定参数搜索范围,使用分布可以以分布抽样,比较好,若列出list是不放回抽样
param_dist = {'n_estimators': st.randint(100, 300),
'max_depth': st.randint(3, 9),
'subsample': st.uniform(loc=0.6, scale=0.4),
'colsample_bytree': st.uniform(loc=0.6, scale=0.4),
'reg_alpha': st.reciprocal(a=0.1, b=3),
'reg_lambda': st.reciprocal(a=0.1, b=3),
'gamma': st.uniform(loc=0.1, scale=0.4),
'learning_rate': st.reciprocal(a=0.01, b=0.1)}
# 100次5折随机搜索选取超参数
random_search = RandomizedSearchCV(xgb, param_dist, n_iter=100, cv=5,
random_state=1, n_jobs=-1)
random_search.fit(X_train, y_train)
print("最优参数为: ", random_search.best_params_, '\n')
# 搜索出来的参数
xgb = XGBRegressor(booster = 'gbtree',
objective = 'reg:squarederror',
eval_metric = 'rmse',
n_estimators = 105,
max_depth = 3,
subsample = 0.9929669797171772,
colsample_bytree = 0.7958798412068397,
reg_alpha = 1.6214144356327336,
reg_lambda = 0.2875908279269091,
gamma = 0.45574990157070927,
learning_rate = 0.07490490662679436,
n_jobs = -1,
random_state = 1
)
xgb.fit(X_train, y_train) # 训练模型
xgboost.plot_tree(xgb, num_trees=3) # 画出第3颗决策树
下面是xgboost的一颗决策树,open是一个特征
这个图显示的特别不清楚,若使用xgboost.to_graphviz(xgb, num_trees=3)
在控制台中的图就会清楚很多。