r语言课程设计_第1页
r语言课程设计_第2页
r语言课程设计_第3页
r语言课程设计_第4页
r语言课程设计_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

本文格式为Word版,下载可任意编辑——r语言课程设计library(MASS)

将训练集中的y变量作为判别变量,其他剩余的变量作为特征变量,运用lda()函数来进行费希尔判别下的线性判别。

>ldaldaCall:

lda(y~.,data=x)

Priorprobabilitiesofgroups:1234

0.648148150.111111110.037037040.20370370Groupmeans:

x1x2x3x4

1-0.03336857-0.007231429-0.0008800-0.228697120.769233330.7488000000.1302167-0.269633330.377650000.4366000000.6406500-0.497350040.565145450.6081909090.2076455-0.2936727Coefficientsoflineardiscriminants:

4

library(nnet)

首先在建模之前,先介绍软件包nnet中的一个函数:class.ind()。该函数可以通过类别变量的因子变量来生成一个类指标矩阵。下面通过一个简单的例子来更明白地说明该函数的功能。

>z=c(1,2,3)#定义一个水平数为3的向量>class.ind(z)123[1,]100[2,]010[3,]001

从输出结果可以看到,该函数主要是将向量变成一个矩阵,其中每行代表一个样本。只是将样本的类别用0和1来表示,即假使是该类,则在该类别名下用1表示,而其余的类别名下面用0表示。

将数据框的前4列作为自变量数据,class.ind(y)作为类别变量数据,设置隐蔽层节点个数为4,模型的最大迭代次数为1000次,用来防止模型的死循环。之后用核心函数nnet()来建立神经网络模型。

>model=nnet(x[1:4],class.ind(y),data=x,size=4,+decay=5e-4,maxit=1000)#神经网络>p=x[,1:4]#测试集定为原始数据

>pred3=predict(model,p)#对测试集进行预计>head(pred3)#预计结果的部分显示1234

[1,]0.99999415950.00000000001.474405e-044.459695e-05[2,]0.94903083780.01131001011.454422e-059.221503e-03[3,]0.00496943100.02406255892.918010e-048.973849e-01

7

[4,]0.00025403970.00019419714.926029e-049.982468e-01[5,]0.86827598540.00000000005.810529e-031.975710e-01[6,]0.99998319910.00000000001.631513e-042.351911e-04

上述结果的每一行代表测试集中的每一个样本,其判别准则为:每一行中最大值所在的列名即为该样本所属的类别。

>pnew=max.col(pred3)#确定测试集中每一个样本所属类别>table(y,pnew)#给出混淆矩阵pnew

y12341331012240030011410010

>e_ee_e

[1]0.1111111从结果可以看出,该模型的误判率为11.1%,相比较判别分析大幅度降低,说明该模型对测试集的预计效果很好。

>names(model)#模型中包含的所有输出结果

[1]\\\

[13]\其中:value表示迭代最终值。

wts表示模型在迭代过程中所寻觅到的最优权重值,其取值为系统随机生成,即每次建模所使用的迭代初始值都是不一致的。由此可以看出神经网络模型的灵活性很高。

convergence表示在模型建立的迭代过程中,迭代次数是否达到最大迭代次数。假使结果为1,则说明达到最大迭代次数;假使结果为0,则说明没有达到最大迭代次数。假使结果没有达到最大迭代次数,说明该模型可以被采用,否则,就要增大参数maxit的设定值,重新建模。

>model$convergence[1]0

该模型的convergence取值为0,说明该模型可以被采用。

2.模型优化

虽然上述模型的各项指标可能都满足要求,但是,隐蔽层中节点的个数和迭代次数都是人为设定的,随着两者数值的改变建立的模型也不尽一致,所以我们需要寻觅两者的最优值,使其对应的模型最优。下面通过编写函数来实现这一目的。

8

(1).寻觅隐蔽层节点个数最优值

>f=function(n){

+e=matrix(0,2,n,dimnames=list(c('误判概率',

+'迭代终值'),c(1:n)))#定义一矩阵,用于存放结果+for(iin1:n){

+model=nnet(x[1:4],class.ind(y),data=x,size=i,+decay=5e-4,maxit=1000)+pred=predict(model,p)+pnew=max.col(pred)+table(y,pnew)

+e_ef(10)#将n取为10输出结果:

12345误判概率0.25925930.20370370.18518520.07407410.0370371

迭代终值20.70701215.36959815.7799998.23342796.5062853678910

误判概率0.01851850.03703710.0000000.03703710.0185185迭代终值4.49751954.66498322.7332964.39859893.2961255

9

结合矩阵以及折线图,可以看出当n=8的时候,误判率最小,同时迭代最终值也达到最小,说明当n=8即隐蔽层节点个数为8时,模型的拟合效果最好,对测试集做出的预计效果也最好。

(2).寻觅迭代次数最优值

>ff=function(n){+e=0

+for(iin1:n){

+model=nnet(x[,1:4],class.ind(x$y),data=x,+size=8,decay=5e-4,maxit=i)+e[i]=sum(max.col(predict(model,x[,1:4]))!=+x$y)/nrow(x)+}

+print(plot(1:n,e,'l',ylab='误判概率',xlab='训练周+期',col='blue',ylim=c(min(e),max(e))))}

ff(1000)

从模型对测试集的误判率随训练周期的变化曲线可以看出,误判概率随着训练周期的增大先是急速下降,后趋于平稳。但是也有出现反向增长的现象,可能与训练集和测试集的选取有关。不过,从图中整体的变化趋势可以看出曲线的拐点在maxit=200处,所以maxit的最优值可能为200。

3.建模重建

取size=8,maxit=200,重新建立神经网络模型,得到如下结果:

10

>model1=nnet(x[,1:4],class.ind(y),data=x,size=8,+decay=5e-4,maxit=200)>pred4=predict(model1,p)>pnew1=max.col(pred4)

>e_e1e_e1

[1]0.05555556

>model1$convergence[1]1

误判概率为5.6%,较上次模型有所下降,但是模型的迭代次数达到了最大迭代次数,因此该模型可能还不是最优的。

取size=8,maxit=1000,重新建立神经网络模型,得到如下结果:>model2=nnet(x[1:4],class.ind(y),data=x,size=8,+decay=5e-4,maxit=1000)>pred5=predict(model2,p)>pnew2=max.col(pred5)>table(y,pnew2)Pnew2

y12341350002060030020400011

>e_e2e_e2[1]0

>model2$convergence[1]0

从输出结果来看,该模型的误判率为0,迭代次数也没有达到最大值,说明该模型可以被采用,在样本量如此小的条件下,建立的模型能有如此高的预计精度,确实不得不让人佩服神经网络模型的强大。

然而,由于训练集样本和测试集样本完全一致,所以两者的特征也完全一样,可能由于这个原因,才会使得测试集的预计结果与实际值重合度如此高;况且由于神经网络模型太过灵活,当训练周期很长的时候,建立出来的神经网络模型可能会记住训练集的几乎所有信息,而测试集又和训练集一致,所以,模型的误判率才会如此低。

尽管在此次建立神经网络模型的过程中出现了这么多问题,但并不能够掩盖神经网络模型的强大之处,所以,神经网络模型还是值得我们深入学习和深入研究的。

4.模型应用

当运用此模型进行预计时,需要注意的是,首先必需对用来预计的自变量进行标准化,以消除数量级和量纲的影响。然后直接带入模型给出预计结果。

11

五.总结与建议

通过此次课程设计,使我更加扎实的把握了有关如何使用R语言进行统计分析方面的知识,在设计过程中虽然遇到了一些问题,但经过一次又一次的思考,一遍又一遍的检查终究找出了原因所在,也暴露出了前期我在这方面的知识欠缺和经验不足。实践出真知,通过亲自动手制作,让我根绝把握的知识不再是纸上谈兵。

回想这次课程设计,学到了好多好多的东西,不仅稳定了以前所学过的知识,而且通过翻阅书籍也学到了好多在课堂上所没有学到过的知识,例如:BP神经网络模型是如何建立的。通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正提高自己的实际动手能力和独立思考的能力。

通过课程设计的训练,让我进一步学习和把握了对R语言编程艺术的更深理解,在对函数进行设计和编写的过程中,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论