R语言机器学习与临床预测模型35--分类回归树

本内容为【科研私家菜】R语言机器学习与临床预测模型系列课程

R小盐准备介绍R语言机器学习与预测模型的学习笔记

你想要的R语言学习资料都在这里, 快来收藏关注【科研私家菜】


[图片上传失败...(image-fd5bf4-1648433074208)]

01 什么是分类回归树CART?

分类回归树(Classification and Regression Tree, CART)是一种经典的决策树,可以用来处理涉及连续数据的分类或者回归任务。分类回归树 既可以用于创建分类树 (classification tree),也可以用于创建回归树 (regression Tree)
回归树:用平方残差 (square of residual) 最小化准则来选择特征,叶子上是实数值
分类树:用基尼指数 (Gini index) 最小化准则来选择特征。叶子上是类别值

分类树与回归树的区别在样本的输出,如果样本输出是离散值,这是分类树;样本输出是连续值,这是回归树。分类树的输出是样本的类别,回归树的输出是一个实数。

分类模型:采用基尼系数的大小度量特征各个划分点的优劣。

回归模型:采用误差平方和度量。
CART算法步骤:

  1. 特征选择;
  2. 递归建立决策树;
  3. 决策树剪枝;

02 CART分类树算法

CART分类树算法使用基尼系数选择特征,基尼系数代表了模型的不纯度,基尼系数越小,不纯度越低,特征越好。这和信息增益(率)相反。
基尼系数
数据集D的纯度可用基尼值来度量

[图片上传失败...(image-199e9f-1648433074208)]
[图片上传失败...(image-47dc2d-1648433074208)]
[图片上传失败...(image-d9ac21-1648433074208)]

建立CART分类树步骤

[图片上传失败...(image-9dac9e-1648433074208)]


03 CART回归树算法

建立CART回归树步骤

[图片上传失败...(image-7a5d24-1648433074208)]

04 CART的R语言实现

####加载程序包
library(rpart) #classification and regression trees
library(partykit) #treeplots
library(MASS) #breast and pima indian data
library(ElemStatLearn) #prostate data
library(randomForest) #random forests
library(xgboost) #gradient boosting 
library(caret) #tune hyper-parameters

###########CART first
data(prostate)
prostate$gleason <- ifelse(prostate$gleason == 6, 0, 1)
pros.train <- subset(prostate, train == TRUE)[, 1:9]
pros.test = subset(prostate, train == FALSE)[, 1:9]

set.seed(123)
tree.pros <- rpart(lpsa ~ ., data = pros.train)
tree.pros$cptable
plotcp(tree.pros)
cp <- min(tree.pros$cptable[5, ])
prune.tree.pros <- prune(tree.pros, cp = cp)
plot(as.party(tree.pros))
plot(as.party(prune.tree.pros))
party.pros.test <- predict(prune.tree.pros, 
                           newdata = pros.test)
rpart.resid <- party.pros.test - pros.test$lpsa #calculate residual
mean(rpart.resid^2)

########CART breast cancer
data(biopsy)
biopsy <- biopsy[, -1]
names(biopsy) <- c("thick", "u.size", "u.shape", "adhsn", "s.size", "nucl", "chrom", "n.nuc", "mit", "class")
biopsy.v2 <- na.omit(biopsy)
set.seed(123) #random number generator
ind <- sample(2, nrow(biopsy.v2), replace = TRUE, prob = c(0.7, 0.3))
biop.train <- biopsy.v2[ind == 1, ] #the training data set
biop.test <- biopsy.v2[ind == 2, ] #the test data set
str(biop.test)

set.seed(123)
tree.biop <- rpart(class ~ ., data = biop.train)
tree.biop$cptable
cp <- min(tree.biop$cptable[3, ])
prune.tree.biop = prune(tree.biop, cp <- cp)
# plot(as.party(tree.biop))
plot(as.party(prune.tree.biop))
rparty.test <- predict(prune.tree.biop, newdata = biop.test,
                       type = "class")
table(rparty.test, biop.test$class)
(136+64)/209

[图片上传失败...(image-c9582e-1648433074208)]
[图片上传失败...(image-f5586c-1648433074208)]
[图片上传失败...(image-7e7f72-1648433074208)]
[图片上传失败...(image-557545-1648433074208)]

05 总结

数据集中会包含一些复杂的相互关系,使输入数据和目标变量之间存在非线性的关系。对于这种复杂关系的建模,一种可行的方式是使用树来对预测值分段,包括分段常数(回归树)和分段直线(模型树)。

CART算法可以用于构建二元树并处理离散型或连续型数据的切分。若使用不同的误差准则,就可以通过CART算法构建模型树和回归树。但是,该算法构建的树倾向于对数据过拟合,可采用剪枝的方法解决该问题。剪枝分为预剪枝(在树的构建过程中就就进行剪枝)和后剪枝(树构建完毕进行剪枝)。预剪枝更有效但需要用户定义一些参数。一般地,为了寻找最佳模型可以同时使用两种剪枝技术。

CART可以被看做决策树的升级版本,用于处理连续数据。

决策树的思想虽然比较粗暴,但是可解释很强、计算效率也比较高,应用非常广泛。如果配合剪枝、集成等策略,我们可以基于C4.5、CART这类模型构建出很多非常优秀的模型,比如随机森林、随机梯度上升树等等。

在构建决策树的过程中,我们评估了每一种特征,在对样本进行分组时的能力大小——这个分数可以作为特征工程中,特征选择的依据。因此,有时候我们也会使用决策树来做特征选择。

参考资料:

https://zhuanlan.zhihu.com/p/139523931
https://zhuanlan.zhihu.com/p/139519852


关注R小盐,关注科研私家菜(VX_GZH: SciPrivate),有问题请联系R小盐。让我们一起来学习 R语言机器学习与临床预测模型

你可能感兴趣的:(R语言机器学习与临床预测模型35--分类回归树)