記事"自己組織化特徴マップ(Kohonenマップ) - サブジェクトリビジッティング"についてのディスカッション - ページ 3

 
ところで、他のデータも撮ってみた。枚目にも虹が出ている。これは、あなたがこの論文を書いたコードに干渉したためだと思います。あなたは論文で、いくつかの修正を加えたと書いている。

メタトレーダー取引プラットフォームのスクリーンショット

gbpusd, h1, 2017.03.01

アルパリ・インターナショナル・リミテッド、メタトレーダー5、デモ

虹とは何ですか?

GBPUSD, H1, 2017.03.01, アルパリ・インターナショナル・リミテッド, MetaTrader 5, デモ


 
Viktor Vasilyuk:
ところで、他のデータも撮ってみた。枚目にも虹が出ている。これは、あなたがこの論文を書いたコードに干渉したためだと思います。論文の中で、あなたはいくつかの修正を加えたと書いていますね。



ノードを初期化する際にランダム性を正規化しても、学習時のノード自体は制限されません。ノードをユニットで初期化しても結果には影響しません。

しかし、結果を得るスピードには影響するかもしれません。

それぞれの列の最小値と最大値の間のフィールドからランダムな値でノードを初期化するという事実は、SOMが最初に指定されたフィールドにノードを追い込む必要がないため、単純に収束を早めます。

このプロセスは学習プロセスそのものに有機的に織り込まれているため、グリッドが駆動している瞬間が今で、学習している瞬間が今だとも言えない。あるフィールドに走り込むということは、非常に大きな変化係数を持つノードを調整することを意味する。

つまり根本的には、私の介入は何も変えていない。収束のスピードを早めただけだ。

しかし、もしこのメカニズムに不満があるのなら、自由に直してくれて構わない。IncludeSOMNode.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」ファイルを作成した場合、以下の2つの値しかないと理解してよろしいでしょうか?

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

2つの値しかない:

  • -0.195
  • 0.086

Sample5_SOM_Net_Player "を実行すると、次のように表示されます。

スタート 1 スタート2

つまり、コーエン・ネットワークはファイル "optim.csv "に2つの値があることを発見した。2つの何?パターン?


 

つまり、隣り合う2つのバーが強気か弱気かを調べたい場合、このようなシーケンスを記述する必要がある:

隣接する2軒のバー

最終的には、4つの主要なシーケンス("11"、"12"、"21"、"22")と5番目のシーケンスが存在することになります。


そして、指定された数のバーを 調べ、これらのシーケンスを書き込むファイル "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 "を実行する。そうでしょう?

 

あなたは2つの値を持っていますが、250ノード(50x50)をオーダーしているので、当然グリッドは中間値のフィールド全体にノードを伸ばします。

その上、あなたはクラスタリング・フィールドに取るに足らない値Timeを入力しています。もし時間を使いたいのであれば、データ 構造は周期性を反映すべきです。そうでなければ、グリッドは月曜日と金曜日がどのように違うかを理解できません。あなたが持っているような時間の表現は、少なくとも数年分のデータでは合理的です。

コホーネン・グリッドは、類似した(多変量の用語で)例の近傍にノードを配置する。そうすれば、仕事の理解とともにすべてがうまく収まるだろう。

 
Nikolay Demko:

あなたは2つの値を持っていますが、250ノード(50x50)をオーダーしているので、当然グリッドは中間値のフィールド全体にノードを伸ばします。

その上、あなたはクラスタリング・フィールドに取るに足らない値Timeを入力しています。もし時間を使いたいのであれば、データ 構造は周期性を反映すべきです。そうでなければ、グリッドは月曜日と金曜日がどのように違うかを理解できません。あなたが持っているような時間の表現は、少なくとも数年分のデータでは合理的です。

コホーネン・グリッドは、類似した(多変量用語で)例の近傍にノードを配置する。そうすれば、仕組みを理解することで物事がうまく収まるようになる。


csvファイルをこのような形式で作り直すと、次のようになる:[ローソク足のサイズ][曜日(1, 2, 3, 4, 5)]のようにcsvファイルを作り直し、例えば100本の小節のためにそれを埋めると、csvファイルには100の例が あることになりますか?その場合、ノードの数はいくつになりますか?3*3?
 
Vladimir Karputov:

csvファイルをこのようなフォーマットで作り直した場合:[ローソク足のサイズ][曜日(1, 2, 3, 4, 5)] という形式でcsvファイルを作り直し、それを例えば100本分埋めた場合、csvファイルには100本のexampleが入って しまうのでしょうか?その場合、ノードの数はいくつになりますか?3*3?


クラスタリングか回帰か、何を得たいかによる。

クラスタリングは、いくつかの例を1つのクラスタにまとめます。

回帰は、例で表現されていないポイントのフィールドをカバーするために、例よりも多くのノードを必要とします。

繰り返しますが、このプロセスはバイナリではないので、クラスタリングとは言えませんが、これは回帰です。多方向スペクトルとして想像してください。そして、ノードの数が例の数と等しいゼロ・ポイントでは、クラスタリングと回帰の量がほぼ等しくなります。

 
Nikolay Demko:


クラスタリングか回帰かによって異なります。

クラスタリングは、複数の事例を1つのクラスタにまとめるので、ノードの数は事例の数より少なくなければならない。

回帰は、例で表現されていないポイントのフィールドをカバーするために、例よりも多くのノードを必要とします。


さて、単純化すると、私は4つのシーケンスの可視化を取得したかった:

取引に関するフォーラム、自動取引システム、取引戦略のテスト。

論文「コホネン・マップについてもう一度」の議論

ウラジーミル・カルプトフ, 2017.04.04 13:49

つまり、2つの隣り合うバーが強気か弱気かを調査したい場合、そのようなシーケンスの記述を作成する必要があります:

隣接する2軒のバー

最終的には、4つの主要なシーケンス( "11"、 "12"、 "21"、 "22")と1つの第五 - 任意のバーが強気でも弱気でもない場合(バーのボディサイズがゼロ) - があります。


を指定された数のバーで実行する。つまり、スクリプトを所定の数のバーにわたって実行し、5つのシーケンス(「0」、「11」、「12」、「21」、「22」)のいずれかを割り当てます。曜日も指定する。結局、[配列名][曜日]の例を100小節分用意することになる。

 
Vladimir Karputov:


簡単に言うと、私は4つのシークエンスについて視覚化したかった:


ある小節数で。つまり、指定した小節数のスクリプトを渡し、5つのシーケンス("0"、"11"、"12"、"21"、"22")のいずれかを割り当てる。曜日も指定する。結局、100小節分の[配列名][曜日]の例が100個できます。


すみません、よく理解できないのですが、条件の組み合わせがあって、それを正確に知っているなら、なぜグリッドが必要なのでしょうか?

もしそうでないなら、例えば、ある列にはOpen[i]-Close[i]の差、別の列にはOpen[i+1]-Close[i+1]の差というように、興味のあるものをグリッドに表示し、クラスタリングに基づいて、どのクラスタを解釈するかの条件を設定するのがよいでしょう。

 
Nikolay Demko:


すみません、よく理解できないのですが、もし複数のコンディションの組み合わせがあり、それが何であるかが正確に分かっているのであれば、なぜグリッドが必要なのでしょうか?

***

  1. 組み合わせ("0"、"11"、"12"、"21"、"22")は、今日例を挙げただけだ。それが機能するかどうかはわからない。もし私がいろいろな組み合わせを思いついた場合、このグリッドはどのように役立つのでしょうか?このグリッドは、あるグループ(クラスター?)の中で私の例がヒットした数を視覚的(数?)に示してくれると思ったんだ。
  2. 例えば、Open[i]-Close[i]の差をある列で、Open[i+1]-Close[i+1]の差を別の列で......」としたら、どんなフィードバックがあるのだろう?さて、私は異なる色を見るだろう - しかし、どれがどれですか?