python实现决策树可视化

上一篇文章:决策树(信息熵、信息增溢、GINI)的计算

这篇文章我们来介绍下如何通过python实现决策树可视化。

【概念】

      决策树是一种机器学习的方法。决策树的生成算法有ID3, C4.5和C5.0等。决策树是一种树形结构,其中每个内部节点表示一个属性上的判断,每个分支代表一个判断结果的输出,最后每个叶节点代表一种分类结果。通过学习样本得到一个决策树,这个决策树能够对新的数据给出正确的分类。

【准备数据】

outlooktemperaturehumiditywindyplay
sunnyhothighFALSEno
sunnyhothighTRUEno
overcasthothighFALSEyes
rainymildhighFALSEyes
rainycoolnormal FALSEyes
rainycoolnormal TRUEno
overcastcoolnormal TRUEyes
sunnymildhighFALSEno
sunnycoolnormal FALSEyes
rainymildnormal FALSEyes
sunnymildnormal TRUEyes
overcastmildhighTRUEyes
overcasthotnormal FALSEyes
rainymildhighTRUEno

  数据集: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")

【运行结果】

【相关文章链接】

Graphviz的安装:https://blog.csdn.net/wyf2017/article/details/107792316

  • 7
    点赞
  • 99
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值