文章 "自组织特征映射 (Kohonen 映射) - 再访主题" - 页 3

 
对了,还拍了其他数据。第三张照片中又出现了彩虹。我想,出现这种情况是因为你对写这篇论文的代码进行了干扰。您在文章中写道,您做了一些修改。

MetaTrader 交易平台截图

英镑兑美元, H1, 2017.03.01

Alpari International Limited, MetaTrader 5, 演示版

什么是彩虹?

英镑兑美元,上半年,2017.03.01,Alpari International Limited,MetaTrader 5,模拟


 
Viktor Vasilyuk:
对了,还拍了其他数据。第三张照片中又出现了彩虹。我想,出现这种情况是因为你对写这篇论文的代码进行了干扰。你在论文中写道,你做了一些修改。



在初始化节点时将随机性归一化并不会在训练时限制节点本身。你可以用单位来初始化节点,这不会影响结果。

但它可能会影响获得结果的速度。

事实上,我分别从每一列的最小值和最大值之间的字段中随机初始化节点,只是加快了收敛速度,因为 SOM 无需一开始就将节点驱动到指定字段中。

这一过程与学习过程本身有机地交织在一起,因此你甚至不能说此时是网格的驱动时刻,此时是网格的学习时刻。驶入一个给定的领域意味着以非常大的变化系数调整节点。

因此,从根本上说,我的干预并没有改变任何东西。它只是加快了收敛的速度。

但如果你对这一机制有不满,你可以自由地修正它。在 Include\SOMNode.mqh 中创建网格时更改节点的初始化

//+------------------------------------------------------------------+
// | 在设定的限制范围内初始化节点参数
//+------------------------------------------------------------------+
void CSOMNode::InitNode(int x1,int y1,int x2,int y2,const double &min_values[],const double &max_values[])
  {
//--- 设置节点坐标
   m_x1=x1;
   m_y1=y1;
   m_x2=x2;
   m_y2=y2;
//--- 计算节点中心坐标
   m_x=x1+MathAbs((x2-x1))/2;
   m_y=y1+MathAbs((y2-y1))/2;
//--- 准备一个权重数组
   ArrayResize(m_weights,m_dimension);
//--- 用随机值初始化权重;
   for(int i=0; i<m_dimension; i++) {m_weights[i]=min_values[i]+(max_values[i]-min_values[i])*rand()/32768;}
  };

放入非规范化的 rand(),这样就会和原始算法一模一样。像这样:m_weights[i]=rand();

 

如果创建这样一个文件 "optim.csv",我的理解是否正确?

i;Title
-0.195;2017.04.04
0.086;2017.04.03
-0.195;2017.03.31
-0.195;2017.03.30
-0.195;2017.03.29
0.086;2017.03.28
-0.195;2017.03.27
-0.195;2017.03.24
0.086;2017.03.23
0.086;2017.03.22

只有两个值

  • -0.195
  • 0.086

那么运行 "Sample5_SOM_Net_Player "将显示如下内容

开始 1 开始 2

也就是说,科恩网络发现文件 "optim.csv "中有两个...两个什么?模式?


 

也就是说,如果我想研究两个相邻的条形图--它们是看涨还是看跌,我需要对这些序列进行类似这样的描述:

两个相邻的酒吧

最后会有四个主要序列("11"、"12"、"21"、"22")和第五个序列--当任何柱状图既非看涨也非看跌时(柱状体大小为零)。


然后,只需浏览给定数量的条形图,并创建一个 "optim.csv "文件,将这些序列写入其中。你会得到类似于

i;Time
21;2017.04.03
11;2017.03.31
11;2017.03.30
11;2017.03.29
12;2017.03.28
22;2017.03.27
21;2017.03.24
11;2017.03.23
12;2017.03.22

然后运行 "Sample5_SOM_Net_Player"。对吗?

 

您有两个值,但您订购了 250 个节点(50x50),因此网格自然会将节点拉伸到整个中间值域。

此外,您在聚类字段中输入了一个无关紧要的值 "时间"。如果要使用时间,那么数据结构 就应该以某种方式反映周期性,否则网格将如何理解星期一和星期五的不同。这样的时间表示法至少在几年的数据中是合理的,否则会出现重复(当然,如果去掉年份值的话)。

理解一个简单的想法,科霍宁网格将节点放置在相似(多变量)实例的邻近地区。然后,一切都会随着对工作的理解而水到渠成。

 
Nikolay Demko:

您有两个值,但您订购了 250 个节点(50x50),因此网格自然会将节点拉伸到整个中间值域。

此外,您在聚类字段中输入了一个无关紧要的值 "时间"。如果要使用时间,那么数据结构 就应该以某种方式反映周期性,否则网格将如何理解星期一和星期五的不同。这样的时间表示法至少在几年的数据中是合理的,否则会出现重复(当然,如果去掉年份值的话)。

理解一个简单的想法,科霍宁网格将节点放置在相似(多变量)实例的邻近地区。然后,事情就会随着对工作原理的理解而水到渠成。


如果我以下面的格式重做 csv 文件[烛体大小][星期几(1、2、3、4、5)],并填写例如 100 条,那么 csv 文件中最终会有100 个示例 吗?在这种情况下要放入多少个节点?3*3?
 
Vladimir Karputov:

如果我以这种格式重做 csv 文件:[烛体大小][星期几(1、2、3、4、5)],并填写例如 100 条,那么 csv 文件中最终会有100 个示例 吗?在这种情况下要放入多少个节点?3*3?


这取决于您想要得到什么,聚类还是回归。

聚类会将多个示例合并为一个聚类,那么节点数应少于示例数。

回归则需要比示例更多的节点,以覆盖示例中没有体现的点的字段。

同样,这个过程不是二进制的,所以你不能说它是聚类,但这是回归,把它想象成一个多向光谱,聚类越多,回归越少,反之亦然。在零点,当节点数等于示例数时,聚类和回归的数量大致相等。

 
Nikolay Demko:


这取决于您想要聚类还是回归。

聚类会将多个示例合并成一个聚类,那么节点数就应该少于示例数。

回归则需要比示例更多的节点,以覆盖示例中没有体现的点域。


简单来说,我想获得四个序列的可视化结果:

交易论坛、自动交易系统和交易策略测试。

讨论文章 "再谈柯霍宁映射"

Vladimir Karputov, 2017.04.04 13:49

也就是说,如果我想研究两个相邻的条形图--它们是看涨还是看跌,我需要对这样的序列进行描述,类似于这样的描述:

两个相邻的酒吧

最终会有四个主要序列("11"、"12"、"21"、"22")和第五个序列--当任何条形图既不看涨也不看跌时(条形图主体大小为零)。


在给定的条数内。也就是说,我在给定数量的条形图上运行脚本,并指定五个序列("0"、"11"、"12"、"21"、"22")中的一个。我还指定了一周中的某一天。最后,我得到了 100 个条形图中 100 个[序列名称][星期]的示例。

 
Vladimir Karputov:


简单地说,我想要的是四个序列的可视化效果:


在给定的小节数内。也就是说,我将脚本传递到给定数量的小节上,并指定五个序列("0"、"11"、"12"、"21"、"22")中的一个。我还指定了一周中的某一天。这样,100 个小节中就有 100 个[序列名称][星期]的例子。


对不起,我不明白,如果你有一个条件组合,而且对它们了如指掌,为什么还需要网格?

如果不是,最好在网格中显示您感兴趣的内容,例如,在一列中显示开仓[i]-收盘[i]的差值,在另一列中显示开仓[i+1]-收盘[i+1]的差值,并在聚类的基础上设置要解释哪个聚类的条件。

 
Nikolay Demko:


对不起,我不明白,如果您有一组条件组合,而且您清楚地知道它们是什么,为什么还需要网格?

***

  1. 组合("0"、"11"、"12"、"21"、"22") 我今天只是举了个例子。我不知道它们是否有效。这就是我想问的--如果我想出了各种各样的组合,网格会对我有什么帮助?我以为这个网格会直观地显示我的例子在某些组(群?
  2. 那么,如果我把"......例如,一列中 Open[i]-Close[i] 之间的差值,以及另一列中 Open[i+1]-Close[i+1] 之间的差值...... "放在一起,会有什么反馈呢?我会看到不同的颜色--但哪个是哪个?