# создаем синус make.sin <- function(){ t <- seq(0,50,0.1) s <- sin(t) return(s) } S <- make.sin()
noise <- rnorm(length(S)) S <- (S+noise)+1000
# х енкель для создания скользящего окна hankel <- function(data, r=5) { do.call(cbind, lapply(0:(r-1),function(i) { data[(i+1):(length(data)-(r-1-i))]}))} S <- hankel(S)
# делаем зиг и целевую с него library(TTR) make.zz <- function(ch=0.2){ zz <- ZigZag(S[,ncol(S)], change = ch, percent = T, retrace = F, lastExtreme = T) n <- 1:length(zz); for(i in n) { if(is.na(zz[i])) zz[i] = zz[i-1]} dz<-c(NA,diff(zz)) sig<-ifelse(dz>0, 1, ifelse(dz<0, 0, NA)) return(list(label=sig , zz=zz)) } Y <- make.zz()
layout(1:2) # рисуем для наглядности синусоиду , # зигзаг на ней и внизу бинарный сигнал бай/сел plot(S[,ncol(S)],t="l") lines(Y$zz,col=4,lwd=2) plot(Y$label ,t="l")
# подготовка данных dat <- na.omit( cbind.data.frame(var=S, label=Y$label) )
label <- as.factor(dat$label) dat <- dat[,-ncol(dat)]
# тренировки модели tr <- 1:400 ts <- 401:nrow(S)
library(randomForest) # тренируем модель как есть те целевая # не заглядывает в будущее на один шаг
说话直截了当,今天是星期天,不着急,一切都有一定的道理。我不认为你的方法是庸医,它是一个有基本基础的好方法。
有什么好说的,我可没说什么 "我的 "方法。
你在笑什么,那就一起告诉我。
谢谢你,我已经笑了。
谢谢你,我已经笑过了。
最好能看到计算的结果
但我建议你检查自己的工具,因为问题可能在于个别功能实现的细微差别。例如,ZZ 在 "分类视图 "中的显示可能会向右移动一格,但在我的案例中没有移动,在ZZ 膝盖 结束和ZZ 衍生指标改变符号的地方。检查很简单,在学习曲线较高的地方,它更正确,主要是标志应该是没有偷看,而目标人物有义务偷看,这就是他们的本质。但事实上,特别是ZZ(其斜率)立即成为目标,因为它显示了着眼于未来的趋势和目前的理想位置方向。
好的,我将有半天时间休息...
在R中,它可以在3分钟内完成,所以如果Sanych非常想要一个测试,他可以用这3分钟来完成。
你甚至已经明白你在这 "三分钟 "内需要做什么?如果你明白了,那就录一段你在三分钟内做完的camtasia视频,第一次不要加快速度,也不要编辑。
你甚至已经明白你在这 "三分钟 "内需要做什么?如果你明白了,那就录一段你在三分钟内做完的camtasia视频,第一次不要加快速度,也不要编辑。
在这里...
除了我在正弦波中加入了噪音,因为纯正弦波是可预测的,而且这两种情况下的模型预测都没有错误。
make.sin <- function(){
t <- seq(0,50,0.1)
s <- sin(t)
return(s)
}
S <- make.sin()
noise <- rnorm(length(S))
S <- (S+noise)+1000
# х енкель для создания скользящего окна
hankel <- function(data, r=5) {
do.call(cbind,
lapply(0:(r-1),function(i) { data[(i+1):(length(data)-(r-1-i))]}))}
S <- hankel(S)
# делаем зиг и целевую с него
library(TTR)
make.zz <- function(ch=0.2){
zz <- ZigZag(S[,ncol(S)], change = ch, percent = T, retrace = F, lastExtreme = T)
n <- 1:length(zz);
for(i in n) { if(is.na(zz[i])) zz[i] = zz[i-1]}
dz<-c(NA,diff(zz))
sig<-ifelse(dz>0, 1, ifelse(dz<0, 0, NA))
return(list(label=sig , zz=zz))
}
Y <- make.zz()
layout(1:2)
# рисуем для наглядности синусоиду ,
# зигзаг на ней и внизу бинарный сигнал бай/сел
plot(S[,ncol(S)],t="l")
lines(Y$zz,col=4,lwd=2)
plot(Y$label ,t="l")
# подготовка данных
dat <- na.omit( cbind.data.frame(var=S, label=Y$label) )
label <- as.factor(dat$label)
dat <- dat[,-ncol(dat)]
# тренировки модели
tr <- 1:400
ts <- 401:nrow(S)
library(randomForest)
# тренируем модель как есть те целевая
# не заглядывает в будущее на один шаг
rf1 <- randomForest(label[tr]~., dat[tr,])
pr1 <- predict(rf1, dat[ts,])
# теперь тренируем вторую модель которая
# уже пробует предсказать следующее значение
label2 <- label[-1]
dat2 <- dat[-nrow(dat),]
rf2 <- randomForest(label2[tr]~., dat2[tr,])
pr2 <- predict(rf2, dat2[ts,])
# проверяем результаты
library(caret)
#ошибка без попытки предсказать
confusionMatrix(pr1,label[ts])
#ошибка с предсказанием на шаг
confusionMatrix(pr2,label2[ts])
没有预测的平均数
准确度:0.7895
有预测的
准确度:0.6702
P.S. 我读得有点不对,因为在预测器中,我在5个值之后有正弦波本身而不是动量。5个有叠加噪声的值
mytarmailS:
没有预测的平均数
准确度:0.7895
有预测的
准确度:0.6702
所以...
在没有ZZ移位的情况下,森林上的加速度要高10%,这是需要证明的,因为ZZ在特定时刻预测了未来,不需要移位。
就这样吧...
在不转移ZZ的情况下,森林上的焦距多了10%,这是需要证明的,因为ZZ在特定时刻预测未来,不需要转移它。
这并不能证明什么。
这个规则很简单:在准备训练数据时,将 目标向左移动("进入未来")一格,而不管你是如何产生信号的。你有什么想法吗?
如果你不知道,我将详细描述它。
祝好运