ML(4.1): R C4.5
决策树模型中最为流行的是C4.5算法, 该类算法70年代末,J Ross Quinlan提出ID3算法,此算法的目的在于减少树的深度。但是忽略了叶子数目的研究。1993年,Quinlan本人以ID3算法为基础研究出C4.5/C5.0算法,C4.5算法在ID3算法的基础上进行了改进,对于预测变量的缺值处理、剪枝技术、派生规则等方面作了较大的改进,既适合于分类问题,又适合于回归问题。在R包中,有如下的算法包可完成C4.5 分类计算,如下,分别以鸢尾花数据集为例进行验证
- partykit::ctree
- RWeka::J48
- C50:C5.0
- 总结及对比分析
partykit::ctree
- 所需安装的R包如下:
install.packages("RWeka")
install.packages("party")
install.packages("partykit") - 数据集iris包含五个指标萼片长度、萼片宽度、花瓣长度、花瓣宽度、三种花类型, 建立模型
set.seed(1234)
#从iris数据集中随机抽70%定义为训练数据集,30%为测试数据集
ind <- sample(2, nrow(iris), replace=TRUE, prob=c(0.7, 0.3))
trainData <- iris[ind==1,]
testData <- iris[ind==2,]
library(party)
#建立决策树模型预测花的种类
myFormula <- Species ~ Sepal.Length + Sepal.Width + Petal.Length + Petal.Width
iris_ctree <- ctree(myFormula, data=trainData)
# 查看预测的结果
table(predict(iris_ctree), trainData$Species) 结果如下:
> table(predict(iris_ctree), trainData$Species) setosa versicolor virginica
setosa 40 0 0
versicolor 0 37 3
virginica 0 1 31对照数据结构看决策图
> #输出决策树图
> head(trainData,10)
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1 5.1 3.5 1.4 0.2 setosa
2 4.9 3.0 1.4 0.2 setosa
3 4.7 3.2 1.3 0.2 setosa
4 4.6 3.1 1.5 0.2 setosa
6 5.4 3.9 1.7 0.4 setosa
7 4.6 3.4 1.4 0.3 setosa
8 5.0 3.4 1.5 0.2 setosa
9 4.4 2.9 1.4 0.2 setosa
10 4.9 3.1 1.5 0.1 setosa
11 5.4 3.7 1.5 0.2 setosa
> plot(iris_ctree)输出结果图如下:
- 对测试集进行预测
> testPred <- predict(iris_ctree, newdata = testData)
> table(testPred, testData$Species) testPred setosa versicolor virginica
setosa 10 0 0
versicolor 0 12 2
virginica 0 0 14 在测试集上结果看模型有较好的泛化能力
RWeka::J48
- RWeka包在上例已经安装,测试及训练数据见上例
library(RWeka)
library(party)
#训练与测试样本见上例
m1<-J48(Species~.,data=trainData)
table(trainData$Species,predict(m1))
plot(m1) - m1结果如下:
- 预测结果
> testPred <- predict(m1, newdata = testData)
> table(testPred, testData$Species) testPred setosa versicolor virginica
setosa 10 0 0
versicolor 0 12 1
virginica 0 0 15 从结果上看,貌似比ctree训练算法稍强点, 需大的数据来深入对比
C50:C5.0
- C5.0 是Ross Quinlan 1998年提出来的,对C4.5做了很多改进,目前他是作为商业机密在售卖。该算法引入了Boosting的算法框架,比前面提到的算法性能更快,对内存的使用更有效,决策树更小等等。更详细的请访问他的个人主页查阅文章http://www.rulequest.com/see5-unix.html和http://rulequest.com/download.html%20
- 用法:C5.0(formula, data, weights, subset, na.action = na.pass, ...)
> library(C50)
> #ls("package:C50")
> #训练与测试样本见上例
> m_c50 <- C5.0(Species ~., data = trainData)
> C5imp(m_c50)
Overall
Petal.Length 100.00
Petal.Width 64.29
Sepal.Length 0.00
Sepal.Width 0.00 plot(m_c50) 输出图结果如下:
- 从图上可发现建树差异,预测结果正确率:
> c50_pred <- predict(m_c50,newdata = testData)
> table(c50_pred, testData$Species) c50_pred setosa versicolor virginica
setosa 10 0 0
versicolor 0 12 2
virginica 0 0 14
总结及对比分析
- 上几节仅是对不同包的算法进行了介绍,数据量太小,比较不出在资源占用、正确率方面的差异,下面以较大数据的情况,对这三个包的结果进行对比分析,正确率如下:
- 其中C50算法中提供的函数,最重要的参数如下:
> myFormula <- Type ~.
> m.C50 <- C5.0(myFormula, data = mytrain)
> C5imp(m.C50)
Overall
DV 100.00
LV 66.07
LT 51.07 - 对比资源占用如下图:
- 对比正确率
ML(4.1): R C4.5的更多相关文章
- ML: 聚类算法R包-对比
测试验证环境 数据: 7w+ 条,数据结构如下图: > head(car.train) DV DC RV RC SOC HV LV HT LT Type TypeName 1 379 85.09 ...
- ML: 聚类算法R包-模糊聚类
1965年美国加州大学柏克莱分校的扎德教授第一次提出了'集合'的概念.经过十多年的发展,模糊集合理论渐渐被应用到各个实际应用方面.为克服非此即彼的分类缺点,出现了以模糊集合论为数学基础的聚类分析.用模 ...
- ML: 聚类算法R包 - 模型聚类
模型聚类 mclust::Mclust RWeka::Cobweb mclust::Mclust EM算法也称为期望最大化算法,在是使用该算法聚类时,将数据集看作一个有隐形变量的概率模型,并实现模型最 ...
- ML: 聚类算法R包-网格聚类
网格聚类算法 optpart::clique optpart::clique CLIQUE(Clustering In QUEst)是一种简单的基于网格的聚类方法,用于发现子空间中基于密度的簇.CLI ...
- ML: 聚类算法R包-层次聚类
层次聚类 stats::hclust stats::dist R使用dist()函数来计算距离,Usage: dist(x, method = "euclidean", di ...
- ML: 聚类算法R包-K中心点聚类
K-medodis与K-means比较相似,但是K-medoids和K-means是有区别的,不一样的地方在于中心点的选取,在K-means中,我们将中心点取为当前cluster中所有数据点的平均值, ...
- ML(4.3): R Random Forest
随机森林模型是一种数据挖掘模型,常用于进行分类预测.随机森林模型包含多个树形分类器,预测结果由多个分类器投票得出. 决策树相当于一个大师,通过自己在数据集中学到的知识对于新的数据进行分类.俗话说得好, ...
- ML(4.2): R CART
CART模型 :即Classification And Regression Trees.它和一般回归分析类似,是用来对变量进行解释和预测的工具,也是数据挖掘中的一种常用算法.如果因变量是连续数据,相 ...
- ML: 聚类算法R包 - 密度聚类
密度聚类 fpc::dbscan fpc::dbscan DBSCAN核心思想:如果一个点,在距它Eps的范围内有不少于MinPts个点,则该点就是核心点.核心和它Eps范围内的邻居形成一个簇.在一个 ...
随机推荐
- POJ 2485 最小生成树
2333333333 又是水题.prim模板直接水过.求最小生成树里的最大的边的权值. 附代码:// 如果我木猜错的话.是要求最小生成树的最大边值. #include<stdio.h>#i ...
- Maven 入门篇 ( 上 )
写这个 maven 的入门篇是因为之前在一个开发者会的动手实验中发现挺多人对于 maven 不是那么了解,所以就有了这个想法.这个入门篇分上下两篇.本文着重动手,用 maven 来构建运行 hello ...
- POJ 1947 Rebuilding Roads 树形dp 难度:2
Rebuilding Roads Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 9105 Accepted: 4122 ...
- Python Face Recognition 实现人脸识别
一.Face Recognition软件包 我们的人脸识别基于face_recognition库.face_recognition基于dlib实现,用深度学习训练数据,模型准确率高达99.38%. 人 ...
- XE7 Unit scope names
今天编译RM报表 7.0 for XE7 ,build设计时包,提示 {$IFDEF JPEG}, JPEG{$ENDIF} 没有找到 JPEG.DCU,这个应该是XE7自带. 后来 在项目选项里,编 ...
- Flask初级(二)为flash创建路由,访问路径。
Project name :Flask_Plan 上一篇文章,我们创建了默认的flask项目,也可以运行起来. 但是只有一个首页,只显示一个hello world. 现在我们创建访问路由,也就是访问地 ...
- ThreadPoolTaskExecutor多线程使用,及线程池配置
1.配置 ThreadPoolTaskExecutor bean <?xml version="1.0" encoding="UTF-8"?> &l ...
- (转)git合并多个commit
原文地址:http://platinhom.github.io/2016/01/02/git-combine_commit/ 有时commit多了看着会不爽.所以想合并掉一些commit. 这里是最简 ...
- Ubuntu 搭建Ghost1.0博客系统
最近想使用Ghost搭建自己的博客网站,网上搜索了下大多都是1.0之前版本搭建的文章,但是Ghost1.0版本已经可用好一段时间了,所以决定根据官方文档搭建Ghost1.0版本的博客系统. 下面开始一 ...
- JMeter中各种请求格式--aduocd的博客
背景:1.在JMeter的HTTP请求的测试中,经常会使用到不同的请求格式.常用的格式如,json,form-data,x-www-form-urlencoded,multipart/form-dat ...