收藏 分享(赏)

r数据挖掘实例.pptx

上传人:天天快乐 文档编号:766011 上传时间:2018-04-22 格式:PPTX 页数:99 大小:1.07MB
下载 相关 举报
r数据挖掘实例.pptx_第1页
第1页 / 共99页
r数据挖掘实例.pptx_第2页
第2页 / 共99页
r数据挖掘实例.pptx_第3页
第3页 / 共99页
r数据挖掘实例.pptx_第4页
第4页 / 共99页
r数据挖掘实例.pptx_第5页
第5页 / 共99页
点击查看更多>>
资源描述

1、Crime&Shock数据集分析展示,探索性数据分析,Communities and CrimeUnnormalized Data Set (Data source),2,一、数据预处理,#导入crime数据,修改变量名称,并查看数据属性crim=read.table(crim.txt,sep=,na.string=?)name=read.table(attr_vol.txt)name=name,2colnames(crim)-namesummary(crim) dim(crim),3,观测值:2215 变量数:147部分数据严重缺失,四、犯罪率分布情况,4,在3月份的行业销售旺季,东北地区及

2、北部地区销售额占到公司全月总额的70%,西部地区仅为10%,西部死去市场潜力还需深度挖掘。,可看出violentPerPop nonViolPerPop都出现了不同程度的拖尾特征,考虑对数据进行对数变换,由图可知,四、对数化变换,5,做变换后两变量数据较为对称,由图可知,四、犯罪率地区差异,6,三个地区犯罪率的中位数由西向东递减,分布相对集中,但东部地区出现了较为明显的离群值,7,缺失值处理,nrow(crim!complete.cases(crim),) #缺失值项的总行数#基本每行都有缺失值na.sta=c()for(i in 1:2215)na.sta=c(na.sta,length(w

3、hich(is.na(crimi,)max(na.sta)#缺失值基本在20左右,没有#缺失过于严重的样本,无需删除,8,缺失值处理:临近值插补,从数据集中选取若干条其他属性和它相似的样本(即和它在空间欧式距离最短的n 条样本),求其中位数进行插补crim$gangUnit=as.factor(gangUnit)crim1=crim,c(6:126,128:147)library(cluster) #调用R 语言中的cluster 包#计算空间距离dist.mtx - as.matrix(daisy(crim1,stand=T) #计算这2215 个样品的空间距离,9,缺失值处理:临近值插补,

4、#先处理非因子型变量的缺失值,需要将以下步骤进行两次for(r in which(!complete.cases(crim1)crim1r,which(is.na(crim1r,) 0.7),Linear Regression,for(i in 1:5)crim.test=data.frame(crim1ddi,)crim.train=data.frame(crim1-ddi,)lm.vio=lm(violentPerPop.,data=crim.train,c(6:129,146)pre.train=predict(lm.vio)pre.test=predict(lm.vio, crim.t

5、est,c(6:129,146)NM.train=mean(crim.train$violentPerPop-pre.train)2)/mean(mean(crim.train$violentPerPop)-crim.train$violentPerPop)2)NM.test=mean(crim.test$violentPerPop-pre.test)2)/mean(mean(crim.test$violentPerPop)-crim.test$violentPerPop)2)M.train=mean(crim.train$violentPerPop-pre.train)2)M.test=me

6、an(crim.test$violentPerPop-pre.test)2)NMSE.train=c(NMSE.train,NM.train)NMSE.test=c(NMSE.test,NM.test)MSE.train=c(MSE.train,M.train)MSE.test=c(MSE.test,M.test),16,Linear Regression,17,Stepwise,#逐步回归:全部、前向、后向lm1both-step(lm.vio,direction= both)lm1forward-step(lm.vio,direction= forward)lm1back-step(lm.

7、vio,direction= backward)final.lm-step(lm.vio)summary(final.lm),18,Stepwise,19,Stepwise,20,Stepwise:diagnose,21,Stepwise,22,Stepwise,23,Conclusion,由结果可以看出,逐步回归调整后的的R-Square为0.6957,模型检验的结果显示,回归的残差项并不满足正态性假定,同时模型的AIC值25573.06依然过高,这启发我们建立更加精确的预测模型。,24,Ridge,25,Ridge,cor(crim,6:129,use=complete.obs) #变量间

8、的相关性,计算时不考虑缺失值symnum(cor(crim,6:129,use=complete.obs) #简单明显示出变量间的相关#只截取部分结果显示,可以看出#变量之间的共线性较为明显,26,Ridge,library(MASS)ridgelm-lm.ridge(violentPerPop.,data=crim.train,c(6:129,146),lambda=seq(0,200,0.01), model =TRUE)names(ridgelm)ridgelm$lambdawhich.min(ridgelm$GCV) #找到GCV 最小时对应的lambda#广义的交叉验证准则GCV,越

9、小越好ridgelm$coef,which.min(ridgelm$GCV) #找到GCV 最小时对应的系数,27,Ridge,#lamda 同GCV 之间关系的图形plot(ridgelm$lambda,ridgelm$GCV,type=l)abline(v=ridgelm$lambdawhich.min(ridgelm$GCV),col=green),28,Lasso,LASSO方法 在线性模型中,人们必须选择合适的变量;比如常用的逐步回归法就是选择显著的变量而抛弃那些不显著的。Tibshirani(1996)1提出了一个新的方法来处理变量选择的问题。该方法在模型系数绝对值的和小于某常数的

10、条件下,谋求残差平方和最小。该方法既提供了如子集选择方法那样的可以解释的模型,也具有岭回归那样的稳定性。它不删除变量,但使得一些回归系数收缩、变小,甚至为0。因而,该方法被称为lasso(least absolute shrinkage and selection operator,最小绝对值收缩和选择算子2)。,29,Lasso,#将数据集中的因子变量gangUnit转换为哑元变量#训练集gangUnit5=rep(0,1772);gangUnit5which(crim.train$gangUnit=5)=1gangUnit10=rep(0,1772);gangUnit10which(cri

11、m.train$gangUnit=10)=1crim.train1=crim.train,c(6:129);crim.train1$gangUnit=NULLcrim.train2=data.frame(crim.train1,1:121,gangUnit5,gangUnit10,crim.train1,-(1:121)#测试集gangUnit5=rep(0,443);gangUnit5which(crim.test$gangUnit=5)=1gangUnit10=rep(0,443);gangUnit10which(crim.test$gangUnit=10)=1crim.test1=cri

12、m.test,c(6:129);crim.test1$gangUnit=NULLcrim.test2=data.frame(crim.test1,1:121,gangUnit5,gangUnit10,crim.test1,-(1:121),30,Lasso(lars),library(lars)attach(crim.train)lassolm-lars(as.matrix(crim.train2),violentPerPop)Lassolm,31,Lasso(msgps),library(msgps)fit - msgps(as.matrix(crim.train2),crim.train$

13、violentPerPop)summary(fit),32,Lasso(lars),lassolm$Cp,33,Lasso(msgps),coef(fit) #extract coefficients at t selected by model selection criteriacbind(coef(fit),ridgelm$coef,which.min(ridgelm$GCV)1:10,)注:如图,根据前三个准则得出的最终模型系数基本一致,最后一列为岭回归Cp原则的系数,可以看出lasso方法可以使更多的系数“收缩”到0。,34,Lasso(msgps),plot(fit,criteri

14、on=cp,main=lasso),35,Lasso(lars),36,Lasso(lars),predict11-predict(lassolm,data.matrix(crim.train2),mode=fraction,s=best,type=fit)predict1-predict(lassolm,data.matrix(crim.test2),mode=fraction,s=best,type=fit)cat(lasso 训练集上的NMSE 为:, mean(crim.train$violentPerPop-as.numeric(predict11$fit)2)/mean(mean(

15、crim.train$violentPerPop)-crim.train$violentPerPop)2), n)lasso 训练集上的NMSE 为: 0.3050613 (依据10 折交叉验证)cat(lasso 测试集上的NMSE 为:,mean(crim.test$violentPerPop-as.numeric(predict1$fit)2)/mean(mean(crim.test$violentPerPop)-crim.test$violentPerPop)2), n)lasso测试集上的NMSE 为: 0.3388574 (依据10 折交叉验证),37,Lasso(lars),pr

16、edict11-predict(lassolm,data.matrix(crim.train2),mode=step,s=best,type=fit)predict1-predict(lassolm,data.matrix(crim.test2),mode=step,s=best,type=fit)cat(lasso 训练集上的NMSE 为:, mean(crim.train$violentPerPop-as.numeric(predict11$fit)2)/mean(mean(crim.train$violentPerPop)-crim.train$violentPerPop)2), n)#

17、lasso 训练集上的NMSE 为:0.3248435 (依据Cp 准则)cat(lasso 测试集上的NMSE 为:,mean(crim.test$violentPerPop-as.numeric(predict1$fit)2)/mean(mean(crim.test$violentPerPop)-crim.test$violentPerPop)2), n)#lasso测试集上的NMSE 为: 0.3352093 (依据Cp 准则),38,Lasso,# 下面我们来看看上面(根据10 折交叉验证得出的lasso回归方程)它的残差项的正态性检验。shapiro.test(crim.train$

18、violentPerPop-predict11$fit) #训练集上的残差检验#W = 0.8679, p-value 2.2e-16shapiro.test(crim.test$violentPerPop-predict1$fit) #测试集上的残差检验W = 0.8839, p-value 1,最终系数不易收缩到0,这不助于变量的筛选;而对于r1/2时也能得到同样的效果。这一方法提高了原系数估计的稳定性。,42,Generalized elastic net,#elastic netfit2 - msgps(as.matrix(crim.train2),crim.train$violent

19、PerPop,penalty=enet,alpha=0.5)summary(fit2) coef(fit2)plot(fit2,criterion=cp),43,Generalized elastic net,44,Generalized elastic net,#根据Cp原则NMSE.train=c()NMSE.test=c()for(i in 1:5)crim.test=crim1ddi,crim.train=crim1-ddi,#训练集gangUnit5=rep(0,1772);gangUnit5which(crim.train$gangUnit=5)=1gangUnit10=rep(0

20、,1772);gangUnit10which(crim.train$gangUnit=10)=1crim.train1=crim.train,c(6:129);crim.train1$gangUnit=NULLcrim.train2=data.frame(crim.train1,1:121,gangUnit5,gangUnit10,crim.train1,-(1:121)#测试集gangUnit5=rep(0,443);gangUnit5which(crim.test$gangUnit=5)=1gangUnit10=rep(0,443);gangUnit10which(crim.test$ga

21、ngUnit=10)=1crim.test1=crim.test,c(6:129);crim.test1$gangUnit=NULLcrim.test2=data.frame(crim.test1,1:121,gangUnit5,gangUnit10,crim.test1,-(1:121),45,Generalized elastic net,fit - msgps(as.matrix(crim.train2),crim.train$violentPerPop,penalty=enet,alpha=0.5)#训练集predict11-predict(fit,as.matrix(crim.tra

22、in2),1NMSE.train=c(NMSE.train,mean(crim.train$violentPerPop-as.numeric(predict11)2)/mean(mean(crim.train$violentPerPop)-crim.train$violentPerPop)2)#测试集predict1-predict(fit,as.matrix(crim.test2),1NMSE.test=c(NMSE.test,mean(crim.test$violentPerPop-as.numeric(predict1)2)/mean(mean(crim.test$violentPerP

23、op)-crim.test$violentPerPop)2)NMSE.train;mean(NMSE.train)NMSE.test;mean(NMSE.test),46,Generalized elastic net,penalty=“genet”(penalty=“alasso”时计算出现奇异值系统报错),47,Model buildingData Mining,48,K临近回归,library(kknn)NMSE=c()MSE=c()for(i in 1:5)crim.test=crim1ddi,crim.train=crim1-ddi,knn1lm-kknn(murders.,crim

24、.train,6:130,crim.test,6:130,k=1,distance =1,kernel = rectangular)NM=mean(crim.test$murders-knn1lm$fitted.values)2)/mean(mean(crim.test$murders)-crim.test$murders)2)M=mean(crim.test$murders-knn1lm$fitted.values)2)NMSE=c(NMSE,NM)MSE=c(MSE,M),49,虽然该算法主要用于分类。不用于拟合模型,但其较为稳定,可先利用该模型观察拟合效果以及预测精度再试图从不稳定模型中

25、得到提升。,K临近回归,50,最终达到的预测精度如下,可见该方法的预测精度仍然较低:,回归树,library(rpart) #调用rpart 包crim.test=data.frame(crim1dd1,)crim.train=data.frame(crim1-dd1,)rt.train=rpart(violentPerPop.,data=crim.train,c(6:129,146)plot(rt.train,uniform=T,branch=1, margin=0.1, cex=0.9,main=violentPerPop) #画出回归树text(rt.train,cex=0.75) #在

26、树中显示分枝的信息。printcp(rt.train) #显示回归树rt.train 每一步得出的sub-trees 的详细信息,51,回归树,52,回归树,treepre.train=predict(rt.train,crim.train,c(6:129,146)cat(tree 训练集上的NMSE 为:, mean(crim.train,c(6:129,146)$violentPerPop-as.numeric(treepre.train)2)/mean(mean(crim.train,c(6:129,146)$violentPerPop)-crim.train,c(6:129,146)$

27、violentPerPop)2),n)#tree 训练集上的NMSE 为: 0.3664984 treepre.test=predict(rt.train,crim.test,c(6:129,146)cat(tree 训练集上的NMSE 为:, mean(crim.test,c(6:129,146)$violentPerPop-as.numeric(treepre.test)2)/mean(mean(crim.test,c(6:129,146)$violentPerPop)-crim.test,c(6:129,146)$violentPerPop)2),n)#tree 测试集上的NMSE 为:

28、 0.4828972,53,回归树:五折交叉验证,for(i in 1:5)crim.test=data.frame(crim1ddi,)crim.train=data.frame(crim1-ddi,)rt.train=rpart(violentPerPop.,data=crim.train,c(6:129,146)treepre.train=predict(rt.train,crim.train,c(6:129,146)treepre.test=predict(rt.train,crim.test,c(6:129,146)NM.train=mean(crim.train$violentPe

29、rPop-treepre.train)2)/mean(mean(crim.train$violentPerPop)-crim.train$violentPerPop)2)NM.test=mean(crim.test$violentPerPop-treepre.test)2)/mean(mean(crim.test$violentPerPop)-crim.test$violentPerPop)2)M.train=mean(crim.train$violentPerPop-treepre.train)2)M.test=mean(crim.test$violentPerPop-treepre.tes

30、t)2)NMSE.train=c(NMSE.train,NM.train)NMSE.test=c(NMSE.test,NM.test)MSE.train=c(MSE.train,M.train)MSE.test=c(MSE.test,M.test),54,回归树,55,Boosting(mboost),for(i in 1:5)crim.test=data.frame(crim1ddi,)crim.train=data.frame(crim1-ddi,)boost.train=blackboost(violentPerPop.,control=boost_control(mstop=50),d

31、ata=crim.train,c(6:129,146)treepre.train=predict(boost.train,crim.train,c(6:129,146)treepre.test=predict(boost.train,crim.test,c(6:129,146)NM.train=mean(crim.train$violentPerPop-treepre.train)2)/mean(mean(crim.train$violentPerPop)-crim.train$violentPerPop)2)NM.test=mean(crim.test$violentPerPop-treep

32、re.test)2)/mean(mean(crim.test$violentPerPop)-crim.test$violentPerPop)2)M.train=mean(crim.train$violentPerPop-treepre.train)2)M.test=mean(crim.test$violentPerPop-treepre.test)2)NMSE.train=c(NMSE.train,NM.train)NMSE.test=c(NMSE.test,NM.test)MSE.train=c(MSE.train,M.train)MSE.test=c(MSE.test,M.test),56

33、,Boosting,57,Bagging,Bagging 是Breiman 提出的与Boosting 相似的技术。Bagging 技术的主要思想是给定一弱学习算法和一训练集1 1 ( , ),., ( , ) n n x y x y 。让该学习算法训练多轮,每轮的训练集由从初始的训练集中随机取出的n 个训练例组成,初始训练例在某轮训练集中可以出现多次或根本不出现。训练之后可得到一个预测函数序列:1,., t h h ,最终的预测函数H 对分类问题采用投票方式,对回归问题采用简单平均方法对新示例进行判别。Bagging 与Boosting 的区别在于Bagging 的训练集的选择是随机的,各轮训

34、练集之间相互独立,而 Boosting 的训练集的选择不是独立的,各轮训练集的选择与前面各轮的学习结果有关;Bagging 的各个预测函数没有权重,而Boosting是有权重的;Bagging 的各个预测函数可以并行生成,而Boosting 的各个预测函数只能顺序生成。对于象神经网络这样极为耗时的学习方法,Bagging 可通过并行训练节省大量时间开销。以下我将通过R 语言中的ipred 包运用Bagging 算法对该数据集进行分析研究。,58,Bagging(ipred),for(i in 1:5)crim.test=data.frame(crim1ddi,)crim.train=data.

35、frame(crim1-ddi,)bagging.vio=bagging(violentPerPop.,data=crim.train,c(6:129,146),coob=T,control=rpart.control(xval=10)pre.train=predict(bagging.vio,crim.train,c(6:129,146)pre.test=predict(bagging.vio,crim.test,c(6:129,146)NM.train=mean(crim.train$violentPerPop-pre.train)2)/mean(mean(crim.train$viole

36、ntPerPop)-crim.train$violentPerPop)2)NM.test=mean(crim.test$violentPerPop-pre.test)2)/mean(mean(crim.test$violentPerPop)-crim.test$violentPerPop)2)M.train=mean(crim.train$violentPerPop-pre.train)2)M.test=mean(crim.test$violentPerPop-pre.test)2)NMSE.train=c(NMSE.train,NM.train)NMSE.test=c(NMSE.test,N

37、M.test)MSE.train=c(MSE.train,M.train)MSE.test=c(MSE.test,M.test),59,Bagging,60,随机森林(randomForest),randomforest.violentPerPop - randomForest(violentPerPop .,data=crim.train,c(6:129,146),ntree=500,importance=TRUE,proximity=TRUE)randomforest.violentPerPop$importance #查看解释变量对模型的贡献性的大小randomforest.violen

38、tPerPop$importanceSD,61,随机森林(randomForest),#贡献度最大的前十个变量names(crim.train,c(6:129,146)sort(randomforest.violentPerPop$importance,1,decreasing=T,index.return=T)$ix1:10plot(randomforest.violentPerPop$importanceSD)identify(1:124,randomforest.violentPerPop$importanceSD,labels=names(randomforest.violentPer

39、Pop$importanceSD),62,随机森林(randomForest),63,随机森林(randomForest),64,总结,65,Shock Data(Data source),66,数据预处理,67,shock=read.table(shock.txt,header=T)head(shock)shock$SHOCK_TYP=as.factor(shock$SHOCK_TYP)shock$SURVIVE=as.factor(shock$SURVIVE)shock$SEX=as.factor(shock$SEX)shock$RECORD=as.factor(shock$RECORD)

40、,数据描述,68,69,数据描述,70,数据描述,71,数据描述,Record不同时的shock type完全相同,72,数据描述,由图可知,Record不同时各观测值有差异但不明显,由箱盒图可以看到HT与RCI中存在离群值,贝叶斯分类,distinguish.bayes - function(TrnX, TrnG, p = rep(1, length(levels(TrnG),TstX = NULL, var.equal = FALSE)if ( is.factor(TrnG) = FALSE)mx - nrow(TrnX); mg - nrow(TrnG)TrnX - rbind(TrnX

41、, TrnG)TrnG - factor(rep(1:2, c(mx, mg)if (is.null(TstX) = TRUE) TstX - TrnXif (is.vector(TstX) = TRUE) TstX - t(as.matrix(TstX)else if (is.matrix(TstX) != TRUE)TstX - as.matrix(TstX)if (is.matrix(TrnX) != TRUE) TrnX - as.matrix(TrnX)nx - nrow(TstX)blong - matrix(rep(0, nx), nrow=1,dimnames=list(blong, 1:nx)g - length(levels(TrnG)mu - matrix(0, nrow=g, ncol=ncol(TrnX),

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 经营企划

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报