app开发者平台在数字化时代的重要性与发展趋势解析
1830
2022-09-07
python实现决策树可视化Graphviz的安装
上一篇文章:决策树(信息熵、信息增溢、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 |
数据集:pandas as pdimport numpy as np# 导入数据集data = pd.read_csv("play.csv")# 显示数据集print(data)# 可以看出这是一个分类变量的数据集。然后,我们就要将它变成数值变量,好利于下面的建模。from sklearn.preprocessing import LabelEncoderprint(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_splity = 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 StandardScalerss_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 pydotplusfrom sklearn import treefrom IPython.display import Imageimport os# 设置环境变量:因为scikit-learn决策树结果的可视化需要使用到Graphvizos.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的安装
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~