python实现决策树可视化Graphviz的安装
原创
©著作权归作者所有:来自51CTO博客作者流年若逝的原创作品,请联系作者获取转载授权,否则将追究法律责任
上一篇文章:决策树(信息熵、信息增溢、GINI)的计算
这篇文章我们来介绍下如何通过python实现决策树可视化。
【概念】
决策树是一种机器学习的方法。决策树的生成算法有ID3, C4.5和C5.0等。决策树是一种树形结构,其中每个内部节点表示一个属性上的判断,每个分支代表一个判断结果的输出,最后每个叶节点代表一种分类结果。通过学习样本得到一个决策树,这个决策树能够对新的数据给出正确的分类。
【准备数据】
outlook | temperature | humidity | windy | play |
sunny | hot | high | FALSE | no |
sunny | hot | high | TRUE | no |
overcast | hot | high | FALSE | yes |
rainy | mild | high | FALSE | yes |
rainy | cool | normal | FALSE | yes |
rainy | cool | normal | TRUE | no |
overcast | cool | normal | TRUE | yes |
sunny | mild | high | FALSE | no |
sunny | cool | normal | FALSE | yes |
rainy | mild | normal | FALSE | yes |
sunny | mild | normal | TRUE | yes |
overcast | mild | high | TRUE | yes |
overcast | hot | normal | FALSE | yes |
rainy | mild | high | TRUE | no |
数据集:https://wyf0809.lanzoui.com/iEWA8fhbvti
【编码】
import pandas as pd
import numpy as np
# 导入数据集
data = pd.read_csv("play.csv")
# 显示数据集
print(data)
# 可以看出这是一个分类变量的数据集。然后,我们就要将它变成数值变量,好利于下面的建模。
from sklearn.preprocessing import LabelEncoder
print(data.columns)
# 数据预处理
# sklearn要求数据输入的特征值(属性)features以及输出的类,必须是数值型的值,而不能是类别值(如outlook属性中的high、overcast、rainy)
# 使用LabelEncoder对特征进行硬编码(编码为0~n-1(n为种类数))
labelencoder = LabelEncoder()
for col in data.columns:
data[col] = labelencoder.fit_transform(data[col]) # 对数据先拟合在标准化
# 打印显示对应的编码
print(data)
print('\n')
# 开始提取训练集与测试集
# 导入训练集和测试集切分包
from sklearn.model_selection import train_test_split
y = data['play']
X = data.drop('play', axis=1)
# 将数据进行分割
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=0,test_size=0.2, train_size=0.8)
'''
X:样本特征集
y:样本标签集
random_state:是随机数的种子。在同一份数据集上,相同的种子产生相同的结果,不同的种子产生不同的划分结果
test_size:样本占比,测试集占数据集的比重,如果是整数的话就是样本的数量
x_train,y_train:构成了训练集
x_test,y_test:构成了测试集
'''
columns = X_train.columns
# 接着标准化训练集
# 数据标准化 保证每个维度的特征数据方差为1,均值为0。使得预测结果不会被某些维度过大的特征值而主导。
from sklearn.preprocessing import StandardScaler
ss_X = StandardScaler()
ss_y = StandardScaler()
X_train = ss_X.fit_transform(X_train.astype(float))
X_test = ss_X.transform(X_test.astype(float))
# 构建决策树模型
from sklearn.tree import DecisionTreeClassifier
# 初始化树模型
model_tree = DecisionTreeClassifier() # ()里面不填任何属性默认为Gini,里面填写criterion='entropy'使用的是信息熵
# 拟合数据集
model_tree.fit(X_train, y_train)
# 评价模型准确性:使用决策树对测试数据进行类别预测
y_prob = model_tree.predict_proba(X_test)[:,1]
# np.where(condition, x, y);满足条件(condition),输出x,不满足输出y。
y_pred = np.where(y_prob > 0.5, 1, 0)
# 预测的精准度
model_tree.score(X_test, y_pred)
# 可视化树图
data_ = pd.read_csv("play.csv")
# 特征列名
data_feature_name = data_.columns[:-1]
# 标签分类
data_target_name = np.unique(data_["play"])
import pydotplus
from sklearn import tree
from IPython.display import Image
import os
# 设置环境变量:因为scikit-learn决策树结果的可视化需要使用到Graphviz
os.environ["PATH"] += os.pathsep + 'D:\Tools\graphviz\Graphviz 0.1.1\bin'
# 可视化决策树
dot_tree = tree.export_graphviz(model_tree,feature_names=data_feature_name,class_names=data_target_name,filled=True, rounded=True,special_characters=True)
graph = pydotplus.graph_from_dot_data(dot_tree)
img = Image(graph.create_png())
# 输出图片
graph.write_png("out_01.png")
【运行结果】
![python实现决策树可视化Graphviz的安装_数据集](https://s2.51cto.com/images/blog/202207/18111854_62d4d11e55d1341440.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=/resize,m_fixed,w_1184)
【相关文章链接】
Graphviz的安装