tfb*_*tfb 7 r machine-learning predict neural-network xts
我对R的不了解导致我停止工作并寻求你的帮助.我正在寻找从一些时间序列数据构建神经网络,然后使用单独的数据和训练的神经网络返回的模型构建预测.
我创建了一个xts包含因变量nxtCl(一天的远期收盘价格)和自变量(一组相应的价格和技术指标).
我分为xts两个,一组是训练数据,另一组是测试/预测,分别是miData.train和miData.test.随后我将这两个xts改为缩放数据帧.
miData.train <- scale(as.data.frame(miData.train))
miDate.test <- scale(as.data.frame(miData.test))
Run Code Online (Sandbox Code Playgroud)
使用该包nnet我可以从训练数据构建一个神经网络:
nn <- nnet(nxtCl ~ .,data=miData.train,linout=T,size=10,decay=0.001,maxit=10000)
Run Code Online (Sandbox Code Playgroud)
str()此返回的公式对象的输出是:
> str(nn)
List of 18
$ n : num [1:3] 11 10 1
$ nunits : int 23
$ nconn : num [1:24] 0 0 0 0 0 0 0 0 0 0 ...
$ conn : num [1:131] 0 1 2 3 4 5 6 7 8 9 ...
$ nsunits : num 22
$ decay : num 0.001
$ entropy : logi FALSE
$ softmax : logi FALSE
$ censored : logi FALSE
$ value : num 4.64
$ wts : num [1:131] 2.73 -1.64 1.1 2.41 1.36 ...
$ convergence : int 0
$ fitted.values: num [1:901, 1] -0.465 -0.501 -0.46 -0.431 -0.485 ...
..- attr(*, "dimnames")=List of 2
.. ..$ : chr [1:901] "2005-07-15" "2005-07-18" "2005-07-19" "2005-07-20" ...
.. ..$ : NULL
$ residuals : num [1:901, 1] -0.0265 0.0487 0.0326 -0.0384 0.0632 ...
..- attr(*, "dimnames")=List of 2
.. ..$ : chr [1:901] "2005-07-15" "2005-07-18" "2005-07-19" "2005-07-20" ...
.. ..$ : NULL
$ call : language nnet.formula(formula = nxtCl ~ ., data = miData.train, inout = T, size = 10, decay = 0.001, maxit = 10000)
$ terms : language nxtCl ~ Op + Hi + Lo + Cl + vul + smaten + smafif + smath + vol + rsi + dvi
$ coefnames : chr [1:11] "Op" "Hi" "Lo" "Cl" ...
$ xlevels : Named list()
- attr(*, "class")= chr [1:2] "nnet.formula" "nnet"
Run Code Online (Sandbox Code Playgroud)
然后我尝试使用此模型运行预测函数,nn并miData.test使用以下函数将数据保持分离:
preds <- predict(object=nn, miData.test)
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
Error in terms.default(object, data = data) :
no terms component nor attribute
Run Code Online (Sandbox Code Playgroud)
跑terms.default在miData.test我看到我的数据帧没有任何属性:
terms.default(miData.test)
Error in terms.default(miData.test) : no terms component nor attribute
Run Code Online (Sandbox Code Playgroud)
但这就是预测不会发生的原因吗?
miData.test的名称与以下条款相符nn:
> nn$terms
nxtCl ~ Op + Hi + Lo + Cl + vul + smaten + smafif + smath + vol +
rsi + dvi
> names(miData.test)[1] "Op" "Hi" "Lo" "Cl" "vul" "smaten" "smafif" "smath" "vol" "rsi" "dvi" "nxtCl"
Run Code Online (Sandbox Code Playgroud)
而且,就结构而言,数据nn与首先用于构建的数据完全相同.我尝试添加自己的命名属性miData.test,匹配条款nn但不起作用.该str()的miData.test回报:
> str(miData.test)
'data.frame': 400 obs. of 12 variables:
$ Op : num 82.2 83.5 80.2 79.8 79.8 ...
$ Hi : num 83.8 84.2 83 79.9 80.2 ...
$ Lo : num 81 82.7 79.2 78.3 78 ...
$ Cl : num 83.7 82.8 79.2 79 78.2 ...
$ vul : num 4.69e+08 2.94e+08 4.79e+08 3.63e+08 3.17e+08 ...
$ smaten: num 84.1 84.1 83.8 83.3 82.8 ...
$ smafif: num 86.9 86.8 86.7 86.6 86.4 ...
$ smath : num 111 111 111 110 110 ...
$ vol : num 0.335 0.341 0.401 0.402 0.382 ...
$ rsi : num 45.7 43.6 36.6 36.3 34.7 ...
$ dvi : num 0.00968 0.00306 -0.01575 -0.01189 -0.00623 ...
$ nxtCl : num 82.8 79.2 79 78.2 77.4 ...
Run Code Online (Sandbox Code Playgroud)
predict()在此实例中获得工作的任何帮助或见解将不胜感激.谢谢.
这是一些可重现的代码.把它放在一起,我已经"删除"了错误.不幸的是,尽管它现在有效,但我对之前导致问题的原因并不明智:
require(quantstrat)
require(PerformanceAnalytics)
require(nnet)
initDate <- "2004-09-30"
endDate <- "2010-09-30"
symbols <- c("SPY")
getSymbols(symbols, from=initDate, to=endDate, index.class=c("POSIXt","POSIXct"))
rsi <- RSI(Cl(SPY))
smaTen <- SMA(Cl(SPY))
smaFif <- SMA(Cl(SPY),n=50)
nxtCl <- lag(Cl(SPY),-1)
tmp <- SPY[,-5]
tmp <- tmp[,-5]
miData <- merge(tmp,rsi,smaTen,smaFif,nxtCl)
names(miData) <- c("Op","Hi","Lo","Cl","rsi","smaTen","smaFif","nxtCl")
miData <- miData[50:1512]
scaled.miData <- scale(miData)
miData.train <- as.data.frame(scaled.miData[1:1000])
miData.test <- as.data.frame(scaled.miData[1001:1463])
nn <- nnet(nxtCl ~ .,data=miData.train,linout=T,size=10,decay=0.001,maxit=10000)
preds <- predict(object=nn, miData.test)
Run Code Online (Sandbox Code Playgroud)