R与数据挖掘(学习决策树和随机森林的R语句)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数据挖掘报告
乳腺癌的分析
摘要
此次实验的目的主要是研究分类,对乳腺癌的类型良性的还是恶性的进行分类。比较一下什么方法更好。数据共包括699个观测值,每个观测有11个变量。有缺失值。主要是运用了R和SAS两个软件进行分析的。R中用的方法都是数据挖掘中的一些典型方法。SAS中是采用了判别与聚类的方法。原始数据已经将类别分好了,对于分类研究使用不同的方法看一下哪种方法的精度更高。
关键词:数据挖掘方法、判别、聚类
一数据的描述:
a)一共有699个观测,11个变量。
b)变量解释:
"id"
"clump_thickness"" 肿块的密度取值1-10 "uniformity_cell_size" 细胞的大小均匀度取值1-10
"uniformity_cell_shape" 细胞的形状的均匀度取值1-10
"marginal_adhesion" 边缘部分的黏着度取值1-10
"single_epithelialcell_size" 单一的上皮细胞的大小取值1-10
"bare_nuclei" 裸露细胞核取值1-10
"bland_chromatin" 染色质取值1-10
"normal_nucleoli" 正常的细胞核取值1-10
"mitoses" 有丝分裂取值1-10
"btype" 类型 2-良性,4-恶性
c)数据是共有16个缺失值的,在"bare_nuclei" 这个变量中
d)对缺失值的处理共采用了三种方法:直接删除、利用均值进行插补、利用中位数进行插补。
e)后面采用的方法最基本的数据是采用了中位数的方法进行差补以后的。
二R语言采用的方法介绍共5种方法
(决策树,神经网络,支持向量机,随机森林,最近邻方法)
A) 数据的基本处理
1)读入txt格式数据,将btype设为分类变量
breast_cancer <- read.delim("breast_cancer.txt");
breast_cancer$btype <- factor(breast_cancer$btype);
2) 显示16个缺失值所在的行数
which(complete.cases(breast_cancer) == F);
[1] 24 41 140 146 159 165 236 250 276 293 295 298 316 322 412 618
3)缺失值的处理方法
a)直接删除
breast_cancer_delete <- na.omit(breast_cancer);
b)均值进行差补
breast_cancer_mean <- breast_cancer;
for (r in which(!complete.cases(breast_cancer)))
{
breast_cancer_mean[r, which(is.na(breast_cancer[r, ]))] <- apply(data.frame(breast_cancer[, which(is.na(breast_cancer[r, ]))]), 2, mean,
na.rm = T);
}
c)中位数进行插补
breast_cancer_median <- breast_cancer;
for (r in which(!complete.cases(breast_cancer)))
breast_cancer_median[r, which(is.na(breast_cancer[r, ]))] <- apply(data.frame(breast_cancer[, which(is.na(breast_cancer[r, ]))]), 2, median, na.rm = T);
B)方法介绍
1)分类树使用的包rpart 、rpart.plot
a)使用中位数填补后的数据进行建模分析以及分析判错率#分类树,请先安装rpart程序包
library(rpart);
set.seed(100);
breast.part <- rpart(factor(btype) ~ ., data = breast_cancer_median, method="class");
table = table(predict(breast.part,breast_cancer_median,type="class"), breast_cancer_median$btype);
# 计算错判率
pError=1 - sum(diag(table))/nrow(breast_cancer_median);
cat("分类的错判率pError为:","\n",pError ,"\n");
分类的错判率pError为: 0.03576538
# 画图,请先安装rpart.plot程序包
library(rpart.plot);
rpart.plot(breast.part); # 画出分类树结果
plotcp(breast.part,minline = TRUE); # 交叉验证错误率与分类树节点数的关系
(??) plot(breast.part,uniform=T,branch=0.4,compress=T); text(breast.part,use.n=T); # 带频数的结果图
printcp(breast.part); # 查看这棵树的复杂性参量表
CP nsplit rel error xerror xstd
交叉验证错误率叶节点数减一预测误差
1 0.780083 0 1.00000 1.00000 0.052142
2 0.053942 1 0.21992 0.26141 0.031415
3 0.024896 2 0.16598 0.18672 0.026924
4 0.012448 3 0.14108 0.17427 0.026071
5 0.010000
6 0.10373 0.1742
7 0.026071 误差原则:
参考文献