Doğrusal regresyon yazmaya yardımcı olun - sayfa 6

 

Muhtemelen bu durumda en iyi şey, tüm X[i]'nin aritmetik ortalamasını bulmak, kendi değerlerinden çıkarmak, regresyon katsayılarını hesaplamak ve onları tekrar düzeltmektir. Prensip olarak, hiçbir şey aynı şeyi Y[i] ile yapmayı engellemez. Ancak açıkça zor olmasa da formülleri bulmaya çalışmadım. Açıkça zayıf koşullu matrislerle bir tür şaka var.

PS Ve veri serilerini normalleştirdikten sonra, onları yaklaşık olarak aynı sıraya getirebilirsiniz.

 
Mathemat писал (а) >>

Muhtemelen bu durumda en iyi şey, tüm X[i]'nin aritmetik ortalamasını bulmak, kendi değerlerinden çıkarmak, regresyon katsayılarını hesaplamak ve onları tekrar düzeltmektir. Prensip olarak, hiçbir şey aynı şeyi Y[i] ile yapmayı engellemez. Ancak açıkça zor olmasa da formülleri bulmaya çalışmadım. Açıkça zayıf koşullu matrislerle bir tür şaka var.

PS Ve veri serilerini normalleştirdikten sonra, onları yaklaşık olarak aynı sıraya getirebilirsiniz.

Ve MOZH aracılığıyla teklif ettim ve teklif ettim. Doğrudan formülün herhangi bir ayarlamaya ihtiyacı yoktur.

Artık ACF'yi BASE koduna koyabilirsiniz. Tekrar kontrol ettim, her şey 8 haneye kadar eşleşiyor ama bu büyük ihtimalle MQL'de hesaplanan ACF değerlerinin dosyaya yazılmasından kaynaklanıyor.

 

Sergey, birkaç yıl önce LR'mi yazarken buna rastladım. Çıkış yolu basit - Candid'in tavsiyesini dinleyin. Bu öneride açıklığa kavuşturacağım tek şey Zaman[Çubuk-1]'i değil, ilk X[] değerinin zamanını çıkarmaktır. İlk olarak, bu, X kaynağının aktarımı prosedür içinde gerçekleştirildiğinden, prosedür kodunu evrensel kılar. İkincisi, grafikte çok sayıda çubuk varsa (3 yıl zaten 1000000 dakikadır, yani 60000000 saniyedir), o zaman grafiğin ilk çubuğunun zamanını çıkarmak durumu temelde değiştirmeyecektir. Üçüncüsü, herhangi bir MO olmadan orijinal formüllerinize dönebilirsiniz, bu da doğruluğu korurken döngünün tekrarını kaldırabileceğiniz anlamına gelir.

Bir şey daha. X[]'inizin dakikaların zamanı olduğunu fark ettim. Yani, X eşit uzaklıktadır . Bu da genel olarak zamandan uzaklaşıp bar numarasını kullanabileceğiniz anlamına geliyor. Bu geçişi yaparsanız, her şey hem doğru hem de hızlı bir şekilde değerlendirilecektir. Kontrol edebilirsin. Bu, LR'nizin hem M1 hem de D1'de aynı şekilde çalışacağı açısından da tercih edilir (çubuk numarası değil, Zaman ise X değerlerinin D1'de nasıl farklı olacağını hayal edin).

 
Yurixx писал (а) >>

Sergey, ..

Teşekkür ederim hepsini denedim.

Hesaplamamın versiyonunu az önce yayınladım, belki birileri işe yarar. Hiçbir şeyi hiçbir yere taşımanıza gerek yok. X'i 0 noktasına taşımak benim için uygun değil. ACF'yi hesaplarken bu işlevi kullanıyorum ve zamana bağlı olması gerekiyor (orada bazı bağımlılıklar var).

 

Evet, genel olarak, X'in kendisini 0 noktasına aktarmaya gerek yoktur. Bunun için, LR binasının işlevinde X'in kendisini değil, X[1] tarafından zaman içinde kaydırılan bir iç diziyi kullanmak yeterlidir. Bir dizi olmadan bile yapabilirsiniz, toplamları hesaplarken X[1] değerini çıkarmanız yeterlidir.

Bu arada, denediyseniz, gerçekten yardımcı olmadı mı?

 
Yurixx писал (а) >>

Evet, genel olarak, X'in kendisini 0 noktasına aktarmaya gerek yoktur. Bunun için, LR binasının işlevinde X'in kendisini değil, X[1] tarafından zaman içinde kaydırılan bir iç diziyi kullanmak yeterlidir. Bir dizi olmadan bile yapabilirsiniz, toplamları hesaplarken X[1] değerini çıkarmanız yeterlidir.

Bu arada, denediyseniz, gerçekten yardımcı olmadı mı?

Denedim işe yarıyor gibi. Ancak bir uyarı var: Algoritma 6 sayı dizisi ile böyle bir hata veriyorsa, o zaman bir ofset ile bile hatanın birikmeyeceğinin garantisi yoktur. Çalıştığım dizi 7200 (dakika). Bu nedenle böyle bir algoritma buldum, doğru çalışıyor. Ve bundan vazgeçilmesi gerekiyordu, çünkü artık güven kalmadı.

 //+------------------------------------------------------------------+
//| Формула предлагаемая мной                                        |
//| Рассчет коэффициентов A и B в уравнении                          |
//| y(x)=A*x+B                                                       |
//| используються формулы https://forum.mql4.com/ru/10780/page5       |
//+------------------------------------------------------------------+

void LinearRegr ( double X [] , double Y [] , int N , double & A , double & B )
{
       double mo_X = 0.0 , mo_Y = 0.0 , var_0 = 0.0 , var_1 = 0.0 ;
      
     for ( int i = 0 ; i < N ; i ++ )
       {
         mo_X += X [ i ] ;
         mo_Y += Y [ i ] ;
       }
     mo_X /= N ;
     mo_Y /= N ;
        
     for ( i = 0 ; i < N ; i ++ )
       {
         var_0 += ( X [ i ] - mo_X ) * ( Y [ i ] - mo_Y ) ;
         var_1 += ( X [ i ] - mo_X ) * ( X [ i ] - mo_X ) ;
       }
         A = var_0 / var_1 ;
         B = mo_Y - A * mo_X ;
}

ofsetlere gerek yoktur.

 

Sorun değil Sergey, ne istersen kullan. Küçük bir ayrıntıya dikkatinizi çekmek istiyorum.

Kesinlikle anladığınız gibi, MO herhangi bir seri için max ve min arasında yer alır. Sizin tarafınızdan oluşturulan kod, aslında orijinin [mo_X, mo_Y] noktasına aktarılması anlamına gelir. Ve bunun için tüm 7200 değerleriniz arasında dolaşıyorsunuz. Ve sonra, toplamları hesaplama sürecinde, sıfır noktasının koordinatlarını serinin koordinatlarından çıkarırsınız. Aynı başarı ile [Xm, Ym] serisinin herhangi bir noktasını başlangıç noktası olarak alabilir ve [mo_X, mo_Y] yerine [Xm, Ym] koyarak ikinci çevrimin hesaplamalarını yapabilirsiniz.

Doğrusal regresyonun A parametresi, orijin ötelemeleri altında değişmezdir. MO'nun bununla hiçbir ilgisi yok.

Bu gerçeği kağıt üzerinde 3 dakikada kontrol edebilirsiniz.

Bu nedenle, MO hesaplama döngüsü gereksizdir. Siparişleri kapatmak için X ve Y değerlerini getirmeniz yeterlidir.

 
Prival писал (а) >>

algoritma 6 sayı dizisi ile böyle bir hata verirse, o zaman bir ofset ile bile hatanın birikmeyeceğinin garantisi yoktur.

Buradaki nokta sayıların sayısı değil, bu 6'nın her birinde sabit (işe yaramaz) bir toplama olarak 1216600000 olduğu gerçeğidir.Bu sadece hiçbir bilgi içermeyen çöptür. Ama 10 anlamlı rakam. Diyelim ki 9, son 0 bilgilendirici değil çünkü 6'nın tümü de mevcut. Bu çöpün karesini alırken, mantisin 17 önemli basamağını puanlayacaktır. Ve içinde sadece 15 tane var, yani alt rakamlar sıfırlanacak (tuvalete). Bu arada, gerekli bilgileri içeren bu sıfırlama rakamlarıdır (X değişken bileşeni hakkındaki bilgilerin bir kısmını içerirler).

 

Bu yüzden bu formülü icat etmedim. O kitaplarda. Ayrıca, kareleri kullanan formülden bu türetilmiştir (kareler olmadan). Sadece bir kalemle otur. Tarayıcıya gideceğim, Tikhonov V.I.'den bir sayfa göndereceğim. "İstatistiksel Radyo Mühendisliği" s.446.

 
Bu doğru, sadece bir kalemle oturun ve b eğimi için orijinal formülünüzde Xi -> Xi-X0 ve Yi -> Yi-Y0'ı değiştirirseniz, bu yeni formülün orijinaline eşdeğer olduğunu göreceksiniz. Herhangi bir X0 ve Y0 değeri için . Bu nedenle, (MO'nun hesaplanması olan) Xi ve Yi'nin toplamları, LR'yi hesaplama süresini yarıya indirecek olan ikinci döngü içinde aktarılabilir. Doğruluğu elde etmek için uygun X0 ve Y0'ı seçmeniz gerekir. Ve bunu daha iyi yapmak için X ve Y satır sıraları birbirine daha yakın olsun.