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

 
レナト・ファットフーリン

記事のRの間違いについて、最初の発言に戻ろう。

私たちの意見は、「誤りはあるが、それは実装の不注意によるもの」です。

あなたのスペシャリストは、実利的に私に答えようとしないのです。タングステンを突かれただけで、それっきり。

私たちの主張を繰り返します。ガンマ分布に誤差はありません。これは数学の世界では慣例となっている。あなたの側には、正しくないエラーフレーズがあります。

貴バージョンにおける密度のゼロの導出は、まず、考えられる選択肢(規約)の一つです。そして第二に、この値(ナン、0または1)の選択から応用分析の本質は何も影響を与えません。分布関数は、統計量を推定するために使用されます。この中では分布がゼロになっている。そして、それで十分なのです。

t分布について。 このエラーはRの最新版で再現しましたが、アルゴリズムの本質に迫るものではありませんでした。本当に訂正が必要だったことは認めます。

Rサポートに質問してみる。
 

そして、彼のように数週間かけてすべてを計算し直し、再確認するのです。その代わり、私たちの記事も読んでいませんね。

私たちとしては、仕事をこなしたということです。そして、いい仕事ができた。Wolframもあなたにとって権威でないのなら、このような伝え方は時間の無駄です。

クリエイターとユーザーを混同しないでくださいよ。

 
レナト・ファットフーリン

そして、彼のように数週間かけてすべてを計算し直し、再確認するのです。その代わり、私たちの記事も読んでいませんね。

私たちとしては、仕事をこなしたということです。そして、いい仕事ができた。Wolframもあなたにとって権威でないのなら、このような伝え方は時間の無駄です。

クリエイターとユーザーを混同しないでくださいよ。

あなたの意見を尊重します。しかし、なぜそれに答えるのか?

何度でも言う。

貴バージョンにおける密度のゼロの導出は、まず、考えられる選択肢(規約)の一つです。そして第二に、この値(ナン、0または1)の選択から応用分析の本質は何も影響を与えません。分布関数は、統計量を推定するために使用されます。このとき、分布はゼロになる。そして、これで十分なのです。

一般論として付け加えると、計算が速くなる ことはプラスです。つまり、客観的に見て、関数の実装が悪くなっているわけでも、逆に良くなっているわけでもない、というのが、今回の記事の内容です。
 
感情的な部分が終わっていればいいのですが...。

0^0を探し回ってきました。これはまさに論点であり、x=0のときのガンマ分布の確率密度 式に含まれるものである。


今回の議論では、これが答えです。
0^0 と 0! は空積の法則により 1 に等しい。IEEE規格では、0^0は1を評価することになっています。だから、ほとんどのコンピューターソフトはそのように評価する。0に評価することが有用な場面はない。

0^0=1 を仮定した数式はたくさんあります。多項式や冪級数の表記、基数演算、二項定理など、これらはすべて0^0=1を前提としています。例えば、x=0をx^0+x^1+x^2+...に代入する。= 1/(1-x)は0^0 = 1を示します。

つまり、この式を1に変換するための基準である。そして、その表現を0にすることに、何の利益も害もないのです。

Rでは1...がハードコードされていて、0になっていると思います。

そこがポイントであり、議論しても仕方がない。コンピュータは代数的に値を計算することができない。
 
アレクセイ・ブルナコフ

貴バージョンにおける密度のゼロの導出は、まず、一つの可能性(コンベンション)です。

関数の定義とは、その関数を計算する方法を指定することだと考えることができる。

与えられた式
アレクセイ・ブルナコフ

さらに、それによると

https://en.wikipedia.org/wiki/Gamma_distribution

x = 0, alpha = 1, beta = 1 のとき、分子に不定値が発生し、分数全体が不確定になる。

厳密には、点ゼロでの分布のガンマ密度は不定であることを述べる。そして、右側の制限を取ると、密度は1です。

このことから、「Rの計算ミス」という表現は正しくないと考えています。より正確には、次数0の表現に等しいと考えるよりも、という慣習の問題である。ガンマ分布の密度を点ゼロでゼロに等しくすることは、有効な方法とは言えないようです。

は、ご指摘の通り、点x=0に不確定要素が含まれるため、関数の定義に当てはまりません。

x>0の代わりにx>0とすれば、不確かさがなくなり、この式で値を計算することができます。

実践について - Mathematica と Matlab は工学計算のための業界標準と考えることができ,それらは0を生成し,すなわちその式はx>0においてのみ有効である.

 
量子力学

関数を定義するということは、その計算方法を指定することだと考えてよい。

与えられた表現は

は、ご指摘の通り、x=0での不確定性を含んでいるため、関数の定義には適しません。

x>0ではなく、x>=0という条件をつけると、不確定要素がなくなり、この式で値を計算することができます。

実践について - MathematicaやMatlabは工学計算の業界標準と言えますが,それらは0を与える,つまりその式はx>0においてのみ真となるのです.

正解です。関数は正の領域(0,inf)に定義される。

なぜポイント0では0のままなのか、なぜエラーは1なのか?


ところで、面白いですね。タングステンは空間 [0,inf] 上でガンマ分布の確率関数を定義しています。それで、ゼロの時にある値を出す...。というのは変ですね。


 
量子力学

Mathematica とMatlabは工学計算の業界標準と言えるでしょう

解決策がない状況を、Wolframが返す結果を調べて、それ以外の結果を間違っていると言ったわけです。これは工学的な計算ではなく、ドグマなのです。

Rを参考にして、Wolframでエラーを発見することについて書くこともできます。すべての数学ソフトウェアを、この状況で何を返すかで2つのグループに分けると、50%と50%に分かれるでしょう、あなたはmqlについての記事でmqlが得意なソフトウェアをさらに十数個追加できますね。

AS243の 誤りについて言及していただき、ありがとうございます。しかし、明確な解決策がない他のパラメータ付き関数の動作のせいにしてはいけません。
そこで、mqlの利点について、「ほら、Rでは小数点以下15桁の誤差がある関数がある」と記事に書くべきだったのです。そして、より精度の高い別の関数をmqlに搭載しています。今のように独断的ではなく、すべてが文化的で科学的なものになるのです。

 
アレクセイ・ブルナコフ

なぜポイント0では0のままなのか、なぜエラーは1なのか?

点x=0において、パラメータa=0.5, b=1の例を考えてみよう。

>dgamma(0,0.5,1,log=FALSE) [1] Inf> pgamma(0,0.5,1,log=FALSE) [1] 0

点x=0を除外しなければ、密度は発散し、確率は問題ない。

そして、さらにその先も問題ない。

> pgamma(0.00001,0.5,1,log=FALSE)[1] 0.003568236

CDF Rを計算するときに、点x=0を除外すると、無限大がどこかに消えてしまうことが判明した。

 
量子

同僚へ!

数ページにわたって、関数 ドメインのエッジにおける、あなたのアルゴリズムとRのアルゴリズムの違いについて議論がなされています。マージナルポイントはマージナルポイントで、実際には差は無視できる。

しかし、今回はもっと本質的な疑問があります。

すべての機能のドキュメントはどこにあるのですか?

以前は、関数がアナログなので、関数を受け取り、Rのドキュメントを受け取り、Rのドキュメントのアルゴリズムの説明や、Rが提供するリンクに行く部分を掘り下げると考えました。Rは非常に質の高いドキュメントとリファレンス装置を持っています。

議論の過程で、あなたの関数はRとは違う、つまりアルゴリズムが他のソースに依存している他の関数であることがわかりました。このことについては、記事自体には何も書かれておらず、資料もありません。そして、そのことを全く別の文脈でレナトから教わるのです。

実際には、RからMQL5にコードを移植することはできないという明確な結論を導き出すことができるのです。

そして、その理由はこうです。

Rのアナログ」と書かれていて、そのアナログに関するドキュメントがなければ、100%アナログであることは明らかで、気にせずインタプリタからコンパイラにコードを簡単に移せます。そして、そうでない場合は、RからMQL5にコードを移植するという考えに終止符を打つのに十分なものです。作業中のコードをRに転送すると、アルゴリズムの実装が微妙なために動作しないMQLのコードが出てきて、完全にデッドロックになるのは誰も望まないでしょう。

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

すべての機能のドキュメントはどこにあるのですか?

以前は、あなたの関数を受け取り、あなたの関数はアナログなので、Rのドキュメントを受け取り、Rのドキュメントのアルゴリズムを説明する部分やRが提供するリンクに行くのだと考えていました。Rは非常に質の高いドキュメントとリファレンス装置を持っています。

議論の過程で、あなたの関数はRとは違う、つまりアルゴリズムが他のソースに依存している他の関数であることがわかりました。このことについては、記事自体には何も書かれておらず、資料もありません。そして、そのことを全く別の文脈でレナトから教わるのです。

実際には、RからMQL5にコードを移植することはできないという明確な結論を導き出すことができるのです。

そして、その理由はこうです。

Rのアナログ」と書かれていて、そのアナログに関するドキュメントがなければ、100%アナログであることは明らかで、気にせずインタプリタからコンパイラにコードを簡単に移せます。そして、そうでない場合は、RからMQL5にコードを移植するという考えに終止符を打つのに十分なものです。作業コードをRに移行した後、アルゴリズムの実装が微妙なために動かないMQLコードを手に入れ、完全にデッドロックに陥ることは誰も望んでいません。

今のところ機能は記事で紹介していますhttps://www.mql5.com/ru/articles/2742

例として、パラメータmu=2, sigma=1の正規分布の 計算を考えてみましょう。

n <- 10
k <- seq(0,1,by=1/n)
mu=2
sigma=1
normal_pdf<-dnorm(k, mu, sigma, log = FALSE)
normal_cdf<-pnorm(k, mu, sigma, lower.tail=TRUE,log.p = FALSE)
normal_quantile <- qnorm(normal_cdf, mu,sigma, lower.tail=TRUE,log.p = FALSE)
normal_pdf
normal_cdf
normal_quantile


1) R関数dnorm()のアナログは関数である。

この関数は,確率変数 x[] の配列に対して,パラメータ mu と sigma を持つ正規分布の確率密度関数の値を計算します.エラーの場合は falseを 返す。R言語のdnorm() の類似品です。

bool MathProbabilityDensityNormal(
  const double   &x[],        // [in]  Массив со значениями случайной величины
  const double   mu,          // [in]  Параметр распределения  mean (математическое ожидание)
  const double   sigma,       // [in]  Параметр распределения sigma (среднеквадратическое отклонение)
  const bool     log_mode,    // [in]  Флаг расчета логарифма значения, если log_mode=true, то рассчитывается натуральный логарифм плотности вероятности
  double         &result[]    // [out] Массив для значений функции плотности вероятности
);

2)アナログpnorm。

この関数は,乱数 x[] の配列に対して,パラメータ mu と sigma を持つ正規分布関数の値を計算します. エラーの場合は,false を返します.Rのpnorm() の類似品です。

bool MathCumulativeDistributionNormal(
  const double   &x[],        // [in]  Массив со значениями случайной величины
  const double   mu,          // [in]  Математическое ожидание
  const double   sigma,       // [in]  Среднеквадратическое  отклонение
  const bool     tail,        // [in]  Флаг расчета, если lower_tail=true, то рассчитывается вероятность того, что случайная величина не превысит x
  const bool     log_mode,    // [in]  Флаг расчета логарифма значения, если log_mode=true, то рассчитывается натуральный логарифм вероятности
  double         &result[]    // [out] Массив для значений функции вероятности
);

3) qnormの類似品。

この関数は、確率[]の値の配列に対して、正規分布の逆関数の値を、パラメータmuとsigmaで計算します。 エラーの場合は、false を返す。Rにおけるqnorm() のアナローグ。

bool MathQuantileNormal(
  const double   &probability[],// [in]  Массив со значениями вероятностей случайной величины
  const double   mu,            // [in]  Математическое ожидание
  const double   sigma,         // [in]  Среднеквадратическое отклонение
  const bool     tail,          // [in]  Флаг расчета, если lower_tail=false, то расчет ведется для вероятности 1.0-probability
  const bool     log_mode,      // [in]  Флаг расчета, если log_mode=true, то расчет ведется для вероятности Exp(probability)
  double         &result[]      // [out] Массив со значениями квантилей
);

その使い方の一例をご紹介します。

#include <Math\Stat\Normal.mqh>
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- arrays for calculated values
   double x_values[];
   double normal_pdf[];
   double normal_cdf[];
   double normal_quantile[];
//--- prepare x values
   const int N=11;
   ArrayResize(x_values,N);
   for(int i=0;i<N;i++)
      x_values[i]=i*1.0/(N-1);
//--- set distribution parameters
   double mu=2.0;
   double sigma=1.0;
//--- calculate pdf, cdf and quantiles
   MathProbabilityDensityNormal(x_values,mu,sigma,false,normal_pdf);
   MathCumulativeDistributionNormal(x_values,mu,sigma,true,false,normal_cdf);
   MathQuantileNormal(normal_cdf,mu,sigma,true,false,normal_quantile);
//--- show calculated values
   for(int i=0;i<N;i++)
      PrintFormat("1 %d, x=%.20e PDF=%.20e, CDF=%.20e, Q=%.20e,",i,x_values[i],normal_pdf[i],normal_cdf[i],normal_quantile[i]);
  }

結果

2016.11.11:56:46.413 Test (EURUSD,H1) 1 0, x=0.0000000000000000e+00 PDF=5.39909665131880628364e-02, CDF=2.27501319481792120547e-02, Q=0.0000000000000000e+00,
2016.11.11 11:56:46.413 テスト (EURUSD,H1) 1 1, x=1.0000000000005551e-01 PDF=6.561581477465951780e-02, CDF=2.87165598160018034624e-02, Q=1.00000000000000088818e-01
2016.11.11 11:56:46.413 テスト (EURUSD,H1) 1 2, x=2.0000000000011102e-01 PDF=7.89501583008941493214e-02, CDF=3.593031911292598098213e-02, Q=2.0000000000177636e-01
2016.11.11 11:56:46.413 テスト (EURUSD,H1) 1 3, x=2.9999999999988898e-01 PDF=9.40490773768869470217e-02, CDF=4.456546247585430410108e-02, Q=3.0000000000266454e-01
2016.11.11 11:56:46.413 テスト (EURUSD,H1) 1 4, x=4.0000000000022204e-01 PDF=1.1092083434679455543315e-01, CDF=5.4799291695579740225e-02, Q=3.999999999999999911182e-01
2016.11.11:56:46.413 Test (EURUSD,H1) 1 5, x=5.0000000000000000e-01 PDF=1.29517595665891743772e-01, CDF=6.68072012688580713080e-02, Q=5.0000000000222045e-01.Q=1.00000000000000000000e-01.Q=1.00000000000000000000e-01.Q=1.00000000000000000000e-01.Q=1.00000000000000000000e-01.Q=1.00000000000000000000e-01,
2016.11.11 11:56:46.413 テスト (EURUSD,H1) 1 6, x=5.999999999999999999796e-01 PDF=1.49727465635744877437e-01, CDF=8.07566592337710387195e-02, Q=6.0000000000310862e-01
2016.11.11 11:56:46.413 テスト (EURUSD,H1) 1 7, x=6.9999999999955591e-01 PDF=1.71368592047807355438e-01, CDF=9.68004845856103440793e-02, Q=7.00000000177636e-01
2016.11.11:56:46.413 Test (EURUSD,H1) 1 8, x=8.000000000000044409e-01 PDF=1.94186054983212952330e-01, CDF=1.15069670221708289515e-01, Q=8.000000000000044409e-01.Q=1.0000000000000000044409e-01.Q=8.0000000000000000044409e-01.Q=8.0000000000000000044409e-01,
2016.11.11 11:56:46.413 テスト (EURUSD,H1) 1 9, x=9.000000000000022204e-01 PDF=2.1785217177032550525793e-01, CDF=1.35666060946382671659e-01, Q=9.0000000000133227e-01
2016.11.11:56:46.413 Test (EURUSD,H1) 1 10, x=1.0000000000000000e+00 PDF=2.41970724519143365328e-01, CDF=1.58655253931457046468e-01, Q=1.0000000000000000e+00,

Rで計算した結果。

>n <- 10> k <- seq(0,1,by=1/n)> mu=2> sigma=1> normal_pdf<-dnorm(k, mu, sigma, log = FALSE)> normal_cdf<-pnorm(k, mu, sigma, lower.tail=TRUE,log.p = FALSE)> normal_quantile <- qnorm(normal_cdf, mu,sigma, lower.tail=TRUE,log.p = FALSE)> normal_pdf[1] 0.05399097 0.06561581 0.06561581 0.07895016 0.09404908 0.11092083 0.12951760 0.14972747 0.17136859 [9] 0.19418605 0.21785218 0.24197072> normal_cdf[1] 0.02275013 0.02871656 0.03593032 0.04456546 0.05479929 0.06680720 0.08075666 0.09680048 [9] 0.11506967 0.13566606 0.15865525normal_quantile[1] 0.0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0
Статистические распределения в MQL5 - берем лучшее из R и делаем быстрее
Статистические распределения в MQL5 - берем лучшее из R и делаем быстрее
  • 2016.10.06
  • MetaQuotes Software Corp.
  • www.mql5.com
Рассмотрены функции для работы с основными статистическими распределениями, реализованными в языке R. Это распределения Коши, Вейбулла, нормальное, логнормальное, логистическое, экспоненциальное, равномерное, гамма-распределение, центральное и нецентральные распределения Бета, хи-квадрат, F-распределения Фишера, t-распределения Стьюдента, а также дискретные биномиальное и отрицательное биномиальные распределения, геометрическое, гипергеометрическое и распределение Пуассона. Есть функции расчета теоретических моментов распределений, которые позволяют оценить степень соответствия реального распределения модельному.
ファイル:
Test.mq5  2 kb
理由: