此处主要学习决策树的分类问题——DecisionTreeClassifier

1、决策树算法的环境搭建

GraphViz是将决策树模型可视化的一个模块。Anaconda不自带该模块,因此想要可视化决策树则需要安装Graphviz,执行以下步骤:

(1)可通过网址https://graphviz.io/_pages/Download/Download_windows.html下载安装Graphviz。如果计算机系统是Linux,可以用apt-get或者yum方法安装。若是Windows系统,在官网下载GraphViz-2.38.msi文件并安装。无论是Linux还是Windows,装完后都要设置环境变量,将GraphViz的bin目录加入PATH。如果是Windows系统,将C:/Program Files(x86)/Graphviz2.38/bin/加入PATH。

(2)安装Python插件GraphViz,在Anaconda Prompt弹出的窗口中运行下面的命令:

pip install graphviz

(3)安装Python插件pydotplus.

conda install -c conda-forge pydotplus
pip install pydotplus

这样环境就搭好了,有时候仍然找不到graphviz,这时可以在代码里面加入这一行:

import os
os.environ["PATH"]+=os.pathsep+'C:/Program Files(x86)/Graphviz2.38/bin/'

2、使用决策树对鸢尾花数据集iris分析

主要是数据集构造决策树,先生成DecisionTreeClassifier类的一个实例(如clf_tree);然后使用该实例调用fit()方法进行训练;对于训练好的决策树模型,可以使用predict()方法对新的样本进行预测,其predict()将返回新样本值的预测类别;sklearn.tree模块提供了训练决策树模型的文本描述输出方法export_graphviz(),该方法可查看训练的决策树模型参数。

(1)先导入iris数据集,观察数据集的基本信息

from sklearn import datasets
iris=datasets.load_iris()
print('iris.data的形状为',iris.data.shape)
print('iris.data的特征名称为:',iris.feature_names)
print('iris.target的内容为:\n',iris.target)
print('iris.target的形状为',iris.target.shape)
print('iris.target的鸢尾花名称为',iris.target_names)

(2)导入tree模块,生成DecisionTreeClassifier()类的实例,训练模型,并输出模型数据文件

x=iris.data                   # 数据特征
y=iris.target                 # 数据特征
from sklearn import tree      # 导入scikit-learn的tree模块
# 评价标准为 criterion='entropy',决策树最大深度为 max_depth=2
clf_tree=tree.DecisionTreeClassifier(criterion='entropy',max_depth=2)
clf_tree.fit(x,y)
dot_data=tree.export_graphviz(clf_tree,out_file=None,feature_names=iris.feature_names,class_names=True,filled=True,rounded=True)
print('dot_data决策结果数据文件为:\n',dot_data)

(3)为了能直观地观察训练好的决策树,则利用pydotplus+GraphViz将决策树可视化,有2种方法,下面我们一一例举

# 决策树可视化方法一:(可直接把图产生在python的notebook)
from IPython.display import Image
import pydotplus
graph = pydotplus.graph_from_dot_data(dot_data)
Image(graph.create_png()) 

# 决策树可视化方法二(用pydotplus生成iris.pdf)
import pydotplus
graph = pydotplus.graph_from_dot_data(dot_data)
graph.write_pdf("iris.pdf") 

可数化结果保存在iris.pdf文件中

决策树可视化的方法中,个人比较推荐第一种的做法,因为这样可以直接把图产生在ipython的notebook,直接观察其结果。

(4)使用训练好的决策树模型clf_tree对数据集进行预测,将预测结果与真实类标签进行可视化对比,观察其预测结果。

# 预测结果部分
y_predict=clf_tree.predict(x)
# 可视化部分
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']='SimHei' # 设置字体为SimHei以显示中文
plt.rcParams['axes.unicode_minus']=False # 坐标轴刻度显示负号
plt.rc('font',size=(14))
plt.scatter(range(len(y)),y,marker='o')
plt.scatter(range(len(y)),y_predict+0.1,marker='*')
plt.legend(['真实类别','预测类别'])
plt.title('使用决策树对iris数据集的预测结果与真实类别进行对比')
plt.show() 

从上图中,我们可以看出有6个样本的预测结果是错误的。

(5)改变评价标准然后观察其预测结果

# 调用决策树,将评价标准改为:gini
clf_tree2=tree.DecisionTreeClassifier(criterion='gini',max_depth=2)
clf_tree2.fit(x,y)
dot_data=tree.export_graphviz(clf_tree2,out_file=None,feature_names=iris.feature_names,class_names=True,filled=True,rounded=True)
graph = pydotplus.graph_from_dot_data(dot_data)
Image(graph.create_png()) 

# 预测值部分
y_predict2=clf_tree2.predict(x)
# 可视化部分
plt.figure(figsize=(10,4))
plt.scatter(range(len(y)),y,marker='o')
plt.scatter(range(len(y)),y_predict2+0.1,marker='*')
plt.legend(['真实类别','预测类别'])
plt.title('使用决策树对iris数据集的预测结果与真实类别进行对比')
plt.show()

我们从图中可以看出,还是有6个样本的预测结果是错误的,这说明不能通过改变评价标准的方式提高预测结果的准确率。

(6)改变深度然后观察其预测结果

# 调用决策树,改变最大深度
clf_tree3=tree.DecisionTreeClassifier(criterion='entropy',max_depth=3)
clf_tree3.fit(x,y)
dot_data=tree.export_graphviz(clf_tree3,out_file=None,feature_names=iris.feature_names,class_names=True,filled=True,rounded=True)
graph = pydotplus.graph_from_dot_data(dot_data)
Image(graph.create_png()) 

# 预测结果部分
y_predict3=clf_tree3.predict(x)
# 可视化部分
plt.figure(figsize=(10,4))
plt.scatter(range(len(y)),y,marker='o')
plt.scatter(range(len(y)),y_predict3+0.1,marker='*')
plt.legend(['真实类别','预测类别'])
plt.title('使用决策树对iris数据集的预测结果与真实类别进行对比')
plt.show()

从上图我们可以看到,预测结果的4个样本是错误的,这说明我们可以通过改变深度来提高分类的准确率。

iris数据集——决策树相关推荐

  1. 机器学习笔记2 – sklearn之iris数据集

    前言 本篇我会使用scikit-learn这个开源机器学习库来对iris数据集进行分类练习. 我将分别使用两种不同的scikit-learn内置算法--Decision Tree(决策树)和kNN(邻 ...

  2. 的使用两个数据集拼接_使用Scikit Learn的分类器探索Iris数据集

    暂时,想象一下你不是一个花卉专家(如果你是专家,那对你很好!).你能区分三种不同的鸢尾属植物吗?刚毛鸢尾属,花色鸢尾属和维吉尼亚鸢尾属(setosa, versicolor, virginica)? ...

  3. 机器学习--Iris数据集的Fisher线性分类以及数据可视化技术的学习

    Iris数据集的Fisher线性分类以及数据可视化技术的学习 1.Iris数据集的Fisher线性分类 2.数据可视化技术的学习 1.数据集介绍 2.观看数据前5行 3.特征工程 1.数据清洗 2.数 ...

  4. python数据统计_Python数据分析--Iris数据集实战

    Apple iPhone 11 (A2223) 128GB 黑色 移动联通电信4G手机 双卡双待 4999元包邮 去购买 > 本次主要围绕Iris数据集进行一个简单的数据分析, 另外在数据的可视 ...

  5. 机器学习之多模型融合预测iris数据集

    一.多模型融合 众所周知,机器学习可以通过多个模型融合来提升模型的性能,近些年的各种算法大赛中前几名几乎都是多模型融合,比如在kaggle上的otto产品分类挑战赛中取得冠军和亚军成绩的模型都是融合了 ...

  6. R语言explore包进行探索性数据分析实战(EDA、exploratory data analysis):基于iris数据集

    R语言explore包进行探索性数据分析实战(EDA.exploratory data analysis):基于iris数据集 目录

  7. 混淆矩阵是什么?Python多分类的混淆矩阵计算及可视化(包含原始混淆矩阵及归一化的混淆矩阵):基于skelarn框架iris数据集

    混淆矩阵是什么?Python多分类的混淆矩阵计算及可视化(包含原始混淆矩阵及归一化的混淆矩阵):基于skelarn框架iris数据集 目录

  8. R使用Iris数据集构建SVM分类器

    R使用Iris数据集构建SVM分类器 目录 R使用Iris数据集构建SVM分类器 数据加载 SVM分类器构建 模型调优

  9. 【统计学习方法】线性可分支持向量机对鸢尾花(iris)数据集进行二分类

    本文摘要 · 理论来源:[统计学习方法]第七章 SVM · 技术支持:pandas(读csv).numpy.sklearn.svm.svm思想.matplotlib.pyplot(绘图) · 代码目的 ...

  10. 【统计学习方法】朴素贝叶斯对鸢尾花(iris)数据集进行训练预测

    本文摘要 · 理论来源:[统计学习方法]第三四章 朴素贝叶斯 · 技术支持:pandas(读csv).numpy.sklearn.naive_bayes.GaussianNB(高斯朴素贝叶斯模型).s ...

最新文章

  1. 牛客练习赛81 B. 小 Q 与彼岸花(FWT nlogn做法)
  2. R语言使用DALEX包的model_performance函数对caret包生成的多个算法模型进行残差分布分析并可视化每个模型的残差反向累积分布图
  3. 关于登录linux时,/etc/profile、~/.bash_profile等几个文件的执行过程
  4. 数据备份基础之备份类型
  5. 【Linux】33. shell脚本 递归删除空目录
  6. eclipse通过classpath variable引用类库
  7. eslint php,ESlint操作步骤详解
  8. html制作卡通图案代码,CSS画的卡通动画图案
  9. 七嘴八舌Google
  10. iOS8 自定义navigationbar 以及 UIBarButtonItem 边距问题
  11. 2021全国特种设备-R1快开门式压力容器充装模拟考试题库一[安考星]
  12. 有没有一款手机桌面便签软件?真正好用的便签软件推荐
  13. (Java-11)简单的银行账户模拟
  14. Chinese-ELECTRA ‘adam_m not found in checkpoint ‘
  15. C/C++《程序设计基础(C语言)课程设计》[2023-04-20]
  16. python抓取酷我MV
  17. 1.mysql 的安装
  18. 2021WSB-day1-2-Ajay Kumar介绍Less Constrained下的非接触性掌纹识别
  19. u盘复制一直正在计算机,用U盘复制文件时电脑自动就重启是怎么回事
  20. UI这样标注切图,再也不用加班了!

热门文章

  1. 曼联球星普巴来罗!POGMOJI APP即将上市
  2. 迅雷下载的种子文件后坠总是php,我的迅雷怎么不能下载呀,总是显示在连接种子文件...
  3. 怎么删掉计算机云u盘,win10系统删除360云u盘图标的操作方法
  4. Android 权限汇总大全
  5. 在虚幻引擎5中构建你的首款游戏 - 03 - 模型和材质蓝图
  6. 超全汇总!常见的芯片封装大全!
  7. C#中制作启动窗体的方法和问题
  8. 通过企业微信SCRM营销系统,完成百万私域用户引流
  9. Day704.Tomcat内存溢出的原因分析及调优 -深入拆解 Tomcat Jetty
  10. 解决Docker容器中无法使用vim命令