Ticarette makine öğrenimi: teori, pratik, ticaret ve daha fazlası - sayfa 200

 
Renat Fatkhullin'in fotoğrafı.

Makaledeki orijinal R hata ifadesine geri dönelim.

Görüşümüz geçerliliğini koruyor - hatalar var ve bunlar uygulamadaki ihmalden kaynaklanıyor.

Uzmanınız bana esas hakkında cevap vermek istemiyor. Wolfram'da ve diğerlerinde dürttü.

Görüşümüzü tekrar edeceğim. Gama dağılımında herhangi bir hata yoktur. Matematik camiasındaki bir uzlaşım meselesi. Sizin açınızdan doğru olmayan bir hatayla ilgili bir ifade var.

Versiyonunuzdaki yoğunluk için sıfır çıktısı, öncelikle olası seçeneklerden (kurallar) biridir. İkincisi, bu değerin (nan, 0 veya 1) seçiminden uygulamalı analizin özü hiçbir şeyi etkilemez. İstatistikleri tahmin etmek için dağılım fonksiyonları kullanılır. Bu dağılım sıfırdır. Ve bu yeterli.

t dağılımı ile ilgili. Bu hatayı R'nin en son sürümünde yeniden oluşturdum. Ancak algoritmanın özüne girmedim. Düzeltmenin gerçekten gerekli olduğunu kabul ediyorum.

R destek ekibine bir soru sormayı deneyeceğim.
 

Ve onun yaptığı gibi derine iner, her şeyi anlatır, birkaç haftayı tekrar kontrol ederek geçirirsiniz. Ama bunun yerine, makalemizi bile okumadın.

Kendi payımıza, işi yaptık. Ve iyi yaptılar. Wolfram sizin için bir otorite değilse, o zaman bu iletişim şekline boşuna başladınız.

Lütfen içerik oluşturucuları kullanıcılarla karıştırmayın.

 
Renat Fatkhullin'in fotoğrafı.

Ve onun yaptığı gibi derine iner, her şeyi anlatır, birkaç haftayı tekrar kontrol ederek geçirirsiniz. Ama bunun yerine, makalemizi bile okumadın.

Kendi payımıza, işi yaptık. Ve iyi yaptılar. Wolfram sizin için bir otorite değilse, o zaman bu iletişim şekline boşuna başladınız.

Lütfen içerik oluşturucuları kullanıcılarla karıştırmayın.

Fikrinize saygı duyuyorum. Ama neden bundan sen sorumlusun?

Tekrarlıyorum.

Versiyonunuzdaki yoğunluk için sıfır çıktısı, öncelikle olası seçeneklerden (kurallar) biridir. İkincisi, bu değerin (nan, 0 veya 1) seçiminden uygulamalı analizin özü hiçbir şeyi etkilemez. İstatistikleri tahmin etmek için dağılım fonksiyonları kullanılır. Bu noktada dağılım sıfırdır. Ve bu yeterli.

Genel olarak ekleyeceğim , hesaplamaların hızlanması bir artı. Yani, nesnel olarak, makalenize göre işlevlerin uygulanması daha kötü ve hatta daha iyi değildir.
 
Duygusal kısım bitmiştir umarım..

0 ^ 0 konusu için yün. Bu tam olarak çekişme noktasıdır - x = 0'daki gama dağılımı için olasılık yoğunluk denkleminde bulunur.


Bu tartışmanın cevabı şuydu:
0^0 ve 0! boş çarpım kuralı nedeniyle 1'e eşittir. IEEE standardı, 0^0'ın 1'i değerlendirmesi gerektiğini söyler. Dolayısıyla çoğu bilgisayar yazılımı onu bu şekilde değerlendirecektir. 0'a değerlendirmenin yararlı olduğu durumlar yoktur.

0^0=1 olduğunu varsayan birçok formül vardır, örneğin polinomlar ve kuvvet serileri için notasyon, temel sayı aritmetiği, binom teoremi, vb., bunların tümü 0^0=1 olduğunu varsayar. Örneğin, x=0'ı x^0+x^1+x^2+... = 1/(1-x) olarak değiştirmek, 0^0 = 1'i gösterir.

Yani bu ifadeyi 1'e çevirmenin bir standardı vardır ve ifadeyi 0'a çevirmenin bir faydası veya zararı yoktur.

Sanırım R kodlanmış 1 ... ve sizde 0 var.

Bu noktada ve tartışmanın bir anlamı yok. Bilgisayar değeri cebirsel olarak hesaplayamaz.
 
Alexey Burnakov :

Versiyonunuzdaki yoğunluk için sıfır çıktısı, öncelikle olası seçeneklerden (kurallar) biridir.

Bir fonksiyon tanımlamanın, onun hesaplanma şeklini belirtmek anlamına geldiği gerçeğinden başlayabilirsiniz.

Azaltılmış ifade
Alexey Burnakov :

Ayrıca, göre:

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

x = 0, alfa = 1, beta = 1 için pay, tüm kesri belirsizliğe getiren belirsiz bir değer alır.

Kesin olarak söylemek gerekirse, sıfır noktasındaki gama dağılımının yoğunluğunun tanımlanmadığını beyan ederiz. Ve sağdaki limiti alırken yoğunluk birliğe eşittir.

Bunun ışığında, "R'deki hesaplama hataları" ifadesinin formülasyonunun doğru olmadığına inanıyoruz. Daha doğrusu, bu bir uzlaşım meselesidir: sıfır ifadesinin sıfırın gücüne eşit olarak nasıl düşünüleceği. Gama dağılımının yoğunluğunu sıfır noktasında sıfıra eşitlemek, herhangi bir geleneksel uygulama gibi görünmüyor.

belirttiğiniz gibi x=0 noktasında bir belirsizlik içerdiğinden fonksiyon tanımlamaya uygun değildir.

x>=0 yerine x>0 koşulunu koyarsak belirsizlik olmayacak ve bu formülü kullanarak değerleri hesaplamak mümkün olacaktır.

Uygulamaya gelince - Mathematica ve Matlab, mühendislik hesaplamaları için endüstri standartları olarak kabul edilebilir, 0 verirler, yani. o zaman ifade sadece x>0 için geçerlidir.

 
kuantum :

Bir fonksiyon tanımlamanın, onun hesaplanma şeklini belirtmek anlamına geldiği gerçeğinden başlayabilirsiniz.

Azaltılmış ifade

belirttiğiniz gibi x=0 noktasında bir belirsizlik içerdiğinden fonksiyon tanımlamaya uygun değildir.

x>=0 yerine x>0 koşulunu koyarsak belirsizlik olmayacak ve bu formülü kullanarak değerleri hesaplamak mümkün olacaktır.

Uygulamaya gelince - Mathematica ve Matlab, mühendislik hesaplamaları için endüstri standartları olarak kabul edilebilir, 0 verirler, yani. o zaman ifade sadece x>0 için geçerlidir.

Doğru şekilde. Fonksiyon pozitif alan (0,inf) üzerinde tanımlanır.

Neden 0 noktasında hala 0 var? ve neden hata 1?


Bu arada, ilginç. Wolfram, [0,inf] uzayındaki gama dağılımının olasılık fonksiyonunu tanımlar. Ve böylece sıfırda belirli bir değer veriyorlar... Bu garip.


 
kuantum :

Mathematica ve Matlab, mühendislik hesaplamaları için endüstri standartları olarak kabul edilebilir

Çözümü olmayan bir durumu aldınız, Wolfram'ın döndürdüğü sonuca baktınız ve diğer tüm sonuçları yanlış olarak adlandırdınız. Bu mühendislik hesaplamaları değil, dogmadır.

Veya R'yi standart olarak alıp Wolfram'da bir hata bulma hakkında yazabilirler. Sanırım tüm matematiksel yazılımları alıp böyle bir durumda ne döndürdüklerine göre iki gruba ayırırsanız - %50 / %50 şeklinde bir bölme olacaktır, mql ile ilgili yazıya bir düzine softin daha ekleyebilirsiniz. mql'den üstündür.

AS 243'te belirtilen hatalar için teşekkür ederiz. Ancak, net bir çözümü olmayan parametrelerle diğer işlevlerin davranışını suçlamamalısınız.
Bu nedenle, mql'nin avantajları hakkında bir makale yazmak gerekiyordu - burada R'de 15 ondalık basamak hatası olan şöyle ve böyle bir işlev var. Ve mql'de daha doğru olan başka bir fonksiyonumuz var. Her şey kültürel ve bilimseldi ve şimdi olduğu gibi dogmatik değildi.

 
Alexey Burnakov :

Neden 0 noktasında hala 0 var? ve neden hata 1?

x=0 noktasında a=0.5, b=1 parametrelerine sahip bir örnek düşünün

 > dgamma(0,0.5,1,log=YANLIŞ)
[1] Bilgi
> pgamma(0,0.5,1,log=YANLIŞ)
[on

x=0 noktasını hariç tutmazsanız, yoğunluk birbirinden uzaklaşır ve her şey olasılıkla uyumludur.

Ve sonra da sorun yok:

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

CDF R hesaplanırken x=0 noktasını hariç tutarken, sonsuzluğun bir yerde kaybolduğu ortaya çıktı.

 
Kuantum

Sevgili meslektaşım!

Birkaç sayfa için , fonksiyon tanımları alanının kenarlarında Vash ve R algoritmaları arasındaki farklar üzerinde bir anlaşmazlık var. Uç noktalar uç noktalardır ve uygulamada farklılıklar ihmal edilebilir.

Ancak bu durumda, çok daha önemli bir sorum var:

Tüm işlevleriniz için belgeler nerede?

Daha önce, işlevinizi aldığımızı düşündüm, sonra işlevleriniz analog olduğu için R belgelerini alıyoruz ve R belgelerinin algoritmaları tanımlayan veya R tarafından belirtilen bağlantıları izleyen bölümlerine dalıyoruz. R çok yüksek kaliteye sahip dokümantasyon ve referans aparatı.

Anlaşmazlık sırasında, işlevlerinizin R'den farklı olduğunu öğrendim - bunlar, algoritmaları başka kaynaklara dayanan diğer bazı işlevlerdir. Makalenin kendisinde bununla ilgili hiçbir şey yok, belge yok. Ve bunu Renat'tan tamamen farklı bir bağlamda öğreniyoruz.

Uygulamada, kodu R'den MQL5'e taşımanın imkansız olduğu konusunda kesin bir sonuç vardır.

Ve bu yüzden.

"R'nin bir analoğu" yazıyorsa ve bir analog için herhangi bir belge verilmemişse, bu %100 analogdur ve kodu yorumlayıcıdan derleyiciye zahmet etmeden aktarabilirim. Ve durum böyle değilse, kodu R'den MQL5'e taşıma fikrine son vermek için bir vaka yeterlidir. Çalışma kodunu R'ye taşırken, algoritmaların uygulanmasındaki incelikler nedeniyle çalışmayan MQL kodu aldığınızda, hiç kimse tamamen çıkmaz bir baş ağrısına sahip olmak istemez.

 
San Sanych Fomenko :

Tüm işlevleriniz için belgeler nerede?

Daha önce, işlevinizi aldığımızı düşündüm, sonra işlevleriniz analog olduğu için R belgelerini alıyoruz ve R belgelerinin algoritmaları tanımlayan veya R tarafından belirtilen bağlantıları izleyen bölümlerine dalıyoruz. R çok yüksek kaliteye sahip dokümantasyon ve referans aparatı.

Anlaşmazlık sırasında, işlevlerinizin R'den farklı olduğunu öğrendim - bunlar, algoritmaları başka kaynaklara dayanan diğer bazı işlevlerdir. Makalenin kendisinde bununla ilgili hiçbir şey yok, belge yok. Ve bunu Renat'tan tamamen farklı bir bağlamda öğreniyoruz.

Uygulamada, kodu R'den MQL5'e taşımanın imkansız olduğu konusunda kesin bir sonuç vardır.

Ve bu yüzden.

"R'nin bir analoğu" yazıyorsa ve bir analog için herhangi bir belge verilmemişse, bu %100 analogdur ve kodu yorumlayıcıdan derleyiciye zahmet etmeden aktarabilirim. Ve durum böyle değilse, kodu R'den MQL5'e taşıma fikrine son vermek için bir vaka yeterlidir. Çalışma kodunu R'ye taşırken, algoritmaların uygulanmasındaki incelikler nedeniyle çalışmayan MQL kodu aldığınızda, hiç kimse tamamen çıkmaz bir baş ağrısına sahip olmak istemez.

Şu anda, işlevlerin açıklaması https://www.mql5.com/ru/articles/2742 makalesinde yer almaktadır.

Normal dağılımın mu=2, sigma=1 parametreleriyle hesaplanması örneğini ele alalım:

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) dnorm() işlevinin R analoğu şu işlevdir:

Fonksiyon, bir dizi rastgele değişken x[] için mu ve sigma parametreleriyle normal dağılımın olasılık yoğunluk fonksiyonunun değerlerini hesaplar. Hata durumunda false döndürür. R'deki dnorm() analogu .

 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) normal analog:

Fonksiyon, x[] rasgele değişkenler dizisi için mu ve sigma parametreleriyle normal olasılık dağılım fonksiyonunun değerini hesaplar. Hata durumunda false döndürür. R'deki pnorm() analogu .

 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 analogu:

Olasılık[] dizisi olasılık değerleri için fonksiyon, mu ve sigma parametreleri ile ters normal dağılım fonksiyonunun değerlerini hesaplar. Hata durumunda false döndürür. R'deki qnorm() analogu .

 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] Массив со значениями квантилей
);

Kullanımlarına bir örnek:

#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]);
  }

Sonuç:

2016.11.11 11: 56: 46.413 Test (EURUSD, H1) 1 0, X = 0.000000000000000000E + 00 PDF = 5.39909665131880628364e-02, CDF = 2.27501319481792120547E-02, q = 0.000000000000000000E + 00,
2016.11.11 11: 56: 46.413 Test (EURUSD, H1) 1 1, X = 1.0000000000000055511E-01 PDF = 6.56158147746765951780E-02, CDF = 2.87165598160018034624E-02, q = 1.000000000000088818E-01,
2016.11.11 11: 56: 46.413 Test (EURUSD, H1) 1 2, X = 2.000000000000011102E-01 PDF = 7.89501583008941493214E-02, CDF = 3.59303191129258098213E-02, q = 2.000000000000177636e-01,
2016.11.11 11: 56: 46.413 Test (EURUSD, H1) 1 3, X = 2.999999999999999988898E-01 PDF = 9.40490773768869470217E-02, CDF = 4.45654627585430410108E-02, q = 3.000000000000266454e-01,
2016.11.11 11: 56: 46.413 Test (EURUSD, H1) 1 4, X = 4.000000000000022204E-01 PDF = 1.1092083467955543315E-01, CDF = 547992916995579740225E-02, q = 3.999999999999911182e-01
2016.11.11 11: 56: 46.413 Test (EURUSD, H1) 1 5, X = 5.000000000000000000E-01 PDF = 1.29517595665891743772e-01, CDF = 6.68072012688580713080E-02, Q = 5.000000000000222045E-01,
2016.11.11 11: 56: 46.413 Test (EURUSD, H1) 1 6, x = 5.99999999999999977796e-01 pdf = 1.49727465635744877437e-01, CDF = 8.07566592337710387195E-02, q = 6.00 milyar-01, q = 6.0000000000310862e-01
2016.11.11 11: 56: 46.413 Test (EURUSD, H1) 1 7, x = 6.999999999999999555591E-01 PDF = 1.71368542047807355438e-01, CDF = 9.68004845856103440793E-02, q = 7.000000000000177636e-01
2016.11.11 11: 56: 46.413 Test (EURUSD, H1) 1 8, X = 8.000000000000044409E-01 PDF = 1.94186054983212952330E-01, CDF = 1.1506967021708289515E-01, Q = 8.000000000000044409E-01,
2016.11.11 11: 56: 46.413 Test (EURUSD, H1) 1 9, X = 9.000000000000022204E-01 PDF = 2.17852177032550525793E-01, CDF = 1.35666060946382671659E-01, Q = 9.000000000000133227E-01,
2016.11.11 11: 56: 46.413 Test (EURUSD, H1) 1 10, X = 1.000000000000000000E + 00 PDF = 2.41970724519143365328E-01, CDF = 1.58655253931457046468E-01, q = 1.000000000000000000E + 00,

R için hesaplamanın sonucu:

 > n <- 10
> k <- seq(0,1,by=1/n)
> mü=2
> sigma=1
> normal_pdf<-dnorm(k, mu, sigma, log = YANLIŞ)
> normal_cdf<-pnorm(k, mu, sigma, alt.kuyruk=DOĞRU,log.p = YANLIŞ)
> normal_quantile <- qnorm(normal_cdf, mu,sigma, low.tail=DOĞRU,log.p = YANLIŞ)
> normal_pdf
[1] 0.05399097 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.15865525
> normal_kantil
[1] 0.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-распределения Стьюдента, а также дискретные биномиальное и отрицательное биномиальные распределения, геометрическое, гипергеометрическое и распределение Пуассона. Есть функции расчета теоретических моментов распределений, которые позволяют оценить степень соответствия реального распределения модельному.
Dosyalar:
Test.mq5  2 kb