全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 R语言论坛
18688 6
2014-05-04
用R包nnet怎么预测未来的数据?
如下数据,我想预测2013年的total值怎么做呢?现在能做到的是根据2003-2012年的历史数据通过神经网络训练出
这十年的新的total值,
#代码如下:
#原始数据:
   date total renkou renjunyongshui gongyeliyonglv guangaixishu
1  2003 18.57 458.03          497.8             21         0.49
2  2004 18.30 457.28          510.6             29         0.48
3  2005 18.08 454.40          498.5             36         0.49
4  2006 19.56 450.52          500.4             43         0.53
5  2007 20.16 446.98          522.4             54         0.52
6  2008 20.79 445.56          560.8             69         0.54
7  2009 20.82 444.65          593.7             75         0.56
8  2010 21.12 439.39          597.1             81         0.57
9  2011 20.75 438.61          718.2             71         0.56
10 2012 21.26 440.69          629.6             76         0.59
setwd("C:/Users/MS/Desktop/Rtest")#更变工作目录
library(foreign)#加载foreign包读取.csv文件
library(nnet)#加载nnet包
data=read.csv("data_yuce.csv",header=T)#读入历史数据,如上
norm.data=scale(data[,c(2:6)])
nn=nnet(total~.,norm.data,size=10,decay=0.01,maxit=1000,linout=T,trace=F)
norm.preds <- predict(nn,norm.data)#对用total(总用水量)进行预测
nmse2 <- mean((norm.preds-scale(norm.data[,2]))^2)/mean((mean( scale(norm.data[,2]))- scale(norm.data[,2]))^2)
nmse2#计算出相对误差
preds=norm.preds*sd(data[,2])+mean(data[,2])#还原标准化的数据
preds
(preds-data[,2])/data[,2]*100#计算出误差
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2014-5-4 23:26:52
建立建立一个模型,例如:2001至2003数据预测2004年数值,如此类推,训联好网格参数,就可以用2010至2012的数值预测2013年数值。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2014-5-6 15:20:41
楼主 你的这个问题解决了吗 我也遇到了这个难题,能不能分享一下?
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2014-5-11 11:08:12
大大大懒 发表于 2014-5-6 15:20
楼主 你的这个问题解决了吗 我也遇到了这个难题,能不能分享一下?
问题解决了,在norm.preds <- predict(nn,norm.data)中需要更换norm.data数据集,在上面贴的代码中norm.data是原始的训练数据集,在新的数据集里面就不要包括total列就行了,记得新的数据集也要scale一下哈,有问题再联系。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2014-12-24 09:26:27
你好,我也在想学R中的神经网络。想问一下你的size怎么确定?是试不同的size,最后找一个使得测试样本的误差最小的吗?
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2017-3-1 00:40:06
成年蝌蚪 发表于 2014-12-24 09:26
你好,我也在想学R中的神经网络。想问一下你的size怎么确定?是试不同的size,最后找一个使得测试样本的误差 ...
err.train = 0
err.test = 0
for(i in 1:25)
{set.seed(111)
  model=nnet(loan_status~.,data=train,rang=r,size=i,decay=1e-5,matrix=400)
  pred.train = predict(model,train[,1:23],type = "class")
  pred.test = predict(model,test[,1:23],type = "class")
  err.train=sum(pred.train!=train[,24])/n.train
  err.test=sum(pred.test!=test[,24])/n.test
}

plot(1:25,err.train,'l',col=1,lty=1,ylab="模型误判率",xlab="隐层神经元个数",
     ylim=c(min(min(err.train),min(err.test)),max(max(err.train),max(err.test))))
lines(1:25,err.test,col=1,lty=3)
points(1:25,err.train,col=1,pch="+")
points(1:25,err.test,col=1,pch="o")
legend(10,0.07,"测试集误判率",bty="n",cex=1.1)
legend(7,0.058,"训练集误判率",bty="n",cex=1.1)
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群