下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、智能算法:f(x,y) = 0.5-sin2 Jn。+ y2 -0.5(l + 0.01(x2library(mcga)#mcga的形式#function (popsize, chsize, crossprob = 1, mutateprob = 0.01, elitism = 1, minval, maxval, maxiter =10, evalFunc)#参数说明:#popsize,个体数量,即染色体数目#chsize,基因数量,限参数的数量#crossprob,交配概率,默认为 1.0#mutateprob,突变概率,默认为 0.01#elitism,精英数量,直接复制到下一代的染色体
2、数目,默认为 1#minval ,随机生成初始种群的下边界值#maxval,随机生成初始种群的上边界值#maxiter,繁殖次数,即循环次数,默认为 10#evalFunc,适应度函数,用于给个体进行评价#接下来,我们给定一个优化的问题,通过mcga()函数,计算最优化的解。#定义适应度函数f<-function(x)-0.5+(sin(sqrt(x1A2+x2A2)A2-0.5)/(1+0.01*(x1A2+x2A2)A2)m=mcga(popsize=200, chsize=2,minval=c(-10,-10), maxval=c(10,10),evalFunc=f)print(m
3、$population1,)f(m$population1,)运行结果:1 0.0000000005924311244 -0.00000000100279907842 -1例2求解下列优化问题max f(x) = 20+x12+x22-10(cos(2x1)+cos(2 二x2)x1 (0, 10)x2 (0, 5)library(genalg)#定义适应度函数f<-function(x)20+x1A2+x2A2-10*(cos(2*pi*x1)+cos(2*pi*x2)#代码省略#定义监控函数 monitor <- function(obj)# plot the populati
4、onxlim = c(obj$stringMin1, obj$stringMax1);ylim = c(obj$stringMin2, obj$stringMax2); plot(obj$population, xlim=xlim, ylim=ylim ) # 运行遗传算法m2 = rbga(c(5*pi,-20*pi), c(20*pi,-4*pi), popSize=100, iters=1000, evalFunc=f, mutationChance=0.01, verbose=TRUE, monitorFunc=monitor )m2$population1, f(m2$populat
5、ion1,)运行结果:# m2$population1,115.84860252 -12.97406607> f(m2$population1,)1 423.8304683例3求解非线性规划问题,其目标函数为非连续的四元函数:4min z =Z 一(1xi)xi sin(10nxi) 0 < x < 1 i 1library(gafit) f<-function(x) if(all(0<x)&all(x<1) y=sum(-abs(1-x)*xA2*sin(10*pi*x) elsey=Inf y gafit(expression(f(x),ther
6、mal=0.005,samples=100, list(x=rep(0.2,4),maxiter=500) $x1 0.6502031265 0.7486793571 0.6502235734 0.6502076160 attr(,"score")1 -0.5843848993attr(,"count")1 500神经网络:setwd("E:/数据及程序/chapter5/示例程序")# 读入数据Data <- read.csv("./data/sales_data.csv"), 2:5# 数据命名libra
7、ry(nnet)colnames(Data) <- c("x1", "x2", "x3", "y")# 最终模型model1 <- nnet(y ., data = Data, size = 6, decay = 5e-4, maxit = 1000)pred <- predict(model1, Data, 1:3, type = "class")(P <- sum(as.numeric(pred = Data$y) / nrow(Data)table(Data$y,
8、pred)prop.table(table(Data$y, pred), 1)我们将要使用 neuralnet 包来创建神经网络模型, 并创建一个线性回归模型来与此进行比较。数据集:我们将调用 MASS 包来使用 Boston 数据集。 Boston 数据集就是关于Boston 郊区的房价的数据集。 我们的目标就是通过使用其它可行的连续变量来预测为个人所有的房屋的房价的中位 数。set.seed(500)library(MASS) data <- Boston首先,我们需要确认任何数据都不含有缺失值,而我们则要对此数据集进行一定的修正。apply(data,2,function(x) s
9、um(is.na(x)很好, 没发现任何缺失值。现在,我们要把这个数据集, 以随机的方式把它们划分为训练数据集和测试数据集, 然后在此创建一个线性模型, 并使用测试数据集进行测试。在这里,我们将使用 glm() 函数而不是lm() 函数, 那是因为后面我们要对线性模型进行交叉检验的时候,glm() 函数会更有效。index <- sample(1:nrow(data),round(0.75*nrow(data)train <- dataindex,test <- data-index,lm.fit <- glm(medv., data=train)summary(lm.
10、fit)pr.lm <- predict(lm.fit,test)MSE.lm <- sum(pr.lm - test$medv42)/nrow(test) sample(x,size) 函数简单的输出了一个向量, 它是从 x 向量当中, 基于一个特定的大小随机选出来的一个模型。在默认情况下,抽样时我们无需对此进行转换: index 就能很好体现这个样本就是随机抽样了。由于我们要处理线性回归模型,我们将要使用均值方差( MSE )作为一个指标来预测我们模型的拟合程度有多少。对拟合一个神经网络模型做相应的准备在拟合一个神经网络模型之前, 我们需要做一些准备工作。 毕竟, 神经网络的训
11、练和调试不是这么容易的。第一步, 我们需要对数据集进行预处理。 在训练神经网络模型之前, 对数据集进行准则化处理是一个不错的选择。 我不想在这里强调这一步有多么的重要: 基于你的数据集, 如果没有对数据集进行准则化处理, 这可能会导致一些对分析毫无意义的结果的出现, 使得训练过程进行的很艰难(大多数情况下, 算法在到达最大允许迭代次数之前,是不会聚合的) 。 当然,你可以使用不同的方法来分析这个数据( z 准则化、最大最小测试等等) 。这里,我采用最大最小值得方法,并基于区间0,1 来测量数据。通常来说,基于区间0,1或-1,1进行测量似乎能得到更好的结果。因此,在进行下一步操作之前,我们先测
12、量和分离数据集:maxs <- apply(data, 2, max)mins <- apply(data, 2, min)scaled <- as.data.frame(scale(data, center = mins, scale = maxs - mins)train_ <- scaledindex,test_ <- scaled-index,记住, scale 函数返回的结果是一个矩阵。因此,我们需要把它强制转换成数据框的格式。我目前所获悉的, 就是目前还没有一个绝对的准则能让我们知道我们要用多少层和多少个神经元, 就算目前已经有一些被大部分人所接受的一
13、些重要准则可以进行辅助也不能解决这样的问题。通常来说, 如果所有的都需要, 一个隐含的层就可以进行大量使用了。一旦我们能确认神经元的数量,它应当处在输入层和输出层之间,通常情况下,输入层占其中的 2/3 。最少, 我那些短暂的进行一次又一次测试的经历似乎是最好的答案, 因为我们无法保证这里的任何一条规则都能在最好的情况下符合你的模型。因为这是一个用处不大的实例,我们将根据这个规则对两个层进行隐藏。其中,输入层有13 个输入值,两个隐藏层分别有5 个和 3 个神经元,而输出层,因为我们是做回归分析,所以,只有一个输出值。现在,我们拟合一下这个网络:library(neuralnet) n <
14、;- names(train_)f <- as.formula(paste("medv ", paste(n!n %in% "medv", collapse = " + ")nn <- neuralnet(f,data=train_,hidden=c(5,3),linear.output=T) 记住这么两点:1 .基于某些原因,公式y.不可以在neuralnet()函数当中使用。首先,你必须要写一个完整的 公式,并把它当作是一个参数用到拟合函数当中。2 .隐藏的变量可以使用一个数值型向量来设定每个隐藏层的神经元数目,而参数
15、 linear.output用于指定我们是否要进行回归分析,此时,我们设定参数linear.output=TRUE ,或者,分类,linear.output=FALSE 。nerualnet 包提供了一个很好的作图工具:plot(nn)图中的黑线表示每一层与其相关权重直接的关系, 而蓝色线表示拟合过程中, 每一步被添加 到蓝色线上的误差项。而这些误差可以表示一个线性模型的误差区间。这个网络本质上就是一个黑匣子。因此,对于它的拟合效果、权重和模型说太多。不过,我们可以确信,这个训练算法实现了聚合的效果。因此,我们可以使用这个模型进行分析。使用神经网络预测私有房屋的价格现在,我们可以对测试集里的值
16、进行预测并计算它的均值方差( MSE )。记住,神经网络会输出一个准则化预测。 所以, 我们需要重新对它进行测量和分析, 以便于做一些有意义的比 较。pr.nn <- compute(nn,test_,1:13)pr.nn_ <- pr.nn$net.result*(max(data$medv)-min(data$medv)+min(data$medv)test.r <- (test_$medv)*(max(data$medv)-min(data$medv)+min(data$medv)MSE.nn <- sum(test.r - pr.nn_42)/nrow(test
17、_)现在,我们比较它们俩的均值误差。print(paste(MSE.lm,MSE.nn)1 "21.6297593507225 15.7518370200153"显然, 在预测私人房屋价格的时候, 神经网络模型的性能优于线性模型。再次说明,我们任然要小心就是因为它的结果就是基于上面训练数据集分组时的性能。 下面, 做完图以后, 我 们会进行一个快速的交叉检验来使得结果更具有说服力。基于测试数据集的神经网络和线性模型的第一步可视化操作的图像如下:par(mfrow=c(1,2)plot(test$medv,pr.nn_,col='red',main='
18、Real vs predicted NN',pch=18,cex=0.7)abline(0,1,lwd=2)legend('bottomright',legend='NN',pch=18,col='red', bty='n')plot(test$medv,pr.lm,col='blue',main='Real vs predicted lm',pch=18, cex=0.7)abline(0,1,lwd=2)legend('bottomright',legend='L
19、M',pch=18,col='blue', bty='n', cex=0.7)通过对其图像进行检验, 我们可以得知, 由神经网络所作出的预测 (一般情况下) 要比那些线性模型所拟合出来的预测让散点更加靠近拟合线(一条完美的准线,它表示MSE 为 0 。因此,这种预测的结果是理想的) 。plot(test$medv,pr.nn_,col='red',main='Real vs predicted NN',pch=18,cex=0.7) points(test$medv,pr.lm,col='blue',pch
20、=18,cex=0.7) abline(0,1,lwd=2)legend('bottomright',legend=c('NN','LM'),pch=18,col=c('red','blue') 也许,下面的这个图像所做出来的比较更有用。(快速)交叉检验交叉检验是建立预测模型的另一个重要的步骤。 交叉检验的方法有好几种, 其基本思想就是 重复下面的过程几次:训练数据集分离1 .完成测试数据集分离2 .基于训练数据集拟合一个模型3 .用测试数据集测试模型4 .计算预测误差5 .重复这个过程K 次然后,计算平均误差,它
21、可以让我们获悉这个模型是怎样运作的。我们现在要对神经网络使用 for 循环语句来执行快速交叉检验,并使用 boot 包的 cv.glm() 函 数来检验线性模型。我目前所知道的是,在R 中,目前还没有一个已经构建好的函数来对这种神经网络进行交叉检验。如果你知道R 里有这种函数,请你在留言板那里告诉我。下面,我们采用 10 次交叉检验的方法来验证线性模型的 MSE : library(boot) set.seed(200)lm.fit <- glm(medv.,data=data) cv.glm(data,lm.fit,K=10)$delta11 23.83560156对于这个网络,我们要
22、知道我是这样分离这些数据的:重复10 次进行随机的90% 的训练数据集和10% 的测试数据集。而且,我也plyr 包里初始化进度条,原因在于我想要关注这个过程的执行情况,因为神经网络的拟合过程可能需要一点时间。set.seed(450) cv.error <- NULL k <- 10 library(plyr)pbar <- create_progress_bar('text') pbar$init(k) for(i in 1:k)index <- sample(1:nrow(data),round(0.9*nrow(data) train.cv &l
23、t;- scaledindex, test.cv <- scaled-index,nn <- neuralnet(f,data=train.cv,hidden=c(5,2),linear.output=T)pr.nn <- compute(nn,test.cv,1:13)pr.nn <- pr.nn$net.result*(max(data$medv)-min(data$medv)+min(data$medv)test.cv.r <- (test.cv$medv)*(max(data$medv)-min(data$medv)+min(data$medv)cv.er
24、rori <- sum(test.cv.r - pr.nn)A2)/nrow(test.cv)pbar$step()拟合过程结束以后,我们可以计算它的 MSE 均值并把结果进行可视化。mean(cv.error)cv.error17.640652805 6.310575067 15.769518577 5.730130820 10.520947119 6.1211608406.389967211 8.004786424 17.369282494 9.412778105作图代码如下:boxplot(cv.error,xlab='MSE CV',col='cyan
25、39;,border='blue',names='CV error (MSE)',main='CV error (MSE) for NN',horizontal=TRUE)正如你在上图看到的那样,我们求出的这个神经网络的 MSE 均值为 10.33 ,它比其中一个线性模型所算出来的结果要低,就算这里看起来像是交叉检验中, MSE 的具体方差。这或许和数据集的分解方式有关, 又或者是网络当中权重的随机准则化有关。 通过多次以不同的方式模拟这个过程,你可以得到一个更精确的 MSE 估计值。模型最终解读的启示神经网络和黑匣子有很多相似的地方, 它对这些结果的解读比对一些诸如线性模型这样简单模型的结果要难。 因此, 最终结果将取决于你是怎样用这个网络的, 而你有可能用这样的原因进行解释。 而且, 正如你上面所看到的那样, 我们还需要做一些额外的步骤来拟合神经网络,而小小的变动可以引起结果上巨大的不同。我们将会模拟一组很简单的数据实现输入和输出,其中,输出的变量是独立分布的随机数,输入的变量则是输出变量的平方。本次试验中,将会训练10 个
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 地理水利工程题库及答案
- 后端开发工程师面试题及答案
- 杭州锦江集团招聘试题及答案
- 视频直播市场趋势研究
- 网络文学行业技术规范与营销策略
- 公务员面试面团面试题及答案
- 华夏航空秋招题库及答案
- 护士校招面试题及答案
- 公务员面试立意面试题及答案
- 海尔集团校招试题及答案
- 2025年甘肃省金昌市市直事业单位选调22人笔试考试备考试题及答案解析
- 加油站安全生产信息管理制度
- 窗口行风建设工作自查报告
- 国家电网招聘平台国家电网2026校园招聘考试笔试模拟试题及答案解析
- 孵化器从业人员考试试卷及答案解析
- 2025湖南常德金鹏印务有限公司招聘拟录用人员笔试历年参考题库附带答案详解
- 国家二级MSOffice高级应用机试(操作题)模拟试卷3(共156题)
- 华为ICT大赛中国区(实践赛)-昇腾AI赛道往年考试真题(附答案)
- 工商银行讨论面试题目及答案
- 2025中铁信息工程集团沈阳分公司招聘笔试历年常考点试题专练附带答案详解2套试卷
- 深圳市建设报建流程及资料准备指引
评论
0/150
提交评论