您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 经营企划 > R与数据挖掘(学习决策树和随机森林的R语句)
1数据挖掘报告2乳腺癌的分析摘要此次实验的目的主要是研究分类,对乳腺癌的类型良性的还是恶性的进行分类。比较一下什么方法更好。数据共包括699个观测值,每个观测有11个变量。有缺失值。主要是运用了R和SAS两个软件进行分析的。R中用的方法都是数据挖掘中的一些典型方法。SAS中是采用了判别与聚类的方法。原始数据已经将类别分好了,对于分类研究使用不同的方法看一下哪种方法的精度更高。关键词:数据挖掘方法、判别、聚类3一数据的描述:a)一共有699个观测,11个变量。b)变量解释:idclump_thickness肿块的密度取值1-10uniformity_cell_size细胞的大小均匀度取值1-10uniformity_cell_shape细胞的形状的均匀度取值1-10marginal_adhesion边缘部分的黏着度取值1-10single_epithelialcell_size单一的上皮细胞的大小取值1-10bare_nuclei裸露细胞核取值1-10bland_chromatin染色质取值1-10normal_nucleoli正常的细胞核取值1-10mitoses有丝分裂取值1-10btype类型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]24411401461591652362502762932952983163224126183)缺失值的处理方法a)直接删除breast_cancer_delete-na.omit(breast_cancer);b)均值进行差补breast_cancer_mean-breast_cancer;for(rinwhich(!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(rinwhich(!complete.cases(breast_cancer)))4breast_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.plota)使用中位数填补后的数据进行建模分析以及分析判错率#分类树,请先安装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);#画出分类树结果5plotcp(breast.part,minline=TRUE);#交叉验证错误率与分类树节点数的关系(??)plot(breast.part,uniform=T,branch=0.4,compress=T);text(breast.part,use.n=T);#带频数的结果图6printcp(breast.part);#查看这棵树的复杂性参量表CPnsplitrelerrorxerrorxstd交叉验证错误率叶节点数减一预测误差10.78008301.000001.000000.05214220.05394210.219920.261410.03141530.02489620.165980.186720.02692440.01244830.141080.174270.02607150.01000060.103730.174270.026071误差原则:参考文献7#剪枝breast.part2-prune(breast.part,cp=0.016);rpart.plot(breast.part2);#剪枝以后的分类树图b)进行交叉验证:由于数据的观测并不是太大(699)采取3折交叉验证n=699;zz1=1:n;zz2=rep(1:3,ceiling(699/3))[1:n];set.seed(100);zz2=sample(zz2,n);nmse=list(NULL,NULL);c-breast_cancer_median;for(iin1:3){data.train=c[-c(which(zz2==i)),];data.test=c[c(zz2==i),];d.train-rpart(factor(btype)~.,data=data.train,method=class);table1=table(predict(d.train,data.train,type=class),data.train$btype);table2=table(predict(d.train,data.test,type=class),data.test$btype);nmse[[1]][i]=1-sum(diag(table1))/nrow(data.train);nmse[[2]][i]=1-sum(diag(table2))/sum(table2);cat(rpartmethod第,i,折:,\n);cat(训练集错误率:,nmse[[1]][i],\n);cat(测试集错误率:,nmse[[2]][i],\n,\n);}NMSE=array();NMSE[1]=sum(nmse[[1]])/3;NMSE[2]=sum(nmse[[2]])/3;cat(rpartmethod训练集上的平均错误率为:,\n,NMSE[1],\n);cat(rpartmethod测试集上的平均错误率为:,\n,NMSE[2],\n);8结果:rpartmethod第1折:训练集错误率:0.04935622测试集错误率:0.05579399rpartmethod第2折:训练集错误率:0.03433476测试集错误率:0.05150215rpartmethod第3折:训练集错误率:0.04077253测试集错误率:0.04291845rpartmethod训练集上的平均错误率为:0.04148784rpartmethod测试集上的平均错误率为:0.050071532)神经网络使用的包有nneta)使用中位数填补后的数据进行建模分析以及分析判错率#请先安装nnet程序包library(nnet);a-nnet(factor(btype)~.,data=breast_cancer_median,size=6,rang=0.1,decay=5e-4,maxit=1000);a.predict-predict(a,data=breast_cancer_median,type='class');table=table(a.predict,breast_cancer_median$btype);#计算错判率pError=1-sum(diag(table))/nrow(breast_cancer_median);cat(nnet分类的错判率pError为:,\n,pError,\n);结果显示全部判断正确a.predict242458040241nnet分类的错判率pError为:0b)使用三折交叉验证n=699;zz1=1:n;zz2=rep(1:3,ceiling(699/3))[1:n];set.seed(100);zz2=sample(zz2,n);nmse=list(NULL,NULL);c-breast_cancer_median;for(iin1:3){data.train=c[-c(which(zz2==i)),];data.test=c[c(zz2==i),];9d.train-nnet(factor(btype)~.,data=data.train,size=6,rang=0.1,decay=5e-4,maxit=1000);table1=table(predict(d.train,data.train,type=class),data.train$btype);table2=table(predict(d.train,data.test,type=class),data.test$btype);nmse[[1]][i]=1-sum(diag(table1))/nrow(data.train);nmse[[2]][i]=1-sum(diag(table2))/sum(table2);cat(\n,nnetmethod第,i,折:,\n);cat(第,i,折训练集的错误率为:,\n,nmse[[1]][i],\n);cat(第,i,折测试集的错误率为:,\n,nmse[[2]][i],\n,\n);}NMSE=array();NMSE[1]=sum(nmse[[1]])/3;NMSE[2]=sum(nmse[[2]])/3;cat(nnetmethod训练集上的平均错误率为:,\n,NMSE[1],\n);cat(nnetmethod测试集上的平均错误率为:,\n,NMSE[2],\n);结果:nnetmethod第1折:第1折训练集的错误率为:0第1折测试集的错误率为:0.05150215nnetmethod第2折:第2折训练集的错误率为:0.002145923第2折测试集的错误率为:0.08583691nnetmethod第3折:第3折训练集的错误率为:0第3折测试集的错误率为:0.03862661nnetmethod训练集上的平均错误率为:0.0007153076nnetmethod测试集上的平均错误率为:0.058655223)支持向量机使用的包有e1071,ggplota)ggplot这个包画图的功能很强大,就是可以使图输出到pdf,等好多形式的输出可以拿出任意两个变量来画图给个直观的印象那个变量对分类影响较明显,例如使用一下两个变量来看,这里之举一个看。#绘制以bare_nuclei为横轴频数为中轴的直方图,请先安装ggplot2程序包library(ggplot2);#载入绘图函数报c6-qplot(bare_nuclei,data=breast_cancer_median,colour=factor(btype));ggsave(s
本文标题:R与数据挖掘(学习决策树和随机森林的R语句)
链接地址:https://www.777doc.com/doc-2856302 .html