R中神经网络的实现

神经网络的实现


神经网络的原理(后补),可以查阅张铃教授的相关文章。以下主要讲的是前馈神经网络在R中的实现,目前主要有nnet,neuralnet,AMORE等包,以下以AMORE为例。
归一化函数: x − m i n ( x ) ( m a x ( x ) − m i n ( x ) ) \frac{x-min(x)}{(max(x)-min(x))} (max(x)min(x))xmin(x)
还原: m i n ( x ) + X ∗ ( m a x ( x ) − m i n ( x ) ) min(x)+X*(max(x)-min(x)) min(x)+X(max(x)min(x))
  • 归一化函数premnmx,
premnmx<-function(x){
	X<-c()
	max=apply(x,2,max)
	min<-apply(x,2,min)
	for(i in 1:nrow(x)){
		X<-rbind(X,(x[i,]-min)/(max-min))}
	AA<-list(max=max,min=min,X=X)
	return(AA)}
  • 去归一化函数postmnmx
postmnmx<-function(x,max,min)
{	X<-c()
	for(i in 1:nrow(x)){
	X=rbind(X,x[i,]*(max-min)+min)}
return(X)}
  • 预测数据格式化pnew_premnmx
pnew_premnmx<-function(x,max,min){
	X<-c()
	for(i in 1:nrow(x)){
	X=rbind(X,(x[i,]-min)/(max-min))}
return(X)}
读取数据,并进行归一化处理
Car<-file.choose()
Car<-read.csv(Car,header=TRUE)
#训练数据集P
P<-Car[,2:4]
#目标值Target
Target<-Car[,5:6]
#做归一化处理
#归一化训练数据集p
p<-premnmx(P)
#归一化目标数据值target
target<-premnmx(Target)
加载并训练模型
  • 加载神经网络包
library(AMORE)
net<-newff(n.neurons = c(1,3,2,8,3,2),learning.rate.global = 0.005,momentum.global=0.05,error.criterium = "LMS",    
           hidden.layer = "tansig",output.layer = "purelin",method = "ADAPTgdwm",Stao = NA)
#输入层三个结点,隐藏层8个结点,输出层2个结点,学习率0.035,误差标准LMS
result=train(net,p$X,target$X,error.criterium = "LMS",report = TRUE,show.step = 3000,n.shows = 5)
y1<-sim(result$net,p$X)
预测数据
  • 预测数据集
Pnew<-matrix(c(73.59,3.9,0.98,75.55,4.1,1.02),ncol=3,byrow=TRUE)
  • 归一化
pnew<-pnew_premnmx(Pnew,p$max,p$min)
  • 仿真
y2<-sim(result$net,pnew)
  • 预测数据去格式化
Y2<-postmnmx(y2,target$max,target$min)
预测曲线

神经网络拟合和预测曲线

par(mar=c(5,3,4,5))
par(mfrow=c(1,2))
plot(Car[,1],target$X[,1],col="red",type="b",pch="*",xlim=c(1990,2015),ylim=c(0,1.5),lwd=1.5)
points(Car[,1],y1[,1],col="green",pch="+")
points(c(2010,2011),y2[,1],pch="x",col='blue',cex=0.8)
lines(c(Car[-1,1],2010,2011),c(y1[-1,1],y2[,1]),col="blue",type="b",pch="x",lwd=1.5,cex=0.8)
legend(1990,1.2,pch=c("*","+","x"),col=c("red","green","blue"),legend=c("初始拟合","训练拟合","新数据预测"))
title("pop_traffic" )
plot(Car[,1],target$X[,2],col="red",type="b",pch="*",xlim=c(1990,2012),ylim=c(0,1.5))
points(Car[,1],y1[,2],col="green",pch="+")
points(c(2010,2011),y2[,2],pch="x",col='blue',cex=0.8)
lines(c(Car[-1,1],2010,2011),c(y1[-1,2],y2[,2]),col="blue",type="b",pch="x",lwd=1.5,cex=0.8)
legend(1990,1.2,pch=c("*","+","x"),col=c("red","green","blue"),legend=c("初始拟合","训练拟合","新数据预测"))
title("car_traffic" )

![b](file:///C:/Users/Administrator/Desktop/b.PNG “神经网络”)

回归模型
model1<-lm(pop_trafic~pop+car+square,data=Car)
model2<-lm(th_traffic~pop+car+square,data=Car)
colnames(Pnew)<-c("pop","car","square")
Y11<-predict(model1,as.data.frame(Pnew))
Y22<-predict(model2,as.data.frame(Pnew))
Y<-matrix(0,ncol=2,nrow=2)
Y[,1:2]<-c(Y11,Y22)
结果比较
1神经网络/2回归Timepop_trafficcar_traffic
1201053902.6528797.78
1201155222.3529566.71
2201055081.9129002.62
2201156506.8330169.88
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值