lyao222lll的个人博客分享 http://blog.sciencenet.cn/u/lyao222lll

博文

决策树的分类模型以及对重要变量的选择及R操作

已有 2155 次阅读 2020-2-4 20:48 |个人分类:R统计分析|系统分类:科研笔记| _R语言, _机器学习, _分类

决策树的分类模型以及对重要变量的选择及R操作

 

何为决策树,比方说下面这种。

1.png

当然这个判断依据是我瞎画的,真实情况可能不是这样,看看就好别较真……总之在这个非常时期,好好听党和政府的话,尽可能不要外出就可以了。

尽管内心OS

2.png

 

好了回到正题,上述就展示了一个简单的决策树,根据某人是否有发热症状或者有无接触可疑人员等,是否需要被强制隔离。在每个节点处都有一个二元判别项,根据是否满足条件被划分到不同的情况中。

决策树(Decision Tree)是一种机器学习方法,是数据挖掘领域中的常用模型。其基本思想是对预测变量进行二元分离,从而构造一棵可用于预测新样本单元所属类别的树。

决策树即可作为分类器,基于一组预测变量预测一个分类结果,通过识别对象属性划分其归属;也可作为变量选择模型来使用,它的层次化结构可以在拟合出的树结构中揭示出每个被选中的变量的相对重要性。

本篇展示使用R构建决策树,实现对象分类,以及选择重要变量的方法。

 


数据集


威斯康星州乳腺癌数据集,包含699个细胞组织样本,由空心细针在皮下肿瘤组织中抽得。其中458个(65.5%)为良性样本,241个(34.5%)为恶性样本。

#威斯康星州乳腺癌数据集
breast <- read.csv('http://archive.ics.uci.edu/ml/machine-learning-databases/breast-cancer-wisconsin/breast-cancer-wisconsin.data',na.strings = '?', header = FALSE)
names(breast) <- c('ID', 'clumpThickness', 'sizeUniformity', 'shapeUniformity', 'maginalAdhesion',
    'singleEpithelialCellSize', 'bareNuclei', 'blandChromatin', 'normalNucleoli', 'mitosis', 'class')

breast$class <- as.factor(breast$class)
str(breast)

image.png

数据集中共有11个变量,包括:

ID:样本ID

clumpThickness:肿瘤厚度;

sizeUniformity:细胞大小的均匀性;

shapeUniformity:细胞形状的均匀性;

maginalAdhesion:边际附着力;

singleEpithelialCellSize:单个上皮细胞大小;

bareNuclei:裸核,其中有16个样本中有缺失数据并用“?”表示;

blandChromatin:乏味染色质

normalNucleoli:正常核;

mitosis:有丝分裂;

class:样本类别,2代表良性样本(共458个),4代表为恶性样本(共241个)。

除样本ID和样本类别外,其余9个变量均可视为与判别恶性肿瘤相关的细胞特征,特征以得分为1(最接近良性)至10(最接近病变)之间的整数来表示。

 

任一变量都不能单独作为判别良性或恶性肿瘤的标准,因此接下来综合考虑这9种细胞特征并进行建模,目的是找到一种合适的变量组合用以判断被检者是否患有乳腺癌,实现对恶性肿瘤的准确预测。

#将总数据集分为训练集和测试集
set.seed(123)
select_train <- sample(699, 699*0.7)
 
breast_train <- breast[select_train, ]
breast_test <- breast[-select_train, ]

首先将总数据集分为两部分,70%的样本(行)用作训练集构建预测模型,30%的样本(行)作为测试集评估模型性能。

 


经典决策树



决策树模型构建


rpart包的经典决策树以一个二元输出变量(良性或恶性肿瘤类别)和一组预测变量(对应9种细胞特征)为基础,执行如下过程。

1)综合衡量各变量,选定一个最佳判别值(分割点)将所有对象分为两类,使两类中的纯度最大化。对于上述数据而言,则需保证一类中良性样本尽可能多,另一类中恶性样本尽可能多;

2)对于获得的每一个子类别,继续执行(1);

3)重复(1)(2)过程,直到子类别所含样本数过低无法继续细分,或者类间边间模糊使得无法确定分类的最佳分割点为止,获得最终集;

4)最终集中的子类别即终端节点(terminal node),可用于判断对象归属:对示例数据集中的任一样本执行决策树划分到终端节点,即可预测其所属类别。

#rpart 包的决策树方法
library(rpart)
 
#生成树,详情 ?rpart
#~. 是使用所有变量的简写,等同于 clumpThickness+sizeUniformity+...+normalNucleoli+mitosis
#选项 method='class' 是指拟合一个分类模型,
set.seed(123)
tree <- rpart(class ~ ., data = breast_train, method = 'class', parms = list(split = 'information'))
tree
 
#可视化决策树
plot(tree, margin = 0.1)
text(tree, cex = 0.5)
 
#决策树划分细节概要,各个分支结构等
summary(tree)

树状图显示了决策树的结构。

在模型公式中使用了全部的9个预测变量,通过拟合模型,7个保留在决策树中。可知这7个变量是相对而言比较重要的。

在决策树中,同一变量可以多次出现在不同的节点处,以不同的判别条件存在。

4.png

最顶端处的根节点代表的是整个数据集,每个节点位置处,给出了将父节点划分为两个子节点时的变量和标准。对于任意的对象,利用分解标准判别各变量的观测值,引导从根节点出发最终导向某个终端节点,最终实现对象的分类。

例如,根据变量sizeUniformity的值在2.5阈值处,将预测集分为两个子集合;对于sizeUniformity<2.5的情形,继续以变量bareNuclei是否小于2.5为标准进一步划分;以此类推,最终确定样本来源于良性(2)或恶性(4)肿瘤。

5.png

 

决策树修剪


有些情况下,所得的树可能过大,也就是模型过于复杂,导致分类识别困难且会带来较高错误率,此时需要剪枝。

换句话说,并非所有变量都有助于预测模型。就本文的示例而言,可能某些细胞特征在良性或肿瘤样本之间相差并不是很明显,它们对区分样本的肿瘤类别的贡献度并不高。这些变量也通常位于树的末端分支中,可以考虑将它们去除,使用更显著更重要的细胞特征就足以预测肿瘤类别,实现样本分类。

因此基于树的模型也可作为一种选择重要变量的方法。

 

CP表中汇总了不同大小的树对应的预测误差,可用于辅助设定最终的树的大小。

#CP 表,显示了不同大小的树对应的预测误差
#names(tree)
tree$cptable

6.png

模型复杂度参数(CP)用于惩罚过大的树。CP值越小模型越复杂,模型的复杂性与树模型的大小直接相关,模型越复杂树枝越多。树的大小即分支数(nsplit),有n个分支的树将有n+1个终端节点。

rel error为训练集中各种树对应的误差。要评价树模型对数据的拟合程度,根节点误差(响应变量数据的平均的离差平方和)可作为参考。模型的相对误差定义为模型的平均剩余离差平方和与根节点误差的比值。例如一个只分解了一次的模型,它的相对误差为0.1989,意味着剩余方差只占根节点误差的19.89%,即模型可以解释响应变量数据中80.11%的总离差平方和。

xerror为基于训练样本所得的10折交叉验证误差,xstd栏为交叉验证误差的标准差,可用于衡量模型预测的准确性。所谓10折,即将原始数据随机划分为10个(默认值)子集合的模拟过程来完成:9个子集合用于拟合模型,1个子集合作为检验数据集评估模型,重复10次该过程,每次采用不同的检验集合。

 

接下来画出交叉验证误差与复杂度参数的关系图,对于所有交叉验证误差在最小交叉验证误差一个标准差范围内的树,最小的树即最优的树。

#交叉验证误差与复杂度参数的关系图
plotcp(tree)

7.png

最优树的选择通常考虑两点。

1)误差首先会随树的分支增加而减少,开始时下降非常明显,但到了特定范围处,下降幅度将不再有显著变化,甚至有所增加。首先需要明确一段显著的“拐点”区域,例如上图,大约在5个分支时出现一段“拐点”。

2)也并非一定要选择具有最小误差的树,模型通常会考虑简约性原则。上图显示尽管在分支为7时具有最小误差,但这种精度在分支4后提升空间甚微。

综合衡量上述两点,分支(即终端节点)为4时是最合适的,即3次分割后的树可作为最优树来看待。此时的复杂度参数(CP)值约0.0249,可据此剪掉不重要的枝,将树的大小控制在理想范围内。

#剪掉不重要的枝
tree_cut <- prune(tree, cp = 0.0249)
tree_cut
summary(tree_cut)
 
plot(tree_cut, margin = 0.1)
text(tree_cut, cex = 0.5)

8.png

#决策树可视化的其它方法,例如
library(rpart.plot)
 
prp(tree_cut, type = 2, extra = 104, fallen.leaves = TRUE, main = 'Decision Tree')

9.png

最后也可得到,sizeUniformity(细胞大小的均匀性)、bareNuclei(裸核)、maginalAdhesion(边际附着力)这3个变量组合是最重要的。

 

决策树性能评估


使用构建好的模型,返回来对训练集样本进行预测,根据预测结果评估模型精度。

#训练集自身的预测
pred_train <- predict(tree_cut, breast_train, type = 'class')
tree_accuracy <- table(breast_train$class, pred_train, dnn = c('Actual', 'Predicted'))
tree_accuracy

10.png

错误分类的样本约(15+4)/(304+166+15+4)≈3.89%,分类准确度是很可观的。

 

然后再使用一开始分离出的测试集样本(占原始数据集总样本的30%),代入使用训练集构建的模型中,进一步评估模型的预测性能。

#使用测试集样本进行评估
pred_test <- predict(tree_cut, breast_test, type = 'class')
tree_accuracy <- table(breast_test$class, pred_test, dnn = c('Actual', 'Predicted'))
tree_accuracy

11.png

对外源数据预测分类的结果显示,分类错误约率(5+7)/(143+55+5+7)≈5.71%,分类准确度也是很可观。

考虑到构建的决策树模型中使用到bareNuclei(裸核)这一变量,而原数据集中有部分样本缺失了这一部分数据,因此不难推测,若数据集更完整则准确度将会更好。

 


条件推断树



决策树模型构建


party包的条件推断树(conditional inference tree)是经典决策树的变体,整体结构与经典决策树类似,但变量和分割点的选取基于显著性检验(由置换检验获得p值),而不再使用纯度或同质性一类的度量。

1)计算每个响应变量与预测变量间关系的p值,选择其中最小p值的变量;

2)尝试响应变量与选中的预测变量间所有可能的二元分割,并选取最显著的分割将数据集分为两个子类别;

3)对每个子类别重复(1)(2)过程,直到所有分割都不显著或已到达最小节点为止。

接下来使用该包的决策树方法实现对上文肿瘤示例数据的分类。

#条件推断树
library(party)
 
#生成树,详情 ?ctree
#~. 是使用所有变量的简写,等同于 clumpThickness+sizeUniformity+...+normalNucleoli+mitosis
set.seed(123)
tree <- ctree(class~., data = breast_train)
tree
 
#可视化决策树
plot(tree, main = 'Conditional Inference Tree')

12.png

默认绘制的条件推断树图中,每个节点中的阴影区域代表这个节点对应的恶性肿瘤比例。

 

决策树性能评估


使用构建好的模型,分别对训练集和测试集进行预测,评估模型精度。

#训练集自身的预测
pred_train <- predict(tree, breast_train, type = 'response')
tree_accuracy <- table(breast_train$class, pred_train, dnn = c('Actual', 'Predicted'))
tree_accuracy

13.png

#使用测试集样本进行评估
pred_test <- predict(tree, breast_test, type = 'response')
tree_accuracy <- table(breast_test$class, pred_test, dnn = c('Actual', 'Predicted'))
tree_accuracy

14.png

结果显示分类准确度是很可观的。



更多精彩,可关注个人公众号“生信小白鱼”,感谢大家支持。



http://blog.sciencenet.cn/blog-3406804-1216986.html

上一篇:2019.01-2020.1笔记整理总结
下一篇:支持向量机分类及在R中实现

0

该博文允许注册用户评论 请点击登录 评论 (0 个评论)

数据加载中...

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2020-8-11 09:20

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部