トレーディングにおける機械学習:理論、モデル、実践、アルゴトレーディング - ページ 195

 
ミハイル・マルキュカイツ
以前のバージョンでは、遅延を発生させるとエンベロープのパワーが上がってしまうので、遅延を発生させていたのですが、プリフェッチのアルゴリズムが改善されたので、遅延は必要ないと思い、遅延なしのトレーニングをするようにしています。それらを使わずにトレーニングすることを心がけています。結果については後日報告します。

もし、私が失敗したら、つまり、ラグなしに一般化度が上がらないのであれば、13版と14版は、狭い範囲のタスクを対象とした、ある種の非ユニバーサルな方向性である可能性が高いのではないでしょうか?

その場合、GITをロールバックして、別の、より普遍的な方法でjPredictionを移動させる必要があります。

第二の仮説がありますが:サンプル内のラグの存在は、以前のバージョンが磨かれた狭い、非普遍的な方向、ですか?

 
ユーリー・レシェトフ

もし、この仕掛けがうまくいかなかった場合、つまり、ラグのない一般性が向上しなかった場合、バージョン13と14は、狭い範囲のタスクのために研ぎ澄まされた、何らかの非ユニバーサルな方向性である可能性が高いのではないでしょうか?

その場合、GITをロールバックして、別の、より普遍的な方法でjPredictionを移動させなければならないでしょう。

第二の仮説がありますが:サンプル内のラグの存在は、以前のバージョンが磨かれた狭い、非普遍的な方向、ですか?

さて、どうしたものか...練習次第、すぐに報告します...。
 
Dr.トレーダー

では、ここでお返事します。

#пара строк из той таблицы, не буду я всё текстом копировать, потом первая строка повторена ещё дважды
dat <- data.frame(cluster1=c(24,2,13,23,6), cluster2=c(5,15,13,28,12), cluster3=c(18,12,16,22,20), cluster4=c(21,7,29,10,25), cluster5=c(16,22,24,4,11), target.label=c(1,1,0,1,0))
dat <- rbind(dat, dat[1,], dat[1,])
#результат последней строки поменян на 0 для эксперимента
dat[7,"target.label"]=0

library(sqldf)
#для sqldf точек в названиях колонок быть не должно
colnames(dat)[6] <- "target"

dat1 <- sqldf( "select cluster1, cluster2, cluster3, cluster4, cluster5, avg(target) as target_avg, count(target) as target_count from dat group by cluster1, cluster2, cluster3, cluster4, cluster5" )
dat1
dat1[ dat1$target_count>=10 & dat1$target_avg>0.63 , ]
dat1[ dat1$target_count>=10 & ( dat1$target_avg<0.37 | dat1$target_avg>0.63 ), ] #на случай если оба "0" или "1" встречаются чаще 70%

ありがとうございます!とてもコンパクトなソリューションです!

文字列のニュアンスがもう一つ違うので、よろしくお願いします


dat1 <- sqldf( "select cluster1, cluster2, cluster3, cluster4, cluster5, avg(target) as target_avg, count(target) as target_count from dat group by cluster1, cluster2, cluster3, cluster4, cluster5" )

選択的なクラスタ名を1つの変数に置き換えるにはどうすればよいですか?

colnames_dat <- colnamed(dat) [-"target"]
dat1 <- sqldf( "select colnames_dat, avg(target) as target_avg, count(target) as target_count from dat group by colnames_dat" )

というのも、現実には500、あるいは1000クラスタが存在するため、各クラスタ名を手書きするのは非現実的であり、解決策は真正面から取り組めないからです

 
ミハイル・マルキュカイツ
さて、どうしたものか...実践したらすぐにお伝えします...。

ポイントは、バージョン13以前は、サンプルの先頭に近い予測変数が高い確率で処理されていたことです。そして、サンプルの末尾(ターゲット変数に近い)にあるものは、より低い確率で処理された。つまり,あらかじめ標本の中で最も有意な予測因子を左に,最も有意でないものを右に配置すれば,良好な汎化能力を得ることができる.その逆なら、貧乏。問題は、どの予測因子が最も有意であるかを事前に知る必要があること、つまりサンプル中の予測因子を有意性であらかじめランク付けしておく必要があることであった。しかし、その場合、予測器選択アルゴリズム自体があまり効率的でなかった。

バージョン14では、すべての予測変数の処理確率がほぼ同じになっています。しかし、これが別の問題を生む。結局のところ、予測器フィッティングアルゴリズムは勾配探索法で動作し、汎化度を高めるために毎回1ステップずつシフトしているのである。同時に、他の勾配法のように局所的な極限で「立ち往生」してしまうリスクもゼロではない。バージョン12以前では、このリスクはサンプル内の予測因子を事前にランク付けすることで軽減されていました。

一般に、第1版、第2版どちらのアルゴリズムにも問題があり、それを解消するための分析が必要です。例えば、「谷」を「飛び越える」ために、現在の状態から異なる方向に数歩のランダムなジャンプをアルゴリズムに導入することです。

 
mytarmailS:

> clusternames <- paste(colnames(dat)[-ncol(dat)], collapse=",")
>
clusternames
[1] "cluster1,cluster2,cluster3,cluster4,cluster5"
> sql_query <- paste0("select ", clusternames, ", avg(target) as target_avg, count(target) as target_count from dat group by ", clusternames)
>
sql_query
[1] "select cluster1,cluster2,cluster3,cluster4,cluster5, avg(target) as target_avg, count(target) as target_count from dat group by cluster1,cluster2,cluster3,cluster4,cluster5"
> dat1 <- sqldf( sql_query )
>
dat1

 
ユーリー・レシェトフ

を、「渓谷」を「飛び越える」ために。

ニューロニックにL-BFGS最適化を組み込んで、谷から抜け出せるようにすることもあります。例えば、nnetニューラルパッケージ。

いろいろな計算があってよくわからないが、勾配に沿って降下するのではなく、勾配から勾配に沿って降下する(微分の微分)、ということだ。

 
ヴィザード_。
1) 正しく理解された原始的な例(ネットなどがどこにもない場合、「作り込み」を開始する)))
2)ただ、100個見つけて使えるのに、なぜ70%を探すのか(もちろん、値段は関係ない)。

1) はい、はい、彼らはその罪を持っています )) 私は「私の」アプローチの利点についての段落でそれを説明しました。

2)私は反転で組み合わせを探します、それは単に方向やろうそくの色が、反転ではなく、上向き、下向きです

当初は必要な観測量よりもはるかに少ないが、すべてがうまくいけば40%の結果で満足できる。目標リスクは1対5なので70%も必要ない

Dr.トレーダー

ありがとうございます。ゆっくりとデータを準備し、クラスター化し、パターンを探して、結果をお知らせします。

 
Dr.トレーダー

neuronkiにL-BFGS最適化が組み込まれていることもあり、谷から登ることができる。例えば、nnet neuronkeyパッケージなどです。

BFGSとその派生系であるL-BFGSは、jPredictionが既に解決した問題、すなわち局所極値を見つけることを目的として設計されています。つまり、これらのアルゴリズムは、代替の極値を探すために谷を「飛び越える」のではなく、最も近い極値の方向に「谷を登る」ことができるのです。

アルゴリズムの "飛び道具 "が必要なのです。そして、ランダムにではなく、何らかの可能性のある方向に「ジャンプ」することが望ましいのです。理論的には、遺伝子の突然変異によって、このような "ジャンプ "を実現することができます。しかし、遺伝的 アルゴリズムは非常に時間がかかり、最小限の時間消費で潜在的な子孫をシラミ検査できるようなタスクに適しているのです。ニューロキーを訓練して汎化性を計算するのは時間がかかるので、ここではジェネティクスは遅すぎるでしょう。

OK、もっといい表現がないのですが、現在、ランダムに「ジャンプ」する変種をテストしています。

 

もう一冊のRの本他にどこがいいのかわからないので、ここにピン留めしておきます。ありのままでいい。

S.E. Mastitsky, V.K. Shitikov

Rによる統計解析とデータビジュアライゼーション

ファイル:
 

mytarmailSとして、バーごとにスライドさせて検索すると、各パターンには、各バーの値がどの程度の間隔になるかという情報が含まれています。パターンが多いほど、各小節の間隔が狭くなります。

大雑把に言えば、新しいデータを持つある窓が、先に見つかったあるパターンに含まれるためには、あらゆるパターンに固有のこのような真偽の限度に収まらなければならないのである。

1000パターンも探してきたら、それぞれのパターンの「チャンネル」幅が小さくなってしまいます。そして、新しいデータは常に学習データと微妙に異なるため、そのような狭いチャンネルに入ることは難しく、誤差が生じることになります。

私なら、オッカムのブリトンに導かれるように、パターン数を減らしても劣化せずに同じ結果が得られるなら、それを実行した方がいいと思いますね。

理由: