输入层-隐藏层-背景层-输出层
极限天气预报模型:预测每天的最高温度、最低温度、风速。数据集包含一年的日观测值,前十一个月训练,最后一个月的数据用来测试,45个隐藏层。
如何马上发现一个严重的错误:
提高水的质量。。。。。
require(RSNNS) require(quantmod) library(quantmod) data("UKLungDeaths",package = "datasets") par(mfrow=c(3,1)) plot(ldeaths,xlab="Year",ylab="Both sexes",main="Total") plot(mdeaths,xlab="Year",ylab="Males",main="Males") plot(fdeaths,xlab="Year",ylab="Females",main="Females") > par(mfrow=c(1,3)) > plot(ldeaths,xlab="Year",ylab="Both sexes",main="Total") > plot(mdeaths,xlab="Year",ylab="Males",main="Males") > plot(fdeaths,xlab="Year",ylab="Females",main="Females") > sum(is.na(ldeaths)) [1] 0 > ldeaths Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec 1974 3035 2552 2704 2554 2014 1655 1721 1524 1596 2074 2199 2512 1975 2933 2889 2938 2497 1870 1726 1607 1545 1396 1787 2076 2837 1976 2787 3891 3179 2011 1636 1580 1489 1300 1356 1653 2013 2823 1977 3102 2294 2385 2444 1748 1554 1498 1361 1346 1564 1640 2293 1978 2815 3137 2679 1969 1870 1633 1529 1366 1357 1570 1535 2491 1979 3084 2605 2573 2143 1693 1504 1461 1354 1333 1492 1781 1915 > class(ldeaths) [1] "ts" par(mfrow=c(1,3)) plot(ldeaths) x<-density(ldeaths) plot(x,main="UK total deaths from lung diseases") polygon(x,col="green",border = "black") boxplot(ldeaths,col="cyan",ylab="Number of deaths per month") y<-as.ts(ldeaths) y<-log(y) y<-as.ts(scale(y))#标准化 y<-as.zoo(y)#把y变成zoo class x1<-Lag(y,k=1) x2<-Lag(y,k=2) x3<-Lag(y,k=3) x4<-Lag(y,k=4) x5<-Lag(y,k=5) x6<-Lag(y,k=6) x7<-Lag(y,k=7) x8<-Lag(y,k=8) x9<-Lag(y,k=9) x10<-Lag(y,k=10) x11<-Lag(y,k=11) x12<-Lag(y,k=12) deaths<-cbind(x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12) deaths<-cbind(y,deaths) head(round(deaths,2),13) Series 1 Lag.1 Lag.2 Lag.3 Lag.4 Lag.5 Lag.6 Lag.7 Lag.8 Lag.9 Lag.10 1 1.51 NA NA NA NA NA NA NA NA NA NA 2 0.90 1.51 NA NA NA NA NA NA NA NA NA 3 1.10 0.90 1.51 NA NA NA NA NA NA NA NA 4 0.90 1.10 0.90 1.51 NA NA NA NA NA NA NA 5 0.07 0.90 1.10 0.90 1.51 NA NA NA NA NA NA 6 -0.62 0.07 0.90 1.10 0.90 1.51 NA NA NA NA NA 7 -0.48 -0.62 0.07 0.90 1.10 0.90 1.51 NA NA NA NA 8 -0.91 -0.48 -0.62 0.07 0.90 1.10 0.90 1.51 NA NA NA 9 -0.75 -0.91 -0.48 -0.62 0.07 0.90 1.10 0.90 1.51 NA NA 10 0.17 -0.75 -0.91 -0.48 -0.62 0.07 0.90 1.10 0.90 1.51 NA 11 0.38 0.17 -0.75 -0.91 -0.48 -0.62 0.07 0.90 1.10 0.90 1.51 12 0.85 0.38 0.17 -0.75 -0.91 -0.48 -0.62 0.07 0.90 1.10 0.90 13 1.39 0.85 0.38 0.17 -0.75 -0.91 -0.48 -0.62 0.07 0.90 1.10 Lag.11 Lag.12 1 NA NA 2 NA NA 3 NA NA 4 NA NA 5 NA NA 6 NA NA 7 NA NA 8 NA NA 9 NA NA 10 NA NA 11 NA NA 12 1.51 NA 13 0.90 1.51 deaths<-deaths[-(1:12),] n=nrow(deaths) n [1] 60 set.seed(465) n_train<-45 train<-sample(1:n,n_train,FALSE) inputs<-deaths[,2:13] outputs<-deaths[,1] #学习率0.1,最大步长1000 fit<-elman(inputs[train],outputs[train],size=c(1,1),learnFuncParams = c(0.1),maxit=1000) par(mfrow=c(1,1)) plotIterativeError(fit) 误差曲线下降的很快,大约500次迭代。 > summary(fit) SNNS network definition file V1.4-3D generated at Wed Mar 08 10:00:58 2017 network name : RSNNS_untitled source files : no. of units : 17 no. of connections : 20 no. of unit types : 0 no. of site types : 0 learning function : JE_BP update function : JE_Order unit default section : act | bias | st | subnet | layer | act func | out func ---------|----------|----|--------|-------|--------------|------------- 1.00000 | 0.00000 | i | 0 | 1 | Act_Logistic | Out_Identity ---------|----------|----|--------|-------|--------------|------------- unit definition section : no. | typeName | unitName | act | bias | st | position | act func | out func | sites ----|----------|----------|----------|----------|----|----------|--------------|----------|------- 1 | | inp1 | -0.98260 | 0.15181 | i | 1, 1, 0 | Act_Identity | | 2 | | inp2 | -1.37812 | -0.32468 | i | 1, 2, 0 | Act_Identity | | 3 | | inp3 | -1.32325 | 0.09987 | i | 1, 3, 0 | Act_Identity | | 4 | | inp4 | -1.05630 | 0.63419 | i | 1, 4, 0 | Act_Identity | | 5 | | inp5 | -0.95449 | 0.02857 | i | 1, 5, 0 | Act_Identity | | 6 | | inp6 | -0.53901 | -0.05401 | i | 1, 6, 0 | Act_Identity | | 7 | | inp7 | 0.28829 | -0.04926 | i | 1, 7, 0 | Act_Identity | | 8 | | inp8 | 0.93013 | 0.77409 | i | 1, 8, 0 | Act_Identity | | 9 | | inp9 | 0.97351 | 0.66627 | i | 1, 9, 0 | Act_Identity | | 10 | | inp10 | 1.56596 | 0.02014 | i | 1,10, 0 | Act_Identity | | 11 | | inp11 | 0.81645 | -0.52729 | i | 1,11, 0 | Act_Identity | | 12 | | inp12 | -0.88288 | -0.15885 | i | 1,12, 0 | Act_Identity | | 13 | | hid11 | 0.16206 | -0.55551 | h | 7, 1, 0 ||| 14 | | hid21 | 0.18053 | -0.68042 | h | 13, 1, 0 ||| 15 | | out1 | -0.54759 | 1461.39380 | o | 19, 1, 0 | Act_Identity | | 16 | | con11 | 0.20030 | 0.50000 | sh | 4,14, 0 | Act_Identity | | 17 | | con21 | 0.31741 | 0.50000 | sh | 10,14, 0 | Act_Identity | | ----|----------|----------|----------|----------|----|----------|--------------|----------|------- connection definition section : target | site | source:weight -------|------|--------------------------------------------------------------------------------------------------------------------- 13 | | 16: 0.70943, 12: 1.09644, 11:-0.51132, 10: 0.63319, 9: 0.71429, 8:-0.02138, 7: 0.22678, 6:-1.44620, 5:-1.14437, 4:-0.21490, 3: 0.84608, 2: 1.81400, 1: 0.00419 14 | | 17: 1.04794, 13:-8.08589 15 | | 14:-3.03318 16 | | 16: 0.30000, 13: 1.00000 17 | | 17: 0.30000, 14: 1.00000 -------|------|--------------------------------------------------------------------------------------------------------------------- 第一列表示神经数,整个神经网络有17层。第三列描述神经网络类型,12个输入,2个隐藏层,2个context layer背景层,一个输出层。第四列和第五列给出每个神经的函数值。例如,第一个神经的act为-0.98260,a bias of 0.15181使用测试集测试:
pred<-predict(fit,inputs[-train]) plot(outputs[-train],pred) > cor(outputs[-train],pred)^2 [,1] [1,] 0.7845