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

 

Alexey、予測変数の選別のための関数について、もう一つ質問があります。ランダムな入力で フィットネス関数を実行したところ(fitness_f(runif(predictor_number, min = 0, max = 1)) )、0から0,03の結果が得られました。GenSA は結果を最小化しようとします。つまり、GenSA は最終的に入力がゼロになると停止します。それなら、GenSAが反対方向に作用するように、フィットネス関数の結果の符号を変えればいいのでは?
最適化のある時点で、フィットネス関数が負の数を返し始め、それが低ければ低いほど良いというのであれば、今はすべてOKです。

 
Dr.トレーダー

Alexey、予測変数の選別のための関数について、もう一つ質問があります。ランダムな入力で フィットネス関数を実行したところ(fitness_f(runif(predictor_number, min = 0, max = 1)) )、0から0,03の結果が得られました。GenSA は結果を最小化しようとします。つまり、GenSA は最終的に入力がゼロになると停止します。それなら、GenSAが反対方向に作用するように、フィットネス関数の結果の符号を変えればいいのでは?
最適化のある時点で、フィットネス関数が負の数を返し始め、それが低ければ低いほど良いというのであれば、今はすべてOKです。

それはいい質問ですね。自分で考えなさい。

この方法について記事を書いているので、その抜粋を紹介します。


補正された相互情報量と予測変数の部分集合の確率的探索に基づくアルゴリズムのブロック図。


  • 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に変換される閾値(変数インデックス包含フラグ)以上を設定することで、確率的な計算を行う。

threshold < - 1 - optim_var_num / predictor_number


その本質は、計算された最適な入力数を選択するために最大確率の値を設定することである。そして、この論理は二項分布を適用することで確認される。

例えば、データ:全体の半分をトレーニングに使用する場合を考えてみましょう。

17,973行、12予測変数、それぞれ5水準があります。上記の数式を適用すると、最適な予測変数の数は3,226個となる。

予測器をセットに含めるための閾値の公式を適用すると、0.731となる。

二項分布上で選択された変数の数が最も多く得られるのは何ですか?


最大で3回の観測が可能です。正確には、5 ^ 3,226 で178水準となり、それぞれ平均100回の観測が可能である。
 
続けています。関数の出力の値0は,最悪の場合の最大値である。par vector のどの要素も閾値を通過しない場合、自動的に値は 0 となる。最適な値は-1である。入力の部分集合から出力が完全に決定論的であることを意味する。
 

はい、負のフィットネス値を持つ予測変数のサブセットを発見しました。予測変数が数千と多いので、gensaを2回しか繰り返さないようにしたら、8時間かかりました(笑)。フィットネス関数の結果は6%です。これらの予測変数に対してnnetでフロントテストを行ったところ、45%の誤差が出ました。あまり、EAが利益になるとは思えません。より良い結果を得るために、再度10回の反復処理の制限をかけ、実行し、24時間待っています。遺伝学(GAライブラリ)を試してみる必要がありそうです。複数スレッドでより速く動作するでしょう(GAでは結果を最大化するのではなく、最小化します。つまり、GAのフィットネス関数の結果は符号を変える必要があります)。これからも実験していきます。

主成分モデルについて様々な記事を読み、R^2を測定し、予測変数の選択によって それを最大化するだけでなく、フロントテストデータでモデルをテストすることを教えようとしました。なんだか曖昧な感じで出てきていますね。一方では、相関のある予測変数のペアを削除することでモデルのR^2を増加させましたが(bibiloteka caretのfindCorrelation関数)、この結果からのフロントテストデータでモデルをテストするとR^2が減少することが判明しています。奇跡は起きず、PCAモデルも再トレーニングされる。学習サンプルを適切な学習用と検証用の2つに分け、PCAモデルを学習し、検証用サンプルですぐにテストし、最終結果として最小R^2を返すという、より複雑な予測変数の推定を試してみたいのです。このような関数を用いて予測変数の集合を評価し、この値を最大化すれば、学習済みデータと新しいデータに対して良い結果を与える予測変数の集合だけを見つけることができる。確認する必要があります。

また、私はこのスレッドのPCAに関する最初の記事の文章を誤解していたようです。変動の95%を記述できる成分数を選ばなければならない、ということだったのですが、対象変数の予測精度のことを言っているのかと思いました。しかし、そうではなく、主成分は対象変数が全くない状態で構築されており、95%の精度は、まさにその成分を使って生データをどれだけ正確に記述できるかということなのです。そして、予測精度はまったく関係ありません。

 
Dr.トレーダー

はい、負のフィットネス値を持つ予測変数のサブセットを発見しました。予測変数が数千と多いので、gensaを2回しか繰り返さないようにしたら、8時間かかりました(笑)。フィットネス関数の結果は6%です。これらの予測変数に対してnnetでフロントテストを行ったところ、45%の誤差が出ました。あまり、EAが利益になるとは思えません。より良い結果を得るために、再度10回の繰り返しという制限を設けて実行し、24時間待っています。遺伝学(GAライブラリ)を試してみる必要がありそうです。複数スレッドでより速く動作するでしょう(GAは結果を最大化するのではなく、最小化します。つまり、GA用のフィットネス関数の結果は符号を変えるはずです)。もっと実験してみます。

主成分モデルに関する様々な記事を読み、R^2を測定するためにモデルを訓練し、予測変数の選択によってそれを最大化するだけでなく、フロントテストデータでモデルを本当にテストすることを試みています。なんだか曖昧な感じで出てきていますね。一方では、相関のある予測変数のペアを削除することでモデルのR^2を増加させましたが(bibiloteka caretのfindCorrelation関数)、この結果からのフロントテストデータでモデルをテストするとR^2が減少することが判明しています。奇跡は起きず、PCAモデルも再トレーニングされる。学習サンプルを適切な学習用と検証用の2つに分け、PCAモデルを学習し、検証用サンプルですぐにテストし、最終結果として最小R^2を返すという、より複雑な予測変数の推定を試してみたいのです。このような関数を用いて予測変数の集合を評価し、この値を最大化すれば、学習済みデータと新しいデータに対して良い結果を与える予測変数の集合だけを見つけることができる。確認する必要があります。

あと、このスレッドのPCAに関する最初の記事の文章を間違えていたようです。そこで、「ばらつきの95%を記述できる成分数を選ぶ」という話がありましたが、ターゲット変数の予測精度の話かと思いました。しかし、そうではなく、主成分は対象変数が全くない状態で構築されており、95%の精度は、まさにその成分を使って生データをどれだけ正確に記述できるかということなのです。そして、予測精度はまったく関係ありません。

はい、わかっていないことがわかりました。

PCAは単独でも適用できますが、記事ではその点については触れられていません。

ここで議論されるのは、ある大きな予測変数の集合からノイズをどのように除去するかということである。

私の理解では、これは次のような手順で行われます。

1.Y-aware。これは、ターゲット変数に依存した予測変数のスケーリングです。

2.PCAアルゴリズムにより、予測変数のセットを並べ、分散の95%を説明する部分を抽出する。

2.あるいは、PCAアルゴリズムを使って、元の予測変数に計算された係数(ローディング)を掛けることで、新しい予測変数のセットを構築します。本セットは受注生産です。これらの新しいベクトルは、分散の95%を説明できる数だけ取り出される。

PS.

Y-awareは、ノイズ予測フィルタリングの分野で新たな一歩を踏み出したと言えるでしょう。

成功

 
サンサニッチ・フォメンコ

2.PCAアルゴリズムを用いて、予測変数のセットを並べ、分散の95%を説明する部分を取り出す。

これはまだ分かっていません。(以下、混同しないように、Y字型アプローチについてだけ書きます)。記事そのものはこちら:http://www.r-bloggers.com/principal-components-regression-pt-2-y-aware-methods/

princ <- prcomp(dmTrain, center = FALSE, scale. = FALSE)"というコードの後に、データを読み込み、Yでスケーリングし、PCコンポーネントを構築する、という状況があります。この関数は成分の数を制限しません - 予測子の数だけ。まず、その一部だけを選択することです(95%のバリエーションを記述することを十分に推奨します)。記事そのものは、著者が部品のsdevグラフ(不特定多数の分散)を見て、グラフで目立つから2個か5個で十分だと言っているのです。グラフは滑らかに減少しています。

sdevテーブルがあり、その中のエントリ数はコンポーネントの数と同じです。ここから何個の部品を取ればいいのか、計算することは可能でしょうか?すべての数字の和は必ずしも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.トレーダー

まだ、それがわかっていないんです。(以下、混同しないように、Y字型アプローチについてだけ書きます)。記事そのものはこちら:http://www.r-bloggers.com/principal-components-regression-pt-2-y-aware-methods/

princ <- prcomp(dmTrain, center = FALSE, scale. = FALSE)"というコードの後に、次のような状況があります:データを読み込み、Yでスケーリングし、PCコンポーネントを構築します。この関数は成分の数を制限しません - 予測子の数だけ。まず、その一部だけを選択することです(95%のバリエーションを記述することを十分に推奨します)。記事そのものは、著者が部品のsdevグラフ(不特定多数の分散)を見て、グラフで目立つから2個か5個で十分だと言っているのです。グラフは滑らかに減少しています。

sdevテーブルがあり、その中のエントリーの数はコンポーネントの数と同じです。ここから何個の部品を取ればいいのか、計算することは可能でしょうか?すべての数字の和は必ずしも1に限らず、6というのも見たことがありますし、おそらくもっと多いでしょう。

ガラケーを走らせ、3つのテーブルを手に入れる。

  • 標準偏差:ここでは、あらゆる種類の値を持つことができ、合計=1である必要はないと言うことです。
  • 回転: 新しいベクトルを得るために元のベクトルに乗じるべき係数です
  • 構成要素の重要性、議論されていること

最後の1列目は、PC1だけを取れば変動(累積比率)を0.9761で説明でき、PC1とPC2の2つの成分を取れば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.トレーダー

この表をずっと探していたのですが、ようやくまとめで見つかりました。実は一番わかりやすい場所です :)を見せてくれてありがとうございます。これは、サマリーにはあるけれども、オブジェクトのアトリビュートにはないものがある場合です。

この記事には続編があり、まさに部品選択に関する問題で、Y-awareのための特別なソリューションがあることがわかりました。まだ試していません。

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

このRでは、何かオブジェクトを取得したら、すぐにstrとsummaryをつけ、plotもつける。すごいものがたくさん見れますよ。ポイントは、Rにおける「オブジェクト」というものが、多くのプログラミング言語よりもずっと複雑だということです。
 
Dr.トレーダー

はい、負のフィットネス値を持つ予測変数のサブセットを発見しました。予測変数が数千と多いので、gensaを2回しか繰り返さないようにしたら、8時間かかりました(笑)。フィットネス関数の結果は6%です。これらの予測変数に対してnnetでフロントテストを行ったところ、45%の誤差が出ました。あまり、EAが利益になるとは思えません。より良い結果を得るために、再度10回の反復処理の制限をかけ、実行し、24時間待っています。遺伝学(GAライブラリ)を試してみる必要がありそうです。複数スレッドでより速く動作するでしょう(GAでは結果を最大化するのではなく、最小化します。つまり、GAのフィットネス関数の結果は符号を変える必要があります)。もっと実験してみます。

主成分モデルについていろいろな記事を読みましたが、今度はR^2を測定して予測変数の選択により最大化するモデルを学習するだけでなく、フロントテストデータで本当にモデルをテストすることを試してみました。なんだか曖昧な感じで出てきていますね。一方では、相関のある予測変数のペアを削除することでモデルのR^2を増加させましたが(bibiloteka caretのfindCorrelation関数)、この結果からのフロントテストデータでモデルをテストするとR^2が減少することが判明しています。奇跡は起きず、PCAモデルも再トレーニングされる。学習サンプルを適切な学習用と検証用の2つに分け、PCAモデルを学習し、検証用サンプルですぐにテストし、最終結果として最小R^2を返すという、より複雑な予測変数の推定を試してみたいのです。このような関数を用いて予測変数の集合を評価し、この値を最大化すれば、学習済みデータと新しいデータに対して良い結果を与える予測変数の集合だけを見つけることができる。確認する必要があります。

あと、このスレッドのPCAに関する最初の記事の文章を間違えていたようです。そこで、「ばらつきの95%を記述できる成分数を選ぶ」という話がありましたが、ターゲット変数の予測精度の話かと思いました。しかし、そうではなく、主成分は対象変数が全くない状態で構築されており、95%の精度は、まさにその成分を使って生データをどれだけ正確に記述できるかということなのです。そして、予測精度はまったく関係ありません。

なぜこんなに時間がかかったのか、よくわからない。optim_var_numberはいくつになったのでしょうか?10以内であること。1200秒に設定すれば、そろそろ何かあるはずです。
理由: