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

 
Dr.Trader:

我不认为这个软件包足以建立一个能够预测目标变量的模型。我在帮助中发现的所有内容都是基于预测因素建立PCA模型,目标变量根本不存在。


你好,你使用了错误的函数,你应该使用"nlPca",正如我给出的网站上所示,但这是我的错,我应该给出更多细节...

在这里,而不是预测--安装,尝试一下,也许你会成功。

source("https://bioconductor.org/biocLite.R")
biocLite("pcaMethods")        

#создание  pca объекта
library(pcaMethods)

##  Data set with three variables where data points constitute a helix
data(helix)
helixNA <- helix
##  not a single complete observation
helixNA <- t(apply(helix, 1, function(x) { x[sample(1:3, 1)] <- NA; x}))
## 50 steps is not enough, for good estimation use 1000
helixNlPca <- pca(helixNA, nPcs=1, method="nlpca", maxSteps=50)
fittedData <- fitted(helixNlPca, helixNA)
plot(fittedData[which(is.na(helixNA))], helix[which(is.na(helixNA))])
		
 
Dr.Trader:

我不认为这个软件包足以建立一个能够预测目标变量的模型。我在帮助中所发现的是建立一个基于预测因子的PCA模型,目标变量根本就不存在。

这将创建一个resNipals(通过迭代局部最小二乘法的非线性估计)对象,该对象有5个主要组成部分,用于分析代谢物DataComplete表。你可以用自己的预测表代替metaboliteDataComplete,而不是用预测器代替。重要的是不要在这里输入目标变量,它将在后面使用。

但这只够通过检查不同的图表来分析变量之间的关系。为了建立一个预测模型,然后建立一个线性回归 模型,使用主要成分PC1,PC2,PC3,PC4,PC5作为输入变量(x1,x2,x3,...)。而目标变量Y已经作为期望的结果被送入线性模型。问题是,resNipals是包pcaMethods中 "pcaRes "类的某个对象。我在帮助中找不到如何用它做这些事。

如果这是一个来自caret软件包的PCA模型,它将会是这样的。

但它不能与resNipals一起工作,理论上讲,pcaMethods包应该有一些自己的函数来处理这个对象,但我没有找到任何东西。

最初,PCA被设计用来解决两个问题。

1.有非常多的预测因子,而观测值却很少。这在有机化学、遗传学中很常见...对我们来说,就是使用大型TFs的宏观经济数据,比如说年度。

2.预测因素之间存在关联性。

因此,PCA算法解决了这两个主要问题。

1.用一个新的、通常是根本上更小的预测器数量来减少原始预测器的数量。在这样做的时候,该算法确保这个小数字能够解释原始预测器集合的一定百分比的变异性,例如95%。这个值是由研究人员选择的。

2.新的预测因子集彼此之间的相关性为零。

由此可见,对我们来说,PCA是为建模预先准备原始数据的算法之一, 但它不能代替建模来预测目标变量。

在我看来,在对PCA各种细节的讨论中,我在这一点上的言论的意义被忽略了。因此,让我提醒你:我给了一个 使用PCA的参考,它不仅减少了原始预测因子的数量,而且还消除了对目标变量有噪音的预测因子。这就是本主题所讨论的内容。

所以我提议回到预测者之间的噪音问题,以及可能使用一个非常具体的想法,即应用PCA来解决这个问题。

 
Dr.Trader:

这将创建resNipals(通过迭代局部最小二乘法的非线性估计)对象,该对象有5个主要组成部分,用于代谢物DataComplete表分析。你可以用自己的表格代替metaboliteDataComplete,...........

你试过的那个是Nipals,它在网站上的第二张图片中显示,它也不是很好分离,你应该采取第三张图片中的神经网络PCA

=========================

有点偏离主题,但需要帮助的代码....

我在列中有预测因子,我想计算所有预测因子与所有这些组合的差值,我已经实现了,问题是现在我需要充分地命名每个组合,以了解什么是什么。

假设我们有预测因子 "A "的列, "Б", "С"

我做了差异的组合

1) A - B

2) A - C

3) C - B

问题:我如何给新的列命名,如 "a_minus_b", "a_minus_c"

我刚刚掌握了R和一般的编程,所以我对这种技巧并不熟悉

我应该在这段代码中添加什么?

a <- 1:5
b <- 6:10
c <- 11:15
d <- 16:20
dt <- data.frame(a,b,c,d) 
dt

#  все комбинации индексов между двумя переменными
#  еще транспонирую(переворачиваю матрицу) мне так удобней воспринимать
combi <- t(  combn(1:ncol(dt),2)  )  
combi  

#  пустая фрейм куда буду записывать результат вычислений с комбинацыями
res.dt <- as.data.frame(  matrix(nrow = nrow(dt) , ncol = nrow(combi))   )
res.dt

for(i in 1:ncol(res.dt)){
  #  буду проводить вычитание одной перем из другой во всех комбинацыях
  #  и записывать в res.dt
  ii <- combi[i,1]
  jj <- combi[i,2]
  
  res.dt[,i] <- dt[,ii] - dt[,jj]
}
res.dt
 
mytarmailS:

你试过的那个是Nipals,它在网站上的第二张图片中显示,它也不是很好分离,你应该采取第三张图片中的神经网络PCA

=========================

有点偏离主题,但需要帮助的代码....

我在列中有预测因子,我想计算所有预测因子与所有这些组合的差异,我已经实现了,问题是现在我需要充分地命名每个组合,以了解什么是什么。

假设我们有预测因子 "A "的列, "Б", "С"

我做了差异的组合

1) A - B

2) A - C

3) C - B

问题:我如何给新的列命名,如 "a_minus_b", "a_minus_c"

我刚刚掌握了R和一般的编程,所以我对这种技巧并不熟悉

我应该在这段代码中添加什么?

它看起来像这样。

colnames() <- c(".", ".")

也有名字

见帮助。

 
SanSanych Fomenko:

PCA最初是为了解决两个问题。

PCA最初是为了降低 原始序列的维度。就这样了。用它来选择预测器是无稽之谈。
 
桑桑尼茨-弗门科

大约是这样的。

colnames() <- c(".", ".")

还有一些名字

见参考资料。

))是的,我知道,但如果有1000个变量,为什么要手动写每个变量呢?
 

Dr.Trader:

...

数据取自eurusd d1,级别为0或1--价格下跌或上涨的下一栏。如果模型在10个案例中至少有6个正确预测了test.csv的结果,那么你就可以尝试用它在外汇市场进行交易,原则上不会亏损,但不要期望有太多的利润。如果它在10个案例中正确预测了7个案例(甚至更多)--这就是通往圣杯的正确途径,我们必须在其他年份和月份尝试训练和测试该模型,如果一切都将是相同的--那么非常好。

...


更具体地说,在报告文件中。

/**
* 在样本外的建模质量。

* 真正的积极因素:182
* 真负数:181
* 假阳性率:1
* 假阴性:1
* 有统计的样本中的总模式:365个
* 样本外的总误差:2
* 归纳能力的敏感性:99.4535519125683%。
* 归纳能力的特异性:99.45054945054946%。
* 归纳能力:98.90410136311776%
* Reshetov的指标:8.852456238401455
*/


是时候建立一个团队并创建一个开源项目了--在mql5和Java上实现自动化系统。我将展示Java中二进制分类器的源代码和MQL5脚本,它为训练模型创建一个样本。

该建筑群如何运作的大致计划。

  1. 对于每个金融工具,图表上都有单独的机器人,它们由条形开盘价 触发,并将模式转储到文件中。
  2. Java应用程序(二进制分类器)为每个符号下载模式,并以1秒的间隔等待步骤1中的机器人创建的文件。然后从磁盘上删除该模式文件。该工具根据模式对交易信号进行分类并将其保存到文件中。
  3. 机器人等待来自步骤2的对冲文件。 一旦找到文件,机器人就会读取仪器和其中的信号,并根据信号在仪器上打开或扭转交易。已读文件被删除。

如果你有兴趣加入这个项目,并且知道如何用Java或MQL5编程,请订阅这个主题。

 
mytarmailS:

你好!你使用了错误的函数,你应该使用我给出的网站上的"nlPca",但这是我的错,你需要更多细节...

在这里,而不是预测--安装,尝试一下,也许你会成功。

不幸的是,这个例子是来自另一个主题。例如,在外汇领域,我们总能得到100%的数据,但在其他通过实验获得数据的领域,总会有缺失的数值。 在这个例子中,PCA被用来重建预测因子本身的缺失值。 在这个例子中,他们随机清除三列中的一个值,创建一个PCA模型,并使用它来重建缺失值。

我没有试过这样做,但从技术上讲,你也可以把目标变量作为一个预测因素,把它包括在pca模型中。然后,在新的数据中,它的值将是未知的,所以pca可以填补这些缺失的值。

source("https://bioconductor.org/biocLite.R")
biocLite("pcaMethods")        

#создание  pca объекта
library(pcaMethods)

##  Data set with three variables where data points constitute a helix
#trainData - таблица с обучающими примерами. Целевая переменная тоже должна быть в этойже таблице. Пример колонок: Close,Hour,MA30,target. (target - целевая переменная, со значениями например 0 или 1 обозначающими падение/рост цены)
## 50 steps is not enough, for good estimation use 1000
NlPca <- pca(trainData, nPcs=1, method="nlpca", maxSteps=50)
#newData - таблица с новыми данными, для проверки модели. Колонки должны быть теже Close,Hour,MA30,target
newData[,"target"] <- NA  #целевая  переменная на новых данных не должны быть известна модели, и в случае NA - функция fitted должна подставить туда подходящие значения
fittedNewData <- fitted(NlPca, newData)
fittedNewData[,"target"] #  ваш результат предсказания
Я не могу начать новую нормальную строку :/ В общем можно сделать как я написал выше, но это не предсказание а реконструкция. PCA модель может просто найти некие значения которые "подойдут". Гарантий никаких нет, я предполагаю что ошибка будет 50%
 
组合器
PCA最初是为了降低原始序列的维度。就这样了。用它来选择预测器是无稽之谈。

不,没关系的。由于每个主成分所使用的预测因子是已知的,我们可以安全地筛选出那些不用于主成分的预测因子。读了这个,我很喜欢: http://www.win-vector.com/blog/2016/05/pcr_part2_yaware/ 它包含5个好的预测器和几十个噪音预测器。他们在分析的帮助下筛除噪音。我把同样的代码用于本线程中遇到的其他例子,一般来说,它是有效的。但外汇更复杂,我还没有这么好的图片与指标,我应该想出更聪明的办法。

 
Dr.Trader:

这个例子很不幸地来自另一个主题。例如,在外汇领域,我们总是可以检索到100%的数据,但在其他领域的数据是通过实验获得的,总会有差距,有缺失的值。 在这个例子中,PCA被用来重建预测器本身的缺失值。 在这个例子中,他们在三列中随机清除一个值,创建一个pca模型,并使用它来重建缺失值。

我没有试过这样做,但从技术上讲,你也可以把目标变量作为一个预测因素,把它包括在pca模型中。然后,在新的数据中,它的值将是未知的,所以pca可以填补缺失的值。

我怀疑这些 "NA "标记被扔在日期中不是偶然的,但我读了手册,它清楚地说是用神经网络进行PCA,但仍然不清楚网站上的这个人是如何得到这张漂亮的图片,并按类进行了很好的划分。