当前位置:   article > 正文

基于决策树预测是否患有乳腺癌 R 语言实验报告_决策树算法实验报告

决策树算法实验报告

实验名称

基于决策树预测是否患有乳腺癌

实验目的

1)能够使用R语言基础数据结构与使用流程。
2)能够使用R进行基础的数据统计描述分析。
3)能够使用R进行高级的数据分布图绘制。
4) 能够使用R建立决策树分类模型。
5) 能够计算出决策树和随机森林分类模型的指标并评价。

实验原理

决策树算法是非常常用的分类算法,其分类思路清晰,简单易懂。同时也是集成学习和随机森林算法的基础。对于决策树算法,其输入是带有标签的数据,输出是一棵决策树。其非叶节点代表的是逻辑判断;叶节点代表的是分类的子集。决策树算法原理为通过训练集数据形成if-then的判断结构。从树的根节点到叶节点的每一条路径构成一个判断规则。我们需要选择合适的特征作为判断节点,可以快速的分类,减少决策树的深度。

在决策树中,目前比较常用的有ID3算法,C4.5算法和Cart算法。不同算法的区别在于选择特征作为判断节点时的数据纯度函数不同。本次实验采用ID3算法。R中的基础包rpart,可进行决策树构建分析。这里基于breast-cancer.data文件,针对irradiat构建决策树模型。

实验数据

数据集下载地址:https://archive.ics.uci.edu/ml/datasets/Breast+Cancer
该数据集包括286个实例和10列特征,具体的属性

  1. irradiat: no-recurrence-events, recurrence-events
  2. age: 10-19, 20-29, 30-39, 40-49, 50-59, 60-69, 70-79, 80-89, 90-99.
  3. menopause: lt40, ge40, premeno.
  4. tumor-size: 0-4, 5-9, 10-14, 15-19, 20-24, 25-29, 30-34, 35-39, 40-44, 45-49, 50-54, 55-59.
  5. inv-nodes: 0-2, 3-5, 6-8, 9-11, 12-14, 15-17, 18-20, 21-23, 24-26, 27-29, 30-32, 33-35, 36-39.
  6. node-caps: yes, no.
  7. deg-malig: 1, 2, 3.
  8. breast: left, right.
  9. breast-quad: left-up, left-low, right-up, right-low, central.
  10. irradiat: yes, no.

实验步骤

1.安装需要用到的R包

代码示例:
#安装需要使用的包
install.packages(“rpart”) #决策树分析
install.packages(“caret”) #评价模型
install.packages(“rpart.plot”) #绘图

有时提示下载安装出错,可以尝试更换不同的镜像网站:
install.packages(“rpart”,repo="https://mirrors.tuna.tsinghua.edu.cn/CRAN"site) #比如清华镜像网站
载入本案例需要使用的包:
代码示例:

#载入需要使用的包
rm(list=ls())
library(caret)  
library(rpart) 
library(rpart.plot)
  • 1
  • 2
  • 3
  • 4
  • 5

2.导入实验数据

代码示例:
#导入数据

data <- read.table("breast-cancer.data",sep = ",",stringsAsFactors = TRUE,na.strings  = "?")
names(data)<- c("irradiat","age","menopause","tumor_size","inv_nodes",
"node_caps","deg_malig","breast","breast_quad","irradiat")#重命名

  • 1
  • 2
  • 3
  • 4

3.数据描述性统计分析

进行建模前,需要对自变量进行描述性统计分析,分析变量的分布特征,并对数据格式进行处理。
代码示例:

#数据初步统计与处理
colSums(is.na(data)) #检验空值
data$deg_malig  <- as.factor(data$deg_malig ) #设为分类变量
data$lane<-as.factor(data$lane)  #设为分类变量
summary(data)  #数据描述性统计分析
  • 1
  • 2
  • 3
  • 4
  • 5

结果:

4.假设检验

进行卡方检验:
原假设:irradiat 和 Class 没有任何关联
替代假设: irradiat 和 Class 有任何关联

代码示例:

chisq.test(table(data$irradiat,data$Class))
	Pearson's Chi-squared test with Yates' continuity correction

data:  table(data$irradiat, data$Class)
X-squared = 9.7806, df = 1, p-value = 0.001764
  • 1
  • 2
  • 3
  • 4
  • 5

卡方检验的p值是0.001764,小于0.05,拒绝原假设,认为irradiat 和 Class 有任何关联

5.决策树模型构建

将数据分类训练集与测试集,然后以为因变量(irradiat),构建决策树模型:
代码示例:

#划分训练集、测试集
set.seed(150)
ind<-sample(2,nrow(data),replace=T,prob=c(0.7,0.3))
train<-data[ind==1,]
test<-data[ind==2,]
#建立决策树模型
#离散分类(method="class"),分类规则为信息增益(split="information"),交叉验证次数(minsplit)为10次,剪枝率(cp)为0.01
rpart<-rpart(irradiat~.,train,method="class",parms=list(split="information"), control=rpart.control(xval=10,minsplit=10,cp=0.01))
print(rpart)
printcp(rpart)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

结果:

结果解释:使用printcp()函数输出模型的复杂性参数(complexity parameter, cp)。该参数可以作为控制树规模的惩罚因子,cp值越大,分裂规模(nsplit)越小,输出参数(rel error)指示了当前分类模型树与空树之间的平均偏差比值。xerror是通过使用交叉验证得到的相对误差,xstd是相对误差的标准差。

将决策树模型可视化:
代码示例:

#决策树结构图
prp(rpart)
  • 1
  • 2

结果:

最终获得如图所示的决策树,分类规则使用的变量有8个:inv-nodes,age,tumer_size,node_caps,breast,breast_quad,deg_malig,Class
将决策树模型可视化:
代码示例:
#决策树规则解释

asRules(rpart)
  • 1

结果:

对前二条规则进行解读:
① inv_nodes=0-2,15-17,
age=40-49,60-69
tumor_size=25-29,30-34,35-39,45-49,5-9,50-54,45-49,5-9,
乳腺癌(irradiat)为yes;
②inv_nodes=0-2,15-17
age=40-49,60-69
tumor_size=25-29,30-34,35-39,45-49,5-9,50-54,
node_caps=no
breast_quad=left_up,right_low
deg_malig=2,3
乳腺癌(irradiat)为yes;
决策模型结果测试集精度测试:
代码示例:

#混淆矩阵
pre.rpart<-predict(rpart,test,type="class")
confusionMatrix(pre.rpart,test$irradiat)
  • 1
  • 2
  • 3

结果:

使用测试集对模型效果进行检验,获取预测结果的混淆矩阵。预测的精确率为75.28%,Sensitivity 为 0.7973 ,Specificity为0.5333,指标表现一般。

分析与讨论

本实验基于决策树预测是否患有乳腺癌,成功预测并评价了决策树模型,但是总体情况并不理想,预测的精确率为75.28%,Sensitivity 为 0.7973 ,Specificity为0.5333,指标表现一般。我们应该如何提高决策树的预测正确率是需要值得讨论和研究的。
决策树存在一定的过拟合,过拟合是特征维度过多,模型过于复杂,参数过多,训练数据过少,噪声过多,导致拟合的函数完美的预测训练集,但对新数据的测试集预测结果差。 过度的拟合了训练数据,而没有考虑到泛化能力。我们应该如何避免过拟合问题?首先,rpart()函数可用于生成决策树。print(dtree)和summary(dtree)可用于观测所得模型,此时所得的树可能过大,需要剪枝。可以考虑对决策树进行剪枝。通过 prune 函数对该决策树进行适当的剪枝,防止过拟合,使得树能够较好地反映数据内在的规律并在实际应用中有意义。
可以采用随机森林算法预测。随机森林是一种常用的集成学习算法,基分类器为决策树。该算法的随机性体现在两个方面:①数据集的随机选取:从原始的数据集中采取有放回的抽样,构造子数据集,子数据集的数据量是和原始数据集相同的。不同子数据集的元素可以重复,同一个子数据集中的元素也可以重复。②待选特征的随机选取:与数据集的随机选取类似,随机森林中的子树的每一个分裂过程并未用到所有的待选特征,而是从所有的待选特征中随机选取一定的特征,之后再在随机选取的特征中选取最优的特征。随机森林由于采用了集成算法,本身精度比大多数单个算法要好,所以准确性高。同时,由于两个随机性的引入,使得随机森林不容易陷入过拟合问题。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/614070
推荐阅读
相关标签
  

闽ICP备14008679号