实验一 使用sklearn的决策树实现iris鸢尾花数据集的分类
使用sklearn的决策树实现iris鸢尾花数据集的分类
要求:
建立分类模型,至少包含4个剪枝参数:max_depth、min_samples_leaf 、min_samples_split、max_features和criterion参数。
运用GridSearchCV,寻找出最优参数。
绘制出在不同的max_depth下的学习曲线。
步骤:
一、导入各种我们需要的模块或者数据集等
graphviz安装(安装完配置好路径还是不行的话重启一下电脑)
from sklearn import tree #导入树
from sklearn.tree import DecisionTreeClassifier #导入决策树分类器
from sklearn.datasets import load_iris #导入鸢尾花数据集
from sklearn.model_selection import train_test_split #分训练集测试集的类
from matplotlib import pyplot as plt #画图用的
from sklearn.model_selection import GridSearchCV #网格搜索
import pandas as pd
import graphviz #画决策树的,需要事先安装
二、将数据实例化,划分数据集和测试集
iris = load_iris() #将数据集实例化,别忘了括号
Xtrain,Xtest,Ytrain,Ytest = train_test_split(iris.data,iris.target,test_size=0.3) #将鸢尾花数据的特征矩阵和标签矩阵,按7:3的比例划分训练集和测试集,0.3是可以变的,也可以填0.4,注意X,Y的顺序
三、建立模型(三部曲:实例化、训练、评估)
clf = DecisionTreeClassifier() #实例化模型,括号不填criterion默认是‘gini’,也可以填criterion = 'entropy'
clf = clf.fit(Xtrain, Ytrain) #训练数据集
score = clf.score(Xtest, Ytest) #评估数据集
score #将评估结果打印出来,因为测试集和训练集划分的不同,可能每个人的结果也不同
1.PNG
四、画出决策树
feature_name = ['花萼长度','花萼宽度','花瓣长度','花瓣宽度'] #定义特征的名字,方便后面的阅读
dot_data = tree.export_graphviz(clf
,feature_names = feature_name
,class_names=["清风藤","云芝","锦葵"] #标签名字
,filled=True #框框填充颜色(可以不写)
,rounded=True #框框角是圆圆的(可以不写)
)
graph = graphviz.Source(dot_data) #导出树
graph
这就得到一棵原始的树
五、使用四个剪枝参数
clf = tree.DecisionTreeClassifier(max_depth=2 #最大深度是2,这个也可以填3或4试试看
,min_samples_leaf=5 #下一个叶子节点大于5会进行,小于5就不会再分
,min_samples_split=10 #最小分支节点,当前样本大于10才会分
,max_features=3 #最大特征数,有一个重要程度为0
)
clf = clf.fit(Xtrain, Ytrain)
score = clf.score(Xtest, Ytest)
score
可以把剪枝后的树画出来看看(代码和上面画树的一样)
2.png
dot_data = tree.export_graphviz(clf
,feature_names = feature_name
,class_names=["清风藤","云芝","锦葵"]
,filled=True
,rounded=True
)
graph = graphviz.Source(dot_data)
graph
六、绘制出在不同的max_depth下的学习曲线
test=[] #定义一个列表放分数
for i in range(10): #10次循环map_depth
clf = tree.DecisionTreeClassifier(max_depth=i+1)
clf = clf.fit(Xtrain, Ytrain)
score = clf.score(Xtest,Ytest)
test.append(score)
plt.plot(range(1,11),test,color="red") #横坐标是1-10,纵坐标是分数,颜色是红色
plt.xticks(range(1,11))#横坐标是1-10
plt.xlabel("max_depth") #横坐标标签
plt.ylabel("score") #纵坐标标签
plt.show() #展示画好的图(由图可知当map_depth为2时分数最高)
3.PNG
七、运用GridSearchCV,寻找出最优参数
parameters = {'criterion'
实验一 使用sklearn的决策树实现iris鸢尾花数据集的分类的更多相关文章
- sklearn CART决策树分类
sklearn CART决策树分类 决策树是一种常用的机器学习方法,可以用于分类和回归.同时,决策树的训练结果非常容易理解,而且对于数据预处理的要求也不是很高. 理论部分 比较经典的决策树是ID3.C ...
- 【sklearn决策树算法】DecisionTreeClassifier(API)的使用以及决策树代码实例 - 鸢尾花分类
决策树算法 决策树算法主要有ID3, C4.5, CART这三种. ID3算法从树的根节点开始,总是选择信息增益最大的特征,对此特征施加判断条件建立子节点,递归进行,直到信息增益很小或者没有特征时结束 ...
- 【机器学习】Iris Data Set(鸢尾花数据集)
[机器学习]Iris Data Set(鸢尾花数据集) 注:数据是机器学习模型的原材料,当下机器学习的热潮离不开大数据的支撑.在机器学习领域,有大量的公开数据集可以使用,从几百个样本到几十万个样本的数 ...
- sklearn提供的自带的数据集
sklearn 的数据集有好多个种 自带的小数据集(packaged dataset):sklearn.datasets.load_<name> 可在线下载的数据集(Downloaded ...
- 探索sklearn | 鸢尾花数据集
1 鸢尾花数据集背景 鸢尾花数据集是原则20世纪30年代的经典数据集.它是用统计进行分类的鼻祖. sklearn包不仅囊括很多机器学习的算法,也自带了许多经典的数据集,鸢尾花数据集就是其中之一. 导入 ...
- Python——sklearn提供的自带的数据集
sklearn提供的自带的数据集 sklearn 的数据集有好多个种 自带的小数据集(packaged dataset):sklearn.datasets.load_<name> 可在线下 ...
- [机器学习 ]PCA降维--两种实现 : SVD或EVD. 强力总结. 在鸢尾花数据集(iris)实做
PCA降维--两种实现 : SVD或EVD. 强力总结. 在鸢尾花数据集(iris)实做 今天自己实现PCA,从网上看文章的时候,发现有的文章没有搞清楚把SVD(奇异值分解)实现和EVD(特征值分解) ...
- 201871010110-李华 实验三 结对项目—《D{0-1}KP 实例数据集算法实验平台》项目报告
项目 内容 课程班级博客链接 班级博客 这个作业要求链接 作业要求 我的课程学习目标 (1)理解并掌握代码风格及设计规范:(2)通过任务3进行协作开发,尝试进行代码复审,在进行同伴复审的过程中体会结对 ...
- 201871030125-王芬 实验三 结对项目—《D{0-1}KP 实例数据集算法实验平台》项目报告
实验三 软件工程结对项目 项目 内容 课程班级博客链接 https://edu.cnblogs.com/campus/xbsf/2018CST 这个作业要求链接 https://www.cnblogs ...
随机推荐
- javascript 查找属性的过程
当执行 一个对象赋值操作的时候 js引擎会怎样处理呢??? 例如 有个foo对象 ,要进行这个操作 foo.a=2 1, 首先会在foo对象中查找,如果不存在a属性,就会去原型链上面找,如果原 ...
- google protocol buffer——protobuf的编码原理二
这一系列文章主要是对protocol buffer这种编码格式的使用方式.特点.使用技巧进行说明,并在原生protobuf的基础上进行扩展和优化,使得它能更好地为我们服务. 在上一篇文章中,我们主要通 ...
- Jeecg-Cloud学习之路(一)
首先,Spring-Cloud目前是行业的潮流,貌似不会就落后了,笔者为了不脱离大部队只能深入学习一下了. 其次.跳槽到一家公司,给公司推荐了Jeecg-Boot的开发平台,那么为了后面扩展为clou ...
- unity接入安卓SDK,与安卓相互通信
.接SDK是个什么样的活计? SDK的工作流程: 1. 从unity端出发,向安卓发起一系列的请求(unity call android). 2. 安卓端收到unity端调用,然后在具体调用SDK的一 ...
- 1008 Elevator (20 分)(模拟)
The highest building in our city has only one elevator. A request list is made up with N positive nu ...
- Spark3.0YarnCluster模式任务提交流程源码分析
1.通过spark-submit脚本提交spark程序 在spark-submit脚本里面执行了SparkSubmit类的main方法 2.运行SparkSubmit类的main方法 3.调用doSu ...
- JAVA,.NET项目开发难上手?力软敏捷开发框架解君愁
力软敏捷开发框架/快速开发平台是一款轻量化多语言可视化开发工具.秉持以“让开发变得简单”为宗旨,深耕软件平台, 拥有近10年的行业开发经验,经典的.NET软件产品已经服务超5000家客户,并得 ...
- centos7图形化安装oracle11g
#设置主机名 hostnamectl set-hostname oracle #yum安装 yum -y install unzip vim* bash-completion bash-complet ...
- Ubuntu 18.04 LTS 配置静态IPv6地址
学校的IPv4地址限制了校内IP访问,在家连校内机器只能先连接学校的VPN,十分不方便.好在学校没有对IPv6地址做限制,因此我们可以给自己的机器配置一个静态IPv6地址来绕过这个限制. 本机系统使用 ...
- 为什么互联网巨头们纷纷使用Git而放弃SVN?(内含Git核心命令与原理总结)
写在前面 最近发现很多小伙伴对于工作中的一些基本工具的使用还不是很了解,比如:Git这个分布式的代码管理仓库,很多小伙伴就不是很了解,或者说不是很熟悉.甚至有些小伙伴都没听说过Git,就只会用个SVN ...