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

 
Dr.トレーダー

このパッケージだけでは、対象となる変数を予測できるモデルを構築することはできないと思います。ヘルプで見つけたのは、予測変数に基づいて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.トレーダー

このパッケージだけでは、対象となる変数を予測できるモデルを構築することはできないと思います。ヘルプで見つけたのは予測変数に基づいてPCAモデルを構築することで、ターゲット変数は全く存在しません。

これは metaboliteDataComplete テーブルを分析するための 5 つの主要なコンポーネントを持つ resNipals (Nonlinear Estimation by Iterative Partial Least Squares) オブジェクトを作成します。metaboliteDataCompleteの代わりに、predictorを含む独自のテーブルを代用することができます。ここでターゲット変数を与えないことが重要で、後で使用されることになります。

しかし、これでは、さまざまなグラフを調べて、変数間の関係を分析するだけになってしまう。次に予測モデルを作成するために、主要成分PC1,PC2,PC3,PC4,PC5を入力変数(x1,x2,x3,...)とした線形回帰 モデルを構築する。そして、目標変数Yは、望ましい結果として、すでに線形モデルに投入されている。問題は、resNipals が pcaMethods パッケージの "pcaRes" クラスの何らかのオブジェクトであることです。ヘルプを見ても、これだけのことをする方法は見つかりませんでした。

カレットパッケージのPCAモデルであれば、こんな感じです。

理論的には、pcaMethods パッケージには、このオブジェクトを操作するための独自の関数があるはずですが、私は何も見つけられませんでした。

元々、PCAは2つの問題を解決するために設計された。

1. 少数のオブザベーションで非常に多くの予測変数がある。これは有機化学や遺伝学でよくあることです...私たちの場合は、大規模なTFのマクロ経済データ、例えば年次のデータを使用しています。

2.予測因子間に相関がある。

そこで、PCAアルゴリズムでは、この2つの主要な問題を解決しています。

1.元の予測変数の数を、新しい、しばしば根本的に小さい予測変数の数で減らす。そうすることで,アルゴリズムは,この小さな数が,予測変数の元のセットの変動のある割合,たとえば95%を説明できることを保証する.この値は研究者によって選ばれる。

2.新しい予測変数のセットは、互いに全く相関がない。

つまり、我々にとってPCAは、モデリングのために生データを事前に準備するアルゴリズムの一つ であり、対象変数を予測するためのモデリングに取って代わることはできないのである。

PCAの詳細がいろいろと議論される中で、この点に関する私の発言の意味が失われているように思います。そこで思い出していただきたいのですが、元の予測変数の数を減らすだけでなく、対象変数に対するノイズとなる予測変数を排除する方法でPCAを使うという参考 例を挙げました。このスレッドで議論されているのはどっちなんだ。

そこで、予測因子間のノイズの問題に戻り、この問題を解決するためにPCAを適用するという非常に具体的なアイデアが使えることを提案します。

 
Dr.トレーダー

metaboliteDataCompleteテーブル解析のための5つの主要なコンポーネントを持つresNipals(Nonlinear Estimation by Iterative Partial Least Squares)オブジェクトが作成されます。metaboliteDataCompleteの代わりに、独自のテーブルを代用することができます ...... 続きを読む

試したのはニッパルで、ホームページの2枚目の写真にあるように、これもあまり分離できないので、3枚目の写真のニューラルネット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:

試したのはニッパルで、ホームページの2枚目の写真にあるように、これもあまり分離できないので、3枚目の写真のニューラルネットPCAを取るべきでしょう

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

少し話がそれますが、コードについてヘルプが必要です...。

予測変数がカラムにあり、それらの組み合わせですべての予測変数の差をカウントしたい、私はそれを実装しました、問題は、私は今、何が何であるかを理解するために、それぞれの組み合わせに十分な名前を付ける必要があります。

予測因子 "A "を持つ列があるとします。, "Б", "С"

違いを組み合わせて作る

1) A - B

2) A - C

3) C - B

質問:新しいカラムに "a_minus_b" のような名前を付けるにはどうすればよいのでしょうか?, "a_minus_c"

私はRとプログラミング全般をマスターしたところなので、このようなトリックには慣れていないのですが

このコードに何を付け加えればいいのでしょうか?

こんな感じです。

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

また、名前も あります。

ヘルプをご覧ください。

 
SanSanych Fomenko:

PCAは、もともと2つの問題を解決するために設計されました。

PCAはもともと、元の系列の次元を小さく することを目的としていた。それだけです。それを予測変数の選択に使うのはナンセンスだ。
 
サンサニッチ・フォメンコ

おおよそこのような感じです。

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

名前も あります

参考までにご覧ください。

)) そうなんですが、1000個も変数があるのなら、なぜ一つ一つ手作業で書くのでしょうか?
 

Dr.トレーダー

...

データはeurusd d1、クラス0または1-次のバーの価格下落または上昇から取得されます。モデルが正しく10例中6例でtest.csvの結果を予測した場合、あなたは外国為替でそれを使用して取引しようとすることができ、原則として、失うことはありませんが、あまりにも多くの利益を期待しないでください。もし、10件中7件(以上)で正しく予測できれば、これは聖杯への正しい道です。他の年や月でモデルをトレーニングしてテストしてみて、すべてが同じになれば、非常に良いことです。

...


具体的にはレポートファイルで。

/**
* サンプル外でのモデリングの質。
*
* TruePositives: 182
* TrueNegative: 181
* FalsePositives: 1
* FalseNegatives: 1
* 統計情報付きサンプルのパターン数:365個
* アウトオブサンプルの総エラー数:2
* 汎化能力感度:99.4535519125683%。
* 一般化能力の特異性:99.45054945054946%。
* 一般化能力:98.90410136311776%。
* レシェトフによるインジケーター:8.852456238401455
*/


それは、チームを構築し、プロジェクトを作成する時間です オープンソース - mql5とJava上でこの目的のために自動化されたシステム。ここでは、Javaによるバイナリ分類器のソースコードと、モデル学習用のサンプルを作成するMQL5スクリプトを紹介します。

複合施設の仕組みの概算図。

  1. 金融商品ごとに、チャート上に個別のロボットがあり、バーの始値で トリガーされ、パターンをファイルにダンプします。
  2. Javaアプリケーション(バイナリ分類器)は、各シンボルのパターンをダウンロードし、ステップ1からロボットが作成したファイルを1秒間隔で待機させる。その後、パターンファイルはディスクから削除されます。このパターンに基づいて、ツールは売買シグナルをパターン別に分類し、ファイルに保存します。
  3. ロボットはステップ2からのヘッジからのファイルを待ち、ファイルが見つかり次第、その商品とシグナルを読み取り、シグナルに従ってその商品の取引を開始または取り消します。読み込んだファイルは削除される。

このプロジェクトに参加することに興味があり、JavaまたはMQL5でプログラミングする方法を知っている人は、このスレッドを購読してください。

 
mytarmailS:

こんにちは!あなたは間違った関数を使用しました、あなたは私が与えたウェブサイト上で示されたように"nlPca"を使用する必要があります、しかし、それは私のせいです、あなたはより多くの詳細を必要とします...。

予測するのではなく、「やってみる」「成功する」。

この例は残念ながら別のスレッドのものです。例えば,FXでは常に100%のデータが得られますが,実験的にデータを取得する他の分野では,必ず欠損値があります。 この例では,予測因子自体の欠損値を再構成するためにPCAを使用しています。 この例では,3列のうちの1列の値をランダムに消去して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つの良い予測因子と数十のノイズ予測因子が含まれています。分析の力を借りて、ノイズをふるい落とすのです。このスレッドで遭遇した他の例でも同じコードを使用しましたが、概ねうまくいきました。でも、FXはもっと複雑で、インジケータを使ってもこんなにいい絵は出てこないし、もっとスマートなものを考えないとね。

 
Dr.トレーダー

この例は、残念ながら別のトピックからです。例えばFXでは、常に100%のデータを取得することができますが、実験的にデータを取得する他の分野では、常にギャップ、欠損値があります。 この例では、PCAを用いて予測因子自体の欠損値を再構成しています。 この例では、3列のうちの1列の値をランダムに消去してPCAモデルを作成し、それを用いて欠損値を再構成しています。

私は試したことがありませんが、技術的には、pcaモデルに含めることで、ターゲット変数を予測変数として扱うことも可能でしょう。そして、新しいデータではその値が不明となるため、pcaが欠損値を埋めることができます。

この "NA "マークが日付の中に放り込まれているのは偶然ではないと思っていたが、マニュアルを読んでみると、明らかにニューラルネットワークによるPCAと書かれている。しかし、それにしても、このサイトの人はどうやってクラスごとにうまく分割してこの素敵な写真を撮ったのだろう?