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

 

Alexey,我还有一个关于你的筛选预测器的函数的问题--它的返回值应该有什么区间?我在我的数据上运行了那个随机输入 的健身函数(fitness_f(runif(predictor_number, min = 0, max = 1))),看到的结果是从0到0,03。我在代码中还看到,如果出现错误(零输入),函数将返回0。这里有问题,GenSA试图使结果最小化,也就是说,在最后GenSA将只是得到零输入并停止。也许,我们应该改变健身函数结果的符号,使GenSA的作用方向相反?
如果健身函数在优化的某个阶段开始返回负数,而且越低越好--那么现在一切都很好。

 
Dr.Trader:

Alexey,我对你的筛选预测器的函数还有一个问题--它的返回值应该是什么区间?我在我的数据上运行了那个随机输入 的健身函数(fitness_f(runif(predictor_number, min = 0, max = 1))),看到的结果是从0到0,03。我在代码中还看到,如果出现错误(零输入),函数将返回0。这里有问题,GenSA试图使结果最小化,也就是说,在最后GenSA将只是得到零输入并停止。也许,我们应该改变健身函数结果的符号,使GenSA的作用方向相反?
如果健身函数在优化的某个阶段开始返回负数,而且越低越好--那么现在一切都很好。

这是个好问题。你想清楚了。

我正在写一篇关于这种方法的文章,这里是一个摘录。


基于修正的相互信息和随机搜索的预测器子集的算法框图。


  • a) 以已知方式之一对数据集进行分类。
  • b) 评估数据集的参数,如行数、预测器、预测器的平均水平数(如果它们有不同的水平数),并根据这些数据计算出最终子集中预测器的 "最佳数量"。
  • c) 用均匀分布在[0, 1]范围内的随机数初始化一个数字类型的向量,并将向量值的下限(0)和上限(1)的边界分配给SA函数的参数。
  • d) 初始化多信息量化评价函数、相互信息量化函数和结合所有计算的健身函数。
  • e) 设置蒙特卡洛模拟的次数,以估计MI和WI的量值;为MI和WI的噪声值设置量值(如0.9)。
  • f) 设置算法的时间或迭代次数。越多越好。
  • g) 运行该算法,等待结果。


b "点需要澄清。变量的最佳数量是一个条件值,用公式计算。

optim_var_num < - log(x = sample_size / 100, base = round(mean_levels, 0) )


直觉是, 考虑到输入变量的独立性假设,一个变量的平均水平数必须提高到所需的功率,以获得唯一互动水平的总数,使它们中的每一个平均至少有n个观察值集中,其中n被认为是100。

我们不能有太多的输入变量和太多的水平,因为对输入水平的观察频率的保守估计会太小,无法给出关于输出变量对输入水平集合的依赖性的统计推断。

通过设置阈值,超过该阈值的输入变量数的向量值将被转换为1(变量索引包含标志),我们进行概率计算。

阈值 < - 1 - optim_var_num / predictor_number


其本质是,我们设定最大概率值来选择计算出的最佳输入数量。而这个逻辑是通过应用二项分布来检验的。

例如,让我们来看看我们的数据:整个数据集的一半,用于训练。

我们有17,973行,12个预测因子,每个有5个水平。应用上述公式,我们得到最佳的预测器数量是3226个。

应用将一个预测器纳入集合的阈值公式,我们得到0.731。

在二项分布上,最可能得到的选定变量的数量是多少?


最多是3次观察。准确地说,5 ^ 3,226将给我们提供178个级别,这将容纳平均每个100个观察。
 
继续。函数输出的值0是最坏情况下的最大值。如果par向量中没有任何元素通过阈值,则自动为0。可能的最佳值是-1。意味着输出是完全由输入的子集决定的。
 

是的,我发现了一个具有负健身值的预测器子集。有很多预测因子,有几千个,我把gensa限制在只有2次迭代,我花了8个小时:)。健身函数的结果是6%。在用nnet对这些预测器进行前沿测试时,我得到了45%的误差。这不多,我不认为该EA会有利润。我又把迭代次数限制为10次,以找到一个更好的结果,运行它,已经等了24小时,希望gensa能完成。我得试试遗传学(GA库),它在多线程下工作会更快(GA最小化而不是最大化结果,即GA的健身函数结果应该改变其符号)。我将继续进行试验。

我读过关于主成分模型的各种文章,并试图教导该模型不仅要测量R^2并通过选择预测因子 使其最大化,还要在前沿测试数据上测试该模型。它的出现有点模棱两可。一方面,我通过去除相关的预测因子对来提高模型的R^2(来自bibiloteka caret的函数findCorrelation),但事实证明,当在前沿测试数据上测试该模型时,R^2会下降。奇迹并没有发生,PCA模型也被重新训练。我想尝试一种更复杂的预测器估计--将训练样本分成两份--用于适当的训练和验证,训练PCA模型,然后立即对验证样本进行测试,返回最小R^2作为最终结果。如果用这样的函数来评估一组预测器,并使这个值最大化,那么就会找到那些在训练和新数据上有良好效果的预测器组。我们需要检查它。

另外,我一定是误解了本主题中关于PCA的第一篇文章的文字。它是说必须选择描述95%变化的成分数量,我以为他们说的是目标变量的预测准确性。但事实并非如此,主成分的构建根本不需要目标变量,95%的准确率是用这些非常成分来描述原始数据的准确程度。而预测的准确性与此完全没有关系。

 
Dr.Trader:

是的,我发现了一个具有负健身值的预测器子集。有很多预测因子,有几千个,我把gensa限制在只有2次迭代,我花了8个小时:)。健身函数的结果是6%。在用nnet对这些预测器进行前沿测试时,我得到了45%的误差。这不多,我不认为该EA会有利润。我又把迭代次数限制为10次,以找到一个更好的结果,运行它,已经等了24小时,希望gensa能完成。我得试试遗传学(GA库),它在多线程下工作会更快(GA最小化而不是最大化结果,即GA的健身函数的结果应该改变其符号)。我将进行更多的实验。

我读过关于主成分模型的各种文章,不仅尝试训练模型来测量R^2,并通过选择预测因子来最大化它,而且还尝试在前沿测试数据上真正测试模型。它的出现有点模棱两可。一方面,我通过去除相关的预测因子对来提高模型的R^2(来自bibiloteka caret的函数findCorrelation),但事实证明,当在前沿测试数据上测试该模型时,R^2会下降。奇迹并没有发生,PCA模型也被重新训练。我想尝试一种更复杂的预测器估计--将训练样本分成两份--用于适当的训练和验证,训练PCA模型,然后立即对验证样本进行测试,返回最小R^2作为最终结果。如果用这样的函数来评估一组预测器并使该值最大化,那么就会找到那些在训练和新数据上有良好效果的预测器组。我们将不得不检查。

另外,我一定是把这个主题中关于PCA的第一篇文章的文字搞错了。那里说,成分的数量应该被选择来描述95%的变化,我以为他们说的是目标变量预测的准确性。但事实并非如此,主成分的构建根本不需要目标变量,95%的准确率是用这些非常成分来描述原始数据的准确程度。而预测的准确性与此完全没有关系。

是的,事实证明,你没有得到它。

PCA可以作为一个独立的工具来应用,但这篇文章没有讨论这个问题。

所讨论的是如何从一些大的预测器集合中过滤掉噪音。

根据我的理解,这是按以下步骤进行的。

1.Y-意识。这就是根据目标变量对预测器进行缩放

2.使用PCA算法,对一组预测因子进行排序,取能解释95%方差的部分。

2.或者这样(我自己也没弄明白),使用PCA算法,通过将原来的预测因子乘以计算出来的系数(加载),构建一个新的预测因子集。这一套是订购的。我们在这些新的向量中选择尽可能多的解释95%的变异。

PS。

让我们去看看出版物,Y-aware是噪声预测器过滤领域的新窥视者。

成功

 
桑桑尼茨-弗门科

2.使用PCA算法,对预测因子集进行排序,取能解释95%方差的部分。

这一点我还没有搞清楚。(我现在只写y-aware的方法,以免与其他方法混淆)。文章本身在这里:http://www.r-bloggers.com/principal-components-regression-pt-2-y-aware-methods/

在代码"princ <- prcomp(dmTrain, center = FALSE, scale. = FALSE)"之后有一个情况:数据被读取,按Y缩放,PC组件被建立。这个函数并不限制组件的数量--有多少个预测器就有多少个。首先要做的是只选择其中的一部分(建议足以描述95%的变化)。在文章本身中,作者看了成分的SDV图(一些未指定的变异),并说2或5就足够了,因为它们在图中很突出。我不知道为什么没有什么突出的东西,图表是平滑地递减的。

有一个SDV表,其中的条目数等于组件的数量。是否可以计算出从中抽取多少个成分?所有数字的总和不一定限于1,我见过6的总和,可能还有更多。

> princ$sdev
[1] 0.17585066 0.15322845 0.13818021 0.13090573 0.12177070 0.11854969
[7] 0.11176954 0.10910302 0.10616631 0.10265987 0.10056754 0.09441041
[13] 0.09343688 0.08832101 0.08620753 0.08235531 0.08132748 0.07992235
[19] 0.07800569 0.07575063 0.07463254 0.07311194 0.07210698 0.07032990
[25] 0.06907964 0.06763711 0.06634935 0.06544930 0.06451703 0.06260861
 
Dr.Trader:

我还没有想明白。(我现在只写y-aware的方法,以免与其他方法混淆)。文章本身在这里:http://www.r-bloggers.com/principal-components-regression-pt-2-y-aware-methods/

在代码"princ <- prcomp(dmTrain, center = FALSE, scale. = FALSE)"之后,我们得到了这样的情况:数据被读取,按Y缩放,PC组件被构建。这个函数并不限制组件的数量--有多少个预测器就有多少个。首先要做的是只选择其中的一部分(建议足以描述95%的变化)。在文章本身中,作者看了成分的SDV图(一些未指定的变异),并说2或5就足够了,因为它们在图中很突出。我不知道为什么没有什么突出的东西,图表是平滑地递减的。

有一个SDV表,其中的条目数等于组件的数量。是否可以计算出从中抽取多少个成分?所有数字的总和不一定限于1,我见过6的总和,可能还有更多。

我运行拨浪鼓,得到三张桌子。

  • 标准差:在这里你可以有各种各样的值,并说总和=1不需要
  • 旋转:这些是系数,我们应该用这些系数乘以原向量,得到新的向量。
  • 组件的重要性。正在讨论的内容

最后一栏说,如果你只取PC1,它将解释0.9761的变异性(累积比例),如果你取两个成分--PC1和PC2,它将解释0.99996等等。

(我不知道如何插入表格)

组件的重要性。

PC1 PC2 PC3 PC4 PC5

标准差 2.2092 0.34555 0.01057 0.008382 0.004236

方差的比例 0.9761 0.02388 0.00002 0.000010 0.000000

累计比例 0.9761 0.99996 0.99998 1.000000 1.000000

 

找这个表很久了,终于在摘要中找到了。其实最明显的地方就是:), 谢谢你的展示。当某些东西在摘要中,但不在对象属性中时,就是这种情况。

summary(princ)$importance[3,]

事实证明,这篇文章有一个续集,专门讨论组件选择的问题,有一些针对Y-aware的特殊解决方案。还没有试过。

http://www.win-vector.com/blog/2016/05/pcr_part3_pickk/

 
Dr.Trader:

找这个表很久了,终于在摘要中找到了。其实最明显的地方就是:), 谢谢你的展示。当某些东西在摘要中,但不在对象属性中时,就是这种情况。

事实证明,这篇文章有一个续集,专门讨论组件选择的问题,有一些针对Y-aware的特殊解决方案。还没有试过。

http://www.win-vector.com/blog/2016/05/pcr_part3_pickk/

在这个R中,一旦你得到一些对象,你就把str和summary放在它上面,还可以绘制。你可以看到很多惊人的事情。重点是,R中的 "对象 "这件事比许多编程语言要复杂得多。
 
Dr.Trader:

是的,我发现了一个具有负健身值的预测器子集。有很多预测因子,有几千个,我把gensa限制在只有2次迭代,我花了8个小时:)。健身函数的结果是6%。在用nnet对这些预测器进行前沿测试时,我得到了45%的误差。这不多,我不认为该EA会有利润。我又把迭代次数限制为10次,以找到一个更好的结果,运行它,已经等了24小时,希望gensa能完成。我得试试遗传学(GA库),它在多线程下工作会更快(GA最小化而不是最大化结果,即GA的健身函数的结果应该改变其符号)。我将进行更多的实验。

我阅读了关于主成分模型的各种文章,现在我不仅尝试训练模型来测量R^2,并通过选择预测因子使其最大化,而且还尝试在前沿测试数据上真正测试模型。它的出现有点模棱两可。一方面,我通过去除相关的预测因子对来提高模型的R^2(来自bibiloteka caret的函数findCorrelation),但事实证明,当在前沿测试数据上测试该模型时,R^2会下降。奇迹并没有发生,PCA模型也被重新训练。我想尝试一种更复杂的预测器估计--将训练样本分成两份--用于适当的训练和验证,训练PCA模型,然后立即对验证样本进行测试,返回最小R^2作为最终结果。如果用这样的函数来评估一组预测器,并使这个值最大化,那么就会找到那些在训练和新数据上有良好效果的预测器组。我们将不得不检查。

另外,我一定是把这个主题中关于PCA的第一篇文章的文字搞错了。那里说,成分的数量应该被选择来描述95%的变化,我以为他们说的是目标变量预测的准确性。但事实并非如此,主成分的构建根本不需要目标变量,95%的准确率是用这些非常成分来描述原始数据的准确程度。而预测的准确性与此完全没有关系。

我不太明白为什么要花这么长时间。你得到了多少个optim_var_number?它应该在10以内。把它设置为1200秒,现在应该是有了。