安装包地址:
https://graphviz.org/download/
随便选一个:
下载之后一路点下一步即可,但是要注意,最开始的时候要问你是否要添加到环境变量之中,
一定要将它加到环境变量中!!
而且下载路径一定要安装到Python的路径当中,如果你确定Python的路径是什么的话,在终端中输入Python进入交互模式,然后敲以下代码:
import sys
sys.path
之后就会出现各Python的路径了,你只要看哪个路径下安装了各种exe文件,比如说pip3,那大概率路径就是目标路径,把文件安装到这个路径即可。
中文乱码问题解决:
from sklearn.tree import export_graphviz
import graphviz
dot_data = export_graphviz(clf,
out_file=None,
feature_names=features.columns,
class_names=['收入<=50K', '收入>50K'])
graph = graphviz.Source(dot_data.replace('helvetica','Microsoft YaHei'), encoding='utf-8') #解决中文乱码
graph.render('决策树可视化')
graph.view()
最后让我们利用一下这个库绘制一下决策树来实现adult数据的预测:
import numpy as np
import pandas as pd
import numpy as np
import pandas as pd
from sklearn.tree import DecisionTreeClassifier, export_graphviz # 导入决策树模型
from sklearn.model_selection import train_test_split # 导入数据集划分模块
import matplotlib.pyplot as plt
from sklearn.metrics import roc_auc_score
from sklearn.metrics import classification_report
import warnings
warnings.filterwarnings("ignore")
plt.rc("font",family="SimHei",size="15") #解决中文乱码问题
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']
plt.rcParams['axes.unicode_minus']=False #解决负数显示不出来的问题
# 数据的读入与处理
tags=['年龄', '工作类别', '序号', '受教育程度', '受教育时间','婚姻状态','职业','社会角色','种族','性别','资本收益','资本支出','每周工作时间','国籍','收入']
data_path ='data2.csv'
df = pd.read_csv(data_path,names=tags)
print('数据预览:\n{}\n'.format(df.head(5)))
heat_feature=df[:].loc[:100,:] ##这个是后期用来画热力图的,但是要深拷贝!!只取前100行进行分析
m,n=df.shape
print('一共有{}行数据,{}个特征值'.format(m,n))
##数据探索性分析
# 去除字符串数值前的空格
str_cols=[1,3,5,6,7,8,9,13,14]
for col in str_cols:
df.iloc[:,col]=df.iloc[:,col].map(lambda x: x.strip())
# 去除序号, 资本收益, 资本支出,特征属性
df.drop(['序号','资本收益','资本支出'], axis=1, inplace=True)
#对字符串型特征进行编码
features=pd.get_dummies(df.iloc[:,:-1])
m,n=features.shape
print('编码之后的特征值有{}行{}列\n'.format(m,n))
# 构造新标签替换salary
df['收入'] = df['收入'].replace(to_replace=['<=50K', '>50K'], value=[0, 1])
labels=df.loc[:,'收入']
print('标签:\n{}\n编码之后的特征值:\n{}'.format(labels.head(5),features.head(5)))
# 按4:1的比例划分训练和测试集
X_train,X_test,y_train,y_test=train_test_split(features,labels,test_size=0.25,random_state=1)
# 构建模型
clf = DecisionTreeClassifier(criterion="entropy"
,splitter="best"
,max_depth=3
,random_state=1)
clf.fit(X_train, y_train)
#对于测试集x_test进行预测
X_pre_test=clf.predict(X_test)
# 其他指标计算
print(classification_report(y_test, X_pre_test))
# 预测测试集概率值
## 得到预测结果
# y_pre = clf.predict_proba(X_test) #这个会返回个标签预测的概率值
y_pre = clf.predict(X_test)
#计算验证集的auc值,参数为预测值和概率估计
## 计算混淆矩阵
from sklearn.metrics import confusion_matrix
CM=confusion_matrix(y_test, y_pre)
print('混淆矩阵:{}\n'.format(CM))
## 画出热力图
import seaborn as sns
ax = sns.heatmap([[6010,293],[1127,711]],cmap="hot_r")
ax.set_title('热力图') # 图标题
ax.set_xlabel('真实样本情况')
ax.set_ylabel('决策树模型预测情况')
plt.show()
from sklearn.tree import export_graphviz
import graphviz
dot_data = export_graphviz(clf,
out_file=None,
feature_names=features.columns,
class_names=['收入<=50K', '收入>50K'])
graph = graphviz.Source(dot_data.replace('helvetica','Microsoft YaHei'), encoding='utf-8') #解决中文乱码
graph.render('决策树可视化')
graph.view()
然后关于热力图的个性化,可以参考这个博客:【Python】绘制热力图seaborn.heatmap,cmap设置颜色的参数_cmap颜色_兔子爱读书的博客-CSDN博客