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

 
mytarmailS :
bunu zaten yaptım, sinir ağı sorduğum hedefle daha geniş bir ufukta öğrenmiyor

Sözlerine gülümsüyorum.

Bu, öğrenmeyen bir sinir ağı değil, tam anlamıyla öğrenmemeye zorluyorsunuz. Sinir ağı, gürültüye ek olarak, bir sinyalin de nerede olduğunu öğrenecek ve sizin göreviniz, Büyük Sinir Ağı'nı kullanarak bu sinyali gürültüden izole etmek ve yeniden eğitilmesini engellemektir.

 
Alexey Burnakov :
Bu daha doğru bir cevap) Farklı yöntemler denemeniz gerekiyor.

Her nasılsa böyle bir yaklaşım önerdi.

Bir danışman alıyoruz, kod tabanından mümkün. Ana şey tam kanlı olmaktır ve boşalıp boşalmaması önemli değildir. Önkoşullar oluşturabilirsiniz. Örneğin: trend, üç pencere, SL ve TP, MM olmadan, durum hatası işleme...

Drenajın nedenine bakarız ve sorunu R kullanarak çözmeye çalışırız. Alt pencerelerdeki problemleri ekstrapolasyon ile çözeriz ve eski pencerede sınıflandırmaya göre bir sonraki çubuğu tahmin ederiz.

 
Alexey Burnakov :

Özellik seçimi ile ilgili makalem.

https://habrahabr.ru/company/aligntechnology/blog/303750/

Okuması ilginçti, çalışma için teşekkürler. Deney 6'yı anlamadım - sonunda neden Y ve Z tahmin edicileri seçildi? Z hedef değişkendir, tahminciler listesinde olmamalıdır.

3 boyutlu bir tavşan grafiği alıp üzerinde modeli eğitme fikrini beğendim. Dürüst olmak gerekirse, ilk başta bir "tavşan"ın bir grafikte güzel görünen ve yalnızca bir dizi sayıda tavşan görme yeteneğine sahip bir kişi için anlamlı olan bir tür sözde rastgele veri kümesi olduğunu düşündüm. Ancak bir tavşanı tanımlayacak böyle bir işlev yoktur, herhangi bir model için bu sadece 3 boyutlu uzayda özel bir şekle sahip kümeler oluşturan bir dizi nokta olacaktır. Benim bakış açıma göre, her noktanın üç koordinatının da kendi aralarında herhangi bir bağlantısı ve bağımlılığı yok, hiçbir algoritmanın baş edemeyeceğini umuyordum. Yazının sonunda şaşırdım.

Aynı deneyi PCA ile yapmaya çalıştım, sonuçlar şöyle:
%95 doğruluk için bir bileşen gereklidir, X ve Y kullanır. Ancak tahmin algoritması tek bileşenle çalışmaz, en az iki tane almanız gerekir. Genel olarak ikisi de X ve Y kullanır (bu kodda gösterilmez, ancak grafikten görülebilir), yani her şey yolunda.
Modeli sampleA üzerinde eğitin, ardından sampleA için Z'yi tahmin edin: R^2 = 0.04759303
Modeli örnekA üzerinde eğitin, örnekB için Z'yi tahmin edin: R^2 = 0.05325888

SampleB için tahmin edilen Z'nin 3 boyutlu grafiğini çizdim, sonuç kötü çıktı. Model gerçekten herhangi bir bağımlılık bulamadı, ancak tüm Z'lerin ortalamasını tek bir düzlemde aldı. Tavşan düz çıktı. Bazı modelleri eğitmeyi ve tahmin edilen bir tavşan çizmeyi denediniz mi? Farklı modellerle nasıl çalıştığı ilginç.

Tavşan ve y-bilinçli pca için ekli kod. Küçük bir söve var, tahminci yükleme tablosu bir nedenden dolayı bileşenleri sıralıyor. Yani 1,10,11,12,2,3,4,5,... ve önem sırasına göre şu sıraya bakmanız gerekiyor: PC1, PC2, PC3,...

Dosyalar:
bunny_pca.txt  5 kb
 
mytarmailS :
bunu zaten yaptım, sinir ağı sorduğum hedefle daha geniş bir ufukta öğrenmiyor

Henüz bir nöronu bir çubuğun ötesinde eğitmeye çalışmadım, ancak prensibin aynı olacağına inanıyorum. Onunla şu şekilde çalışıyorum:

1) mt5 - ohlc, zaman, göstergelerden mümkün olduğunca çok başlangıç verisi toplayın. Neyin yararlı olup neyin olmadığını bilmediğimden, her şeyi alıp çöpleri ayıklamaya çalışıyorum. Her şeyi bir nörona aktarmak imkansızdır, çünkü nöron çöp üzerinde yeniden eğitilir ve bu durumda ön testte bir hata yapar. Çöpü ayıklamak kolay değil, genel olarak, bu konunun 28 sayfasının tamamı nasıl yapılacağına ayrılmıştır ve her şey hala belirsizdir. Bir sonraki çubuk için fiyatın düşüşüne/büyümesine bağlı olarak verilere - 0 veya 1 hedef değişkeni ekliyorum.

2) Aslında, çöplerin ortadan kaldırılması. Orijinal verileri analiz eden ve değerlendiren bir fonksiyon olmalıdır. Skor ne kadar yüksekse, o kadar az çöp. Değerlendirme fonksiyonunu farklı başlangıç tahmin edici kombinasyonları (eğitim tablosundan sütunlar) ile sağlamaya çalışıyoruz, sonucu iyileştirmeye çalışıyoruz. Sonuç olarak, teorik olarak yeniden eğitime yol açmayacak belirli bir dizi tahminci bulunacaktır.

3) Diyelim ki çöpler tarandı. Şimdi nöronu eğitme zamanı. R'den nnet paketini kullanıyorum, öğrenme hızı, hızlanmalar, yavaşlamalar, eğitim fonksiyonları türleri gibi hiperparametrelerin olmaması şeklinde artıları var. Daha az hiperparametre - daha az sorun. Çapraz doğrulama ile eğitim almanız gerekir. Orijinal tabloyu alıyorum ve %70/%15/%15 oranında üçe bölüyorum (yeni tablolara tren/test/validate denir) (kod çıngırak günlüğünden alınabilir, bununla başladım ). Daha sonra, örneğin, tren masasında bir nöronu eğitmek için 10 yineleme yapıyorum. Tahmin hatasını R^2 olarak kabul ediyorum. Tabloların test ve doğrulama sonuçlarını tahmin ediyorum, onlar için de R ^ 2 hesaplıyorum. 10 eğitim yinelemesi daha yapıyorum, 3 tablo için tahmini tekrarlıyorum, yeni R^2'ye bakın. Masalardan birinde R^2 düşmeye başladığı anda antrenmanı durdurmanız gerekir (her zaman sadece tren masasında büyür). Hazır. Şimdi tüm bunlar, farklı sayıda gizli nöron ve çapraz doğrulamalar arasında farklı sayıda eğitim yinelemesi kullanılarak baştan tekrarlanabilir; son kez.

Bütün bunlar biraz karmaşık görünebilir, ama aslında daha da karmaşık :), bu adımların her birinde çok fazla sorun var. Ama stabil sonuçlar veriyor.

 
San Sanych Fomenko :

Öğrenmemiş olmam iyi, çünkü sen gürültüden öğreniyorsun. Ama öğrenmiş olsaydım, evet, kâse, ama gerçek ....

Gürültüyü ortadan kaldırmak için burada meşgul. Bu nedenle, en azından bir şeyin kalacağı umuduyla birçok tahminci alıyoruz.

Evet, gürültüyü öğreten ve gürültüden gürültüyü ayıklamaya çalışan sadece sizsiniz, stokastiğin (örneğin) sihirli değeri 90 olsaydı ve piyasa bu gösterge değeriyle düşerse anlayacaksınız, o zaman hiçbir şey olmayacaktı. o zaman hiçbir ağ göze görünmezdi

1) En iyi durumda, yaptığınız şey, bazı kriterlere göre mümkün olan 100'den en iyi 10 göstergenin seçilmesidir ve göstergenin bir değer aralığı vardır, diyelim ki bu 100 değerden 100'ü, sadece 3'ü çalışır ve hatta o zaman her zaman değil, ancak belirli durumlarda, yalnızca bu 3 değer ve gürültü yoktur ve tüm gösterge değil, yalnızca bunlar bırakılmalıdır, çünkü değerlerin geri kalanı aynı gürültüdür, yani tüm bunlar gösterimleriniz niteliksel olarak derin değil ve bu nedenle çok etkili değil

2) Ayrıca, işaretlerin tutarsızlığı gibi bir şey var, örneğin fiyatı alıyoruz, nesnel ve çelişkili değil, yani fiyat yükselirse, o zaman yükselir ve ikinci bir seçenek yoktur (eğer atarsak trendin gücü ile nüanslar, vb.), aynı stokastiği alıyoruz, 90 değerini alabilir ve düz ve trend yükseldiğinde ve trend düştüğünde, yani bu gösterge sadece ağa hiçbir şekilde yardımcı olmuyor, aksine, okumaları çelişkili olduğu için sürekli olarak karıştırıyor, bu nedenle piyasa için olağan göstergeler geçerli değil ve bunun hakkında düşünmüyorsunuz bile, korkunç olan her şeyi atın ve daha fazla, ve sonra bana seslerden bahset

3) Aslında ağı eğittim, yukarıda yazdığım gibi tahmin ufkundan memnun değilim

 
Dr.Tüccar :

Okuması ilginçti, çalışma için teşekkürler. Deney 6'yı anlamadım - sonunda neden Y ve Z öngörücüleri seçildi? Z hedef değişkendir, tahminciler listesinde olmamalıdır.

3 boyutlu bir tavşan grafiği alıp üzerinde modeli eğitme fikrini beğendim. Dürüst olmak gerekirse, ilk başta bir "tavşan"ın bir grafikte güzel görünen ve yalnızca bir dizi sayıda tavşan görme yeteneğine sahip bir kişi için anlamlı olan bir tür sözde rastgele veri kümesi olduğunu düşündüm. Ancak bir tavşanı tanımlayacak böyle bir işlev yoktur, herhangi bir model için bu sadece 3 boyutlu uzayda özel bir şekle sahip kümeler oluşturan bir dizi nokta olacaktır. Benim bakış açıma göre, her noktanın üç koordinatının da kendi aralarında herhangi bir bağlantısı ve bağımlılığı yok, hiçbir algoritmanın baş edemeyeceğini umuyordum. Yazının sonunda şaşırdım.

Aynı deneyi PCA ile yapmaya çalıştım, sonuçlar şöyle:
%95 doğruluk için bir bileşen gereklidir, X ve Y kullanır. Ancak tahmin algoritması tek bileşenle çalışmaz, en az iki tane almanız gerekir. Genel olarak ikisi de X ve Y kullanır (bu kodda gösterilmez, ancak grafikten görülebilir), yani her şey yolunda.
Modeli sampleA üzerinde eğitin, ardından sampleA için Z'yi tahmin edin: R^2 = 0.04759303
Modeli örnekA üzerinde eğitin, örnekB için Z'yi tahmin edin: R^2 = 0.05325888

SampleB için tahmin edilen Z'nin 3 boyutlu grafiğini çizdim, sonuç kötü çıktı. Model gerçekten herhangi bir bağımlılık bulamadı, ancak tüm Z'lerin ortalamasını tek bir düzlemde aldı. Tavşan düz çıktı. Bazı modelleri eğitmeyi ve tahmin edilen bir tavşan çizmeyi denediniz mi? Farklı modellerle nasıl çalıştığı ilginç.

Tavşan ve y-bilinçli pca için ekli kod. Küçük bir söve var, tahmin edici yükleme tablosu bir nedenden dolayı bileşenleri sıralıyor. Yani 1,10,11,12,2,3,4,5,... ve önem sırasına göre şu sıraya bakmanız gerekiyor: PC1, PC2, PC3,...

Peki ana bileşenlerinizde X ve Y var mı? Bunu anlamak önemli olacaktır.

İkincisi, tavşan yaklaşımı hakkında. Tabii ki, böyle olmalı! Bu aynı doğrusal modeldir. Hafif eğimli bir düzlem (eğer X ve Y ise) veya bir çizgi (eğer bir öngörücü varsa) çizecektir. Bütün lineer tavşan modeli bu) İşte tam da bu yüzden lineer olmayan modelleri kullanmaya çalışıyorum.

Tavşanı başka bir yöntemle (ayrık değerlere dayanarak) geri yüklemek bu şekilde ortaya çıkıyor.

 
Alexey Burnakov :

Peki ana bileşenlerinizde X ve Y var mı? Bunu anlamak önemli olacaktır.

Evet, sadece X ve Y. Bunu kod aracılığıyla nasıl yapacağım, henüz bulamadım, bununla ilgili tüm makaleler grafiklerle çalışıyor. Alınacak bileşenlerin sayısı componentToUse değişkeninde bulunabilir. Bu durumda, componentToUse = 2, yani sadece PC1 ve PC2 için grafikte geniş yatay çizgileri olan tahmin edicileri almanız gerekir.

Yukarıdaki grafikte, PC1 ve PC2 sütunlarına (birinci ve ikinci ana bileşenler) ve ardından yeşil yatay çizgilere bakın. Çizgi 0'dan uzaklaşırsa (artı veya eksi olması önemli değil), bu tahmin edici ilgili ana bileşende kullanılır. PC1 y_clean kullanır ("_clean", orijinal öngörücüyle karıştırılmaması için verileri ölçeklerken otomatik olarak eklenir), PC2 x_clean kullanır. Bu, PCA bileşen analizinin sonucudur - x_clean ve y_clean almanız gerekir.

Devam edersek, PC3 input_noise_3_clean kullanır. Bu sadece bir örnek, bu durumda PC3 almanıza gerek yok.

Burada her şey gerçekten iyi çalıştı. Grafikte X ve Y açıkça göze çarpmaktadır. Aynı grafiği daha önce Forex için yayınlamıştım, örneğin orada her şey kötü.

 
Dr.Tüccar :

Evet, sadece X ve Y. Bunu kod aracılığıyla nasıl yapacağım, henüz bulamadım, bununla ilgili tüm makaleler grafiklerle çalışıyor. Alınacak bileşenlerin sayısı componentToUse değişkeninde bulunabilir. Bu durumda, componentToUse = 2, yani sadece PC1 ve PC2 için grafikte geniş yatay çizgileri olan tahmin edicileri almanız gerekir.

Yukarıdaki grafikte, PC1 ve PC2 sütunlarına (birinci ve ikinci ana bileşenler) ve ardından yeşil yatay çizgilere bakın. Çizgi 0'dan uzaklaşırsa (artı veya eksi olması önemli değil), bu tahmin edici ilgili ana bileşende kullanılır. PC1 y_clean kullanır ("_clean", orijinal öngörücüyle karıştırılmaması için verileri ölçeklerken otomatik olarak eklenir), PC2 x_clean kullanır.

Devam edersek, PC3 input_noise_3_clean kullanır. Bu sadece bir örnek, bu durumda PC3 almanıza gerek yok.

Burada her şey gerçekten iyi çalıştı. Grafikte X ve Y açıkça göze çarpmaktadır. Aynı grafiği daha önce Forex için yayınlamıştım, örneğin orada her şey kötü.

Burada tahmin edicilerin seçimi doğrusal bir yöntemle elde edilmiştir. Pekala, şaşırdığına sevindim. Yani yeni bir şey görüyorsun
 
Dr.Tüccar :

Henüz bir nöronu bir çubuğun ötesinde eğitmeye çalışmadım, ancak prensibin aynı olacağına inanıyorum. Onunla şu şekilde çalışıyorum:

1) mt5 - ohlc, zaman, göstergelerden mümkün olduğunca çok başlangıç verisi toplayın. Neyin yararlı olup neyin olmadığını bilmediğimden, her şeyi alıp çöpleri ayıklamaya çalışıyorum. Her şeyi nörona aktarmak imkansızdır, çünkü nöron çöp konusunda yeniden eğitilir ve bu durumda ön testte bir hata yapar. Çöpü ayıklamak kolay değil, genel olarak, bu konunun 28 sayfasının tamamı nasıl yapılacağına ayrılmıştır ve her şey hala belirsizdir. Bir sonraki çubuk için fiyatın düşüşüne/büyümesine bağlı olarak verilere - 0 veya 1 hedef değişkeni ekliyorum.

2) Aslında, çöplerin ortadan kaldırılması. Orijinal verileri analiz eden ve değerlendiren bir fonksiyon olmalıdır. Skor ne kadar yüksekse, o kadar az çöp. Değerlendirme fonksiyonunu farklı başlangıç tahmin edici kombinasyonları (eğitim tablosundan sütunlar) ile sağlamaya çalışıyoruz, sonucu iyileştirmeye çalışıyoruz. Sonuç olarak, teorik olarak yeniden eğitime yol açmayacak belirli bir dizi tahminci bulunacaktır.

3) Diyelim ki çöpler tarandı. Şimdi nöronu eğitme zamanı. R'den nnet paketini kullanıyorum, öğrenme hızı, hızlanmalar, yavaşlamalar, eğitim fonksiyonları türleri gibi hiperparametrelerin olmaması şeklinde artıları var. Daha az hiperparametre - daha az sorun. Çapraz doğrulama ile eğitim almanız gerekir. Orijinal tabloyu alıyorum ve %70/%15/%15 oranında üçe bölüyorum (yeni tablolara tren/test/validate denir) (kod çıngırak günlüğünden alınabilir, bununla başladım ). Daha sonra, örneğin, tren masasında bir nöronu eğitmek için 10 yineleme yapıyorum. Tahmin hatasını R^2 olarak kabul ediyorum. Tabloların test ve doğrulama sonuçlarını tahmin ediyorum, onlar için de R ^ 2 hesaplıyorum. 10 eğitim yinelemesi daha yapıyorum, 3 tablo için tahmini tekrarlıyorum, yeni R^2'ye bakın. Masalardan birinde R^2 düşmeye başladığı anda antrenmanı durdurmanız gerekir (her zaman sadece tren masasında büyür). Hazır. Şimdi tüm bunlar, farklı sayıda gizli nöron ve çapraz doğrulamalar arasında farklı sayıda eğitim yinelemesi kullanılarak baştan tekrarlanabilir; son kez.

Bütün bunlar biraz karmaşık görünebilir, ama aslında daha da karmaşık :), bu adımların her birinde çok fazla sorun var. Ama stabil sonuçlar veriyor.

Benim farklı bir bakış açım var ve sen bunu anlamıyorsun
 

San Sanych Fomenko :
Ve ilk 10'u (çeşit) seviyeye alıp gerisini atarsanız?

R ^ 2 grafiğini ve kullanılan bileşenlerin sayısına göre kazanma vakalarının yüzdesini çizdim. Ön testte en iyi sonuç 41 bileşenle elde edildi (yaklaşık %70'lik bir kazanç, çok iyi). Ama geriye dönük çizelgelerden öğrenemezsiniz, sadece sürekli büyürler. Bileşenlerin önemine güveniyorsanız, ön testte en iyi sonuç olmayan 73'ü almanız gerekir.

Bir ön testin R^2'si, zamanın >%50'sini kazandığında bile negatif olabilir, gerekli dengesiz sonuçlar nedeniyle, "0" sınıflarının sayısı "1"den farklıdır, dolayısıyla ortalamaları 0,5 değildir ve R^2 bundan biraz daha kötü.