鸢尾花卉数据集Iris是一类多重变量分析的数据集

  通过花萼长度,花萼宽度,花瓣长度,花瓣宽度4个属性预测鸢尾花卉属于(Setosa,Versicolour,Virginica)三个种类中的哪一类

  针对iris数据集实践决策树算法(C4.5、C5.0),并用交叉矩阵评估模型

  

  iris数据RStudio系统自带

  

  

Gary<-iris
#建立决策树模型,来预测鸢尾花的种类
#重命名变量名,将预测鸢尾花卉转换为class 通过前四个变量预测class属于哪一个类
Gary.names<-c('sepal length','sepal width','petal length','petal width', 'class')
names(Gary)<-Gary.names
#查看维度 150条数据 5维变量
dim(Gary)
#str()查看数据框中每个变量的属性
str(Gary)
#summary()提供最小值、最大值、四分位数和数值型变量的均值,以及因子向量和逻辑型向量的频数统计
summary(Gary)
#设定生成随机数的种子,种子是为了让结果具有重复性
set.seed(1)
#将数据集拆分为训练集和测试集,拆分比例为0.75
index<-sample(nrow(Gary),0.75*nrow(Gary),replace = F)
train<-Gary[index,]
test<-Gary[-index,]
library(C50)
#训练数据用于建立决策树模型
#测试集用于模型评估
mod<-C5.0(train[,-5],train[,5])
summary(mod)
#预测模型
pre1<-predict(mod,newdata=test,type='class')
tab<-table(pre1,test$class)
tab
sum(diag(tab))/sum(tab)

Gary.Script

实现过程

  将数据保存并重命名变量名

Gary<-iris

Gary.names<-c('sepal length','sepal width','petal length','petal width', 'class')

names(Gary)<-Gary.names

  dim():查看数据的维度

  str():查看数据框中每个变量的属性

  summary():提供最小值、最大值、四分位数和数值型变量的均值,以及因子向量和逻辑型向量的频数统计

> dim(Gary)        #150条数据 5维变量
[1] 150 5 > str(Gary)        #查看了前四个数据框的属性值
'data.frame': 150 obs. of 5 variables:
$ sepal length: num 5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ...
$ sepal width : num 3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 ...
$ petal length: num 1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 ...
$ petal width : num 0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2 0.2 0.1 ...
$ class : Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1 1 1 1 1 ... > summary(Gary)
sepal length sepal width petal length petal width class
Min. :4.300 Min. :2.000 Min. :1.000 Min. :0.100 setosa :50
1st Qu.:5.100 1st Qu.:2.800 1st Qu.:1.600 1st Qu.:0.300 versicolor:50
Median :5.800 Median :3.000 Median :4.350 Median :1.300 virginica :50
Mean :5.843 Mean :3.057 Mean :3.758 Mean :1.199
3rd Qu.:6.400 3rd Qu.:3.300 3rd Qu.:5.100 3rd Qu.:1.800
Max. :7.900 Max. :4.400 Max. :6.900 Max. :2.500

  设定生成随机数的种子,种子是为了让结果具有重复性

  set.seed()只对运行该命令后的第一次随机产生结果有效(伪随机)

set.seed(1)

  将数据集拆分为训练集和测试集,拆分比例为0.75

index<-sample(nrow(Gary),0.75*nrow(Gary),replace = F)
train<-Gary[index,]
test<-Gary[-index,]

  加载C50包

  C5.0算法则是C4.5算法的商业版本,较C4.5算法提高了运算效率,它加入了boosting算法,使该算法更加智能化

library(C50)

  训练数据用于建立决策树模型

  测试集用于模型评估

  C5.0(x, y, ...):其中x指定自变量(数据框或矩阵的形式),y指定因变量

> C5.0(train[,-5],train[,5])

Call:
C5.0.default(x = train[, -5], y = train[, 5]) Classification Tree     分类树
Number of samples: 112     样本树
Number of predictors: 4     预测树 Tree size: 3   树高:3  
Non-standard options: attempt to group attributes    #尝试分组属性

  

> summary(mod)

Call:
C5.0.default(x = train[, -5], y = train[, 5]) C5.0 [Release 2.07 GPL Edition]
------------------------------- Class specified by attribute `outcome'         #"class"属性指定的类 Read 112 cases (5 attributes) from undefined.data  #112例(5读取从undefined.data属性) Decision tree:                #决策树: petal length <= 1.9: setosa (38)          #花瓣长度≤1.9:setosa(38)
petal length > 1.9:                  #花瓣长度>1.9:
:...petal width <= 1.6: versicolor (38/1)     #petal宽度:≤1.6:云芝(38/1)
petal width > 1.6: virginica (36/2)      #花瓣宽度>1.6:锦葵(36/2) Evaluation on training data (112 cases):      #评估在训练数据(112例): Decision Tree                 #决策树
----------------
Size Errors                 #尺寸错误
  
3 3( 2.7%) <<              #3 3(2.7 %)<< (a) (b) (c) <-classified as     
---- ---- ----
38 (a): class setosa   
37 2 (b): class versicolor
1 34 (c): class virginica Attribute usage:                    #属性 100.00% petal length                #100%的花瓣长度
66.07% petal width                 #占66.07%花瓣宽度 Time: 0.0 secs

  预测鸢尾花卉属于哪一类

  用交叉矩阵评估模型

> pre1<-predict(mod,newdata=test,type='class')
> tab<-table(pre1,test$class)
> tab pre1 setosa versicolor virginica
setosa 12 0 0
versicolor 0 11 3
virginica 0 0 12

  预测了38组数据,其中35组数据正确,3组数据预测出错

  对角线上的数据实际值和预测值相同,非对角线上的值为预测错误的值

  评估模型(预测)的正确率

sum(diag(tab))/sum(tab)
[1] 0.9210526

    diag(x = 1, nrow, ncol)

    diag(x) <- value

  解析:

    x:一个矩阵,向量或一维数组,或不填写。

    nrow, ncol:可选 行列。

    value :对角线的值,可以是一个值或一个向量

R_Studio(决策树算法)鸢尾花卉数据集Iris是一类多重变量分析的数据集【精】的更多相关文章

  1. 转载:scikit-learn学习之决策树算法

    版权声明:<—— 本文为作者呕心沥血打造,若要转载,请注明出处@http://blog.csdn.net/gamer_gyt <—— 目录(?)[+] ================== ...

  2. R语言 决策树算法

    定义: 决策树(Decision Tree)是在已知各种情况发生概率的基础上,通过构成决策树来求取净现值的期望值大于等于零的概率,评价项目风险,判断其可行性的决策分析方法,是直观运用概率分析的一种图解 ...

  3. 【sklearn决策树算法】DecisionTreeClassifier(API)的使用以及决策树代码实例 - 鸢尾花分类

    决策树算法 决策树算法主要有ID3, C4.5, CART这三种. ID3算法从树的根节点开始,总是选择信息增益最大的特征,对此特征施加判断条件建立子节点,递归进行,直到信息增益很小或者没有特征时结束 ...

  4. scikit-learn决策树算法类库使用小结

    之前对决策树的算法原理做了总结,包括决策树算法原理(上)和决策树算法原理(下).今天就从实践的角度来介绍决策树算法,主要是讲解使用scikit-learn来跑决策树算法,结果的可视化以及一些参数调参的 ...

  5. 4-Spark高级数据分析-第四章 用决策树算法预测森林植被

    预测是非常困难的,更别提预测未来. 4.1 回归简介 随着现代机器学习和数据科学的出现,我们依旧把从“某些值”预测“另外某个值”的思想称为回归.回归是预测一个数值型数量,比如大小.收入和温度,而分类则 ...

  6. 决策树算法实现(train+test,matlab) 转

    原文:http://www.zgxue.com/198/1985544.html 华电北风吹 天津大学认知计算与应用重点实验室 修改日期:2015/8/15 决策树是一种特别简单的机器学习分类算法.决 ...

  7. [转]机器学习——C4.5 决策树算法学习

    1. 算法背景介绍 分类树(决策树)是一种十分常用的分类方法.它是一种监管学习,所谓监管学习说白了很简单,就是给定一堆样本,每个样本都有一组属性和一个类别,这些类别是事先确定的,那么通过学习得到一个分 ...

  8. 决策树算法原理(CART分类树)

    决策树算法原理(ID3,C4.5) CART回归树 决策树的剪枝 在决策树算法原理(ID3,C4.5)中,提到C4.5的不足,比如模型是用较为复杂的熵来度量,使用了相对较为复杂的多叉树,只能处理分类不 ...

  9. 决策树算法原理(ID3,C4.5)

    决策树算法原理(CART分类树) CART回归树 决策树的剪枝 决策树可以作为分类算法,也可以作为回归算法,同时特别适合集成学习比如随机森林. 1. 决策树ID3算法的信息论基础   1970年昆兰找 ...

随机推荐

  1. linux小白家教学<一>

    <数据中心规划与实施> 教学大纲  编写人:Allen 一. 课程教学内容及目标: (一) 知识目标 1.掌握企业级LINUX部署以及相关配置: 2.掌握LINUX操作系统基本的创建.删除 ...

  2. 为什么单线程的Redis却能支撑高并发

    Redis的高并发和快速原因 redis是基于内存的,内存的读写速度非常快: 核心是基于非阻塞的IO多路复用机制: redis是单线程的,反而省去了很多上下文切换线程的时间: 为什么Redis是单线程 ...

  3. 【Activiti】为每一个流程绑定相应的业务对象的2种方法

    方式1: 在保存每一个流程实例时,设置多个流程变量,通过多个流程变量的组合来过滤筛选符合该组合条件的流程实例,以后在需要查询对应业务对象所对应的流程实例时,只需查询包含该流程变量的值的流程实例即可. ...

  4. vue配置路由时报错 Error in render: "RangeError: Maximum call stack size exceeded"

    虽然标题写的是配置路由报错,最终也是通过修改路由解决的,但是导致报错的还有一个主要因素,是因为我增加了一个功能“页面刷新时,根据url高亮左侧导航”,如下图: 1.页面刷新,根据url高亮左侧导航代码 ...

  5. 64位Win7安装Oracle12C临时位置权限错误解决方案

    今天装备安装Oracle12C体验一下,结果遇到问题:请确保当前用户具有访问临时位置所需的权限,无法继续安装,上网查了一下,解决方案如下:  第一步:  控制面板>所有控制面板项>管理工具 ...

  6. CDH5.16.1的Yarn提交任务默认资源分配

    1 同时运行5个Spark任务的资源分配截图 2 每个任务占用3个Container 3个core以及4.5GB内存 也就是说一个Container需要 1个core 以及 512MB的内存 如果资源 ...

  7. 构建docker基本镜像

    1.准备: 创建一个目录oldboy-hello 2.编写Dockerfile 内容如下,只有三行 FROM scratch ADD hello / CMD ["/hello"] ...

  8. 如何使用python生成gif

    如何使用python生成gif? 在我的文件夹里面有很多图片,我们如何将其合成一个gif呢?可以使用PIL模块,这个模块在我的"python图像处理"板块中有详细介绍. # -*- ...

  9. Python内部执行过程

    一.编译过程概述 当我们执行Python代码的时候,在Python解释器用四个过程“拆解”我们的代码,最终被CPU执行返回给用户. 首先当用户键入代码交给Python处理的时候会先进行词法分析,例如用 ...

  10. spfa算法及判负环详解

    spfa     (Shortest Path Faster Algorithm) 是一种单源最短路径的算法,基于Bellman-Ford算法上由队列优化实现. 什么是Bellman_Ford,百度内 ...