京公网安备 11010802034615号
经营许可证编号:京B2-20210330
用R软件做分类树和回归树(CART)
决策树(Decision Tree)又称为判定树,是运用于分类的一种树结构。其中的每个内部结点(internal node)代表对某个属性的一次测试,每条边代表一个测试结果,叶结点(leaf)代表某个类(class)或者类的分布(class distribution),最上面的结点是根结点。决策树提供了一种展示类似在什么条件下会得到什么值这类规则的方法。
构造决策树是采用自上而下的递归构造方法。以多叉树为例,如果一个训练数据集中的数据有几种属性值,则按照属性的各种取值把这个训练数据集再划分为对应的几个子集(分支),然后再依次递归处理各个子集。反之,则作为叶结点。
决策树构造的结果是一棵二叉或多叉树,它的输入是一组带有类别标记的训练数据。二叉树的内部结点(非叶结点)一般表示为一个逻辑判断,如形式为(a = b)的逻辑判断,其中a 是属性,b是该属性的某个属性值;树的边是逻辑判断的分支结果。多叉树(ID3)的内部结点是属性,边是该属性的所有取值,有几个属性值,就有几条边。树的叶结点都是类别标记。
使用决策树进行分类分为两步:
第1步:利用训练集建立并精化一棵决策树,建立决策树模型。这个过程实际上是一个从数据中获取知识,进行机器学习的过程。
第2步:利用生成完毕的决策树对输入数据进行分类。对输入的记录,从根结点依次测试记录的属性值,直到到达某个叶结点,从而找到该记录所在的类。
问题的关键是建立一棵决策树。这个过程通常分为两个阶段:
第一阶段,建树(Tree Building):决策树建树算法见下,这是一个递归的过程,最终将得到一棵树。
第二阶段,剪枝(Tree Pruning):剪枝的目的是降低由于训练集存在噪声而产生的起伏。
分类树和回归树(CART:Classification and Regression)
描述给定预测变量X后,变量Y条件分布的一种方法,使用二叉树将预测空间递归地划分为若干个子集,Y在这些子集上的分布是连续均匀的,树中的叶节点对应着划分的不同区域,划分是由与每个内部节点相关的分支规则(Splitting rules)确定的.通过从树的根节点逐渐到叶节点移动,每个预测样本被赋予一个叶节点,Y在该节点上的分布也被确定。利用CART进行预测同样需要一个学习样本(训练样本)对CART进行建树和评估,然后利用其进行预测。以下面的数据结构为例:
其中,
为属性变量,可以是连续或离散的;
为类别变量,当
为离散时该模型为分类树,当
为有序变量时,模型为回归树。
根据给定的训练样本
进行建模的步骤主要有:
构建树
,使得
中每个叶节点要么很小(节点内所含样本数小于给定的值
),要么是纯节点(节点内部样本的
属性一样),要么只有唯一属性变量作为分支选择。
CART的原理或细节,相关数据挖掘或机器学习书籍都有阐述,另外,百度了相关博客,个人感觉RaySaint的博客把握了CART的关键因素。详见:
http://underthehood.blog.51cto.com/2531780/564685
R软件完成CART
#1调用rpart包进行CART建模
library(rpart)
#1前列腺癌数据stagec
head(stagec)
progstat = factor(stagec$pgstat, levels = 0:1, labels = c("No", "Prog"))
#2建树,method主要有 "anova", "poisson", "class" "exp"。通常作生存分析选exp,因变量是因子变量选class,作poisson回归选poisson,其他情况通常选择anova;
cfit = rpart(progstat ~ age + eet + g2 + grade + gleason + ploidy,data = stagec, method ='class')
#输出结果
print(cfit)
#作树图
par(mar = rep(0.1, 4))
plot(cfit)
#添加标签
text(cfit)
#对分类结果作混淆矩阵
(temp = with(stagec, table(cut(grade, c(0, 2.5, 4)),
cut(gleason, c(2, 5.5, 10)),exclude = NULL)))
#3剪枝
cfit2=prune(cfit,cp=.02)
plot(cfit2)
text(cfit2)
printcp(cfit2)#输出剪枝表格
summary(cfit2)#输出CART完整细节,包括printcp内容
#4rpart中相关参数,rpart(,..,parms=())
"Anova"分类没有参数
"Poisson"分类只有单一参数:率的先验分布的变异系数,默认为1
"Exp"分类参数同poisson
"Class"分类包含的参数最为复杂,包括先验概率、损失矩阵或分类指标(Gini或Information)。#4.1比较Gini和Information分类指标,以自带汽车消费数据为例cu.summary
head(cu.summary)#查阅数据
fit1 = rpart(Reliability ~ Price + Country + Mileage + Type, data = cu.summary, parms = list(split = 'gini'))
fit2 = rpart(Reliability ~ Price + Country + Mileage + Type,data = cu.summary, parms = list(split = 'information'))
par(mfrow = c(1,2), mar = rep(0.1, 4))
plot(fit1, margin = 0.05); text(fit1, use.n = TRUE, cex = 0.8)
plot(fit2, margin = 0.05); text(fit2, use.n = TRUE, cex = 0.8)
#4.2比较parms中的先验概率(prior)和损失矩阵(loss)参数,以rpart自带驼背数据kyphosis为例
#查阅数据
head(kyphosis)
#默认的先验概率为Kyphosis两类的频率比fit1 = rpart(Kyphosis ~ Age + Number + Start, data = kyphosis)#定义先验概率prior=c(..,..)fit2 = rpart(Kyphosis ~ Age + Number + Start, data = kyphosis, parms = list(prior = c(0.65, 0.35)))
##loss参数设置,首先一个损失矩阵lmat
lmat = matrix(c(0,3, 4,0), nrow = 2, ncol = 2, byrow = FALSE)fit3 = rpart(Kyphosis ~ Age + Number + Start, data = kyphosis,parms = list(loss = lmat))par(mfrow = c(1, 3), mar = rep(0.1, 4))plot(fit1); text(fit1, use.n = TRUE, all = TRUE, cex = 0.8)plot(fit2); text(fit2, use.n = TRUE, all = TRUE, cex = 0.8)plot(fit3); text(fit3, use.n = TRUE, all = TRUE, cex = 0.8)
二、回归树
1.通常默认anova用来作回归树,以汽车消费数据car90为例,该数据包括34个变量110条观察值。
#查阅car90数据
head(car90);str(car90)
#剔除轮胎尺寸、型号等3个因素型变量(factor variable):"Rim", "Tires", "Model2"
cars = car90[, -match(c("Rim", "Tires", "Model2"), names(car90))]#建立回归树模型carfit = rpart(Price/1000 ~ ., data=cars)carfit;printcp(carfit);summary(carfit,cp=0.1)plot(carfit);text(carfit)
#图示不同分类的误差,par(mfrow=c(1,2)); rsq.rpart(carfit)
2.Poisson回归树
以数据solder为例
#查看数据,变量属性
head(solder);str(solder)
#建立poisson回归树
sfit = rpart(skips ~ Opening + Solder + Mask + PadType + Panel,data = solder, method = 'poisson',control = rpart.control(cp = 0.05, maxcompete = 2))sfit;printcp(sfit);summary(sfit,cp=.1)
3.生存模型回归树
#以前列腺癌数据stagec为例,调用survival包进行生存分析
library(survival)temp = coxph(Surv(pgtime, pgstat) ~ 1, stagec)newtime = predict(temp, type = 'expected')
pfit <- rpart(Surv(pgtime, pgstat) ~ age + eet + g2 + grade +gleason + ploidy, data = stagec)
pfit2 <- prune(pfit, cp = 0.016)#进行减枝
par(mar = rep(0.2, 4))
plot(pfit2, uniform = TRUE, branch = 0.4, compress = TRUE)
text(pfit2, use.n = TRUE)
数据分析咨询请扫描二维码
若不方便扫码,搜微信号:CDAshujufenxi
在数据分析、机器学习的实操场景中,聚类分析与主成分分析(PCA)是两种高频使用的统计与数据处理方法。二者常被用于数据预处理 ...
2026-02-24在聚类分析的实操场景中,K-Means算法因其简单高效、易落地的特点,成为处理无监督分类问题的首选工具——无论是用户画像分层、 ...
2026-02-24数字化浪潮下,数据已成为企业核心竞争力,“用数据说话、用数据决策”成为企业发展的核心逻辑。CDA(Certified Data Analyst) ...
2026-02-24CDA一级知识点汇总手册 第五章 业务数据的特征、处理与透视分析考点52:业务数据分析基础考点53:输入和资源需求考点54:业务数 ...
2026-02-23CDA一级知识点汇总手册 第四章 战略与业务数据分析考点43:战略数据分析基础考点44:表格结构数据的使用考点45:输入数据和资源 ...
2026-02-22CDA一级知识点汇总手册 第三章 商业数据分析框架考点27:商业数据分析体系的核心逻辑——BSC五视角框架考点28:战略视角考点29: ...
2026-02-20CDA一级知识点汇总手册 第二章 数据分析方法考点7:基础范式的核心逻辑(本体论与流程化)考点8:分类分析(本体论核心应用)考 ...
2026-02-18第一章:数据分析思维考点1:UVCA时代的特点考点2:数据分析背后的逻辑思维方法论考点3:流程化企业的数据分析需求考点4:企业数 ...
2026-02-16在数据分析、业务决策、科学研究等领域,统计模型是连接原始数据与业务价值的核心工具——它通过对数据的规律提炼、变量关联分析 ...
2026-02-14在SQL查询实操中,SELECT * 与 SELECT 字段1, 字段2,...(指定个别字段)是最常用的两种查询方式。很多开发者在日常开发中,为了 ...
2026-02-14对CDA(Certified Data Analyst)数据分析师而言,数据分析的核心不是孤立解读单个指标数值,而是构建一套科学、完整、贴合业务 ...
2026-02-14在Power BI实操中,函数是实现数据清洗、建模计算、可视化呈现的核心工具——无论是简单的数据筛选、异常值处理,还是复杂的度量 ...
2026-02-13在互联网运营、产品迭代、用户增长等工作中,“留存率”是衡量产品核心价值、用户粘性的核心指标——而次日留存率,作为留存率体 ...
2026-02-13对CDA(Certified Data Analyst)数据分析师而言,指标是贯穿工作全流程的核心载体,更是连接原始数据与业务洞察的关键桥梁。CDA ...
2026-02-13在机器学习建模实操中,“特征选择”是提升模型性能、简化模型复杂度、解读数据逻辑的核心步骤——而随机森林(Random Forest) ...
2026-02-12在MySQL数据查询实操中,按日期分组统计是高频需求——比如统计每日用户登录量、每日订单量、每日销售额,需要按日期分组展示, ...
2026-02-12对CDA(Certified Data Analyst)数据分析师而言,描述性统计是贯穿实操全流程的核心基础,更是从“原始数据”到“初步洞察”的 ...
2026-02-12备考CDA的小伙伴,专属宠粉福利来啦! 不用拼运气抽奖,不用复杂操作,只要转发CDA真题海报到朋友圈集赞,就能免费抱走实用好礼 ...
2026-02-11在数据科学、机器学习实操中,Anaconda是必备工具——它集成了Python解释器、conda包管理器,能快速搭建独立的虚拟环境,便捷安 ...
2026-02-11在Tableau数据可视化实操中,多表连接是高频操作——无论是将“产品表”与“销量表”连接分析产品销量,还是将“用户表”与“消 ...
2026-02-11