交易中的机器学习:理论、模型、实践和算法交易 - 页 754

 
交易员博士

我已经在这里贴出了神经元的例子,我会找一些合适的东西,并针对你的数据重做(并有一个委员会)。我不会写介绍性的讲义,但我会在代码中加入更多的评论。


对不起,我不明白变量with(F,T)在循环中的含义。

for(i in c(1:nrow(table))[c(F,T)]){
   ..... table[i,] ..... 
}

也就是说,这个循环在表中的偶数行上进行,但在奇数行上怎么做呢?

 

F和T是布尔值FALSE和TRUE的缩写,原则上来说,写c(T,F)还是c(TRUE,FALSE)并不重要,只是第一个变量更短。

如果表有10行,那么c(1:nrow(table))只是c(1,2,3,4,5,6,7,8,9,10)的一个向量。
而带有布尔值的数组在这种情况下会循环到要求的长度,你会得到c(TRUE,FALSE,TRUE,FALSE,TRUE,FALSE,TRUE,FALSE)。

即c(1:nrow(table))[c(F,T)] R将理解为
c(1,2,3,4,5,6,7,8,9,10) [c(TRUE,FALSE,TRUE,FALSE,TRUE,FALSE]
并依次取出那些与TRUE相匹配的向量元素。

例如,如果我们想取每一个第三元素,我们可以写成
c(1,2,3,4,5,6,7,8,9,10)[c(FALSE,FALSE,TRUE,FALSE,FALSE,TRUE,FALSE]
或缩略语
c(1:10)[c(F,F,T)]


对于奇数元素只需交换T和F:c(1:nrow(table))[c(T,F)]。

 
交易员博士

F和T是布尔值FALSE和TRUE的缩写,原则上来说,写c(T,F)还是c(TRUE,FALSE)并不重要,只是第一个变量更短。

如果你在表中有10行,那么c(1:nrow(table))只是c(1,2,3,4,5,6,7,8,9,10)个向量。
而带有布尔值的数组在这种情况下会循环到要求的长度,你会得到c(TRUE,FALSE,TRUE,FALSE,TRUE,FALSE,TRUE,FALSE)。

即c(1:nrow(table))[c(F,T)] R将理解为
c(1,2,3,4,5,6,7,8,9,10) [c(TRUE,FALSE,TRUE,FALSE,TRUE,FALSE)]
并依次取出那些与TRUE相匹配的向量元素。

例如,如果我们想取每一个第三元素,我们可以写成
c(1,2,3,4,5,6,7,8,9,10)[c(FALSE,FALSE,TRUE,FALSE,FALSE,TRUE,FALSE]
或缩略语
c(1:10)[c(F,F,T)]


对于奇数元素,只需交换T和F:c(1:nrow(table))[c(T,F)]

谢谢你不厌其烦地写下如此详细的描述。确实有很多东西变得清晰了。我甚至不好意思问,但我会下定决心的。问题的实质如下:.....

训练文件由每个目标的相同数量的类组成。换句话说,我的目标中有24个1和24个0。再次,我想做的是像Reshetov.....

我把训练表分成两个表,一个是目标为1的所有向量,另一个是目标为0的向量。

我以目标1为表,然后我需要创建两个子表,其中偶数向量在Train1,奇数向量在Train2。

首先,我们对偶数的做。

for(i in c(1:nrow(Qwe_true))[c(F,T)]){
  Train1[i,]<-Qwe_true[i,]
  }

但是,Train1表将包含c NA行,而需要Train1被创建为12行,因为24行中只有12行是偶数。我不知道该怎么做....

 

请。

对于R来说,你需要一种不同的思维方式,你需要在头脑中操作向量,那么代码就很容易写。专业人士在一行中写出这样的东西,我甚至不理解,而我自己会用几行写出周期。

Train1 <- rbind(Qwe[which(Qwe[, "target"]==1)[c(T,F)], ], Qwe[which(Qwe[, "target"]==0)[c(T,F)], ] )
Train2 <- rbind(Qwe[which(Qwe[, "target"]==1)[c(F,T)], ], Qwe[which(Qwe[, "target"]==0) [c(F,T)], ])

在步骤中 -
which(Qwe[, "target"]==1) - 目标为1的行数
which(Qwe[, "target"]==1)[c(T,F)] - 有 target1 的行数,跳过 1
Qwe[which(Qwe[, "target"]==1)[c(T,F)], ] - 从Qwe得到的表格,目标是1,其中有一个空格
rbind(..., ...) - 合并两个表(目标1和目标0)。

 
交易员博士

请。

对于R来说,你需要一种不同的思维方式,你需要在头脑中操作向量,那么代码就很容易写。专业人士用一行写出的东西我都不懂,而我自己会写出几行的循环。

Train1 <- rbind(Qwe[which(Qwe[, "target"]==1)[c(T,F)], ], Qwe[which(Qwe[, "target"]==0)[c(T,F)], ] )
Train2 <- rbind(Qwe[which(Qwe[, "target"]==1)[c(F,T)], ], Qwe[which(Qwe[, "target"]==0) [c(F,T)], ])

你只是一个怪物。两句话,就能让你卸下心头的重担。好吧,我会继续努力的......。谢谢!

 
周五晚上...我的头感觉不是很好。一起测试一下理论如何....,以你的R写作能力和我的问题设置能力(准确性),我们可以在半小时内全部检查一遍?有时间吗?窦建德博士
 
不,继续学习。如果有任何问题,我会帮忙。
 

在这两个样本之外,还需要增加两个样本。

MLP1=Train1+Test(Train2)

MPL2=Train2+Test(Train1)。

如果我们把Test(Train2)+Test(Train1)相加,就可以得到整个训练部分的结果,这个部分将是一个测试,对每个多项式都是如此。

也许花点时间,如果现在不可能的话。但这是半个小时,你已经确定了。我只想做一面镜子。我拿着同一个文件,用两种方式来教它。然后,我们将把它全部扔到控制站点上,我们将看到一切。你怎么说?

 

你可以使用rbind()函数来组合这些表格
MLP1 <- rbind(Train1, Test)

什么是Test(Train2)?而为什么要把训练表和测试表结合起来?测试应该是单独的,以便对训练好的模型进行测试。

一切都不会像你想的那样简单和快速。这在雷舍托夫的模型中,你只需输入数据,模型本身就会筛选出预测因子,确定权重、神经元数量,等等。但你不能用普通的神经元来做,你需要通过交叉验证来选择神经元的参数,例如我今天在这里写的例子,或者Vladimir Perervenko的文章。


再看看我在那里写了什么 -https://www.mql5.com/ru/forum/86386/page753#comment_6821981
只要把你的数据按描述粘贴到该代码中并运行即可。如果所有的预测因子都是一个一个地拿出来的,而不是消除的,那么从第一次开始,可能就会太糟糕。运行代码后,另外运行max(gaResult@fitness) 命令,这将显示由遗传学找到的最佳模型的R2得分。如果估计值接近1或更低,那就是好的,如果接近0甚至是负值,那就是坏的。

然后在PREDICTOR_COLUMNS 中指定你认为好的列的确切数量,并再次运行代码,模型将只在这些预测器上训练。理想情况下,遗传学的最佳模型评价应该接近1,训练和测试表中的精确度应该是1.00。

测试表的时间应该严格在训练数据之后,就像这个模型已经在市场上交易一样。

如果这段代码没有什么好的结果(甚至在KFOLDS=10 的情况下)--那么它就没有好处。如果成功了,那么就有了一个替代雷舍托夫模型的好办法,我们可以进一步整理代码,把模型输出到mql中。

 

我的观点是,如果你像在雷谢托夫的模型中那样做,添加一些额外的东西,然后拿一个普通的神经元,以某种方式与之前的步骤混合,并期望这一切都像雷谢托夫的模型那样工作--这将变成一个徒劳的漫长过程,我绝对不赞成这样的做法。

如果我想得到与雷舍托夫相同的结果,但在R中,那么我必须用R重写模型的所有java代码。

但也有许多替代方案。如果它们比雷舍托夫的还要好用,那就完美了,你不需要其他东西,一切都准备好了。