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

 
San Sanych Fomenko :

Millet Meclisi'nin bir şey yaptığına dair herhangi bir kanıt göremiyorum.

Aşırı takma, bilimde ve özellikle model oluşturmada dünya çapında bir kötülüktür.

Bu nedenle, üç küme için bir hata gereklidir:

  • Eğitim Seti. Çıngırak'ın anlama şekli (OOB, test, doğrulama) oldukça uygundur
  • tarihler açısından eğitim kümesinin dışında olan bir küme.
  • tarihler açısından eğitim kümesinin dışında kalan başka bir küme.

Son iki set, terminale geldikleri için karıştırmasız, bazlar çubuktur.

Her üç küme de yaklaşık olarak aynı hataya sahip olmalıdır. Bu durumda, modeli eğitirken aldığınız tahminci setini düzeltmeniz gerekecektir.

İlk başta, bu görevde yeniden eğitimi hesaba katmadım, buna gerek yoktu. İlk kez nöron, iç katmanda sadece bir nöronla birlikteydi. Az önce kontrol ettim, uzun süreli eğitim sırasındaki hata yaklaşık %45 ve altına düşmüyor. Eğitim sırasında, ağ bu girdilere 1,3,5,7,9,11 daha fazla ağırlık verir, ancak nöron eksikliğinden dolayı gerçekten yeniden öğrenemez. Fikir, bundan en doğru sonucu çok sınırlı koşullarda çıkarmak ve hangi girdilere daha fazla ağırlık vereceğini görmekti.

Artık bir validasyon dosyasına sahip olarak daha ciddi çalışmak zaten mümkün. Şimdi kaynak dosyayı 2 parçaya böldüm (%85 ve %15), ilk kısımda eğitim aldım, bazen eğitimi durdurdum ve her iki kısımda da hatayı ölçtüm. Dosyanın %15'inden gelen bu örnekler eğitime girmedi, ancak onlardaki hata eğitim bölümünde olduğu gibi yaklaşık olarak azaldı. Dosyanın her iki bölümünde de %0 olunca eğitimi durdurdum ve ikinci dosyadaki nöronu kontrol ettim, hata ~%0 idi. Bu görev için yeniden eğitimin işe yaramadığı ortaya çıktı, komik.


Ancak Forex'teki nöron bu görevden daha kötü. İlk olarak, hata hem eğitimde hem de doğrulamada her iki örneğe de düşer. Daha sonra hata eğitim setine düşmeye devam eder, ancak test setinde büyümeye başlar, bu noktada eğitimi durdurma zamanıdır. Sonra genellikle seçimlerden önceki geçmişe ve onlardan sonraki geçmişe göre sonucu kontrol ederim. Benim için bunlar sizinki gibi üç veri seti. Ancak her üç setteki hata benim için hala farklı (ve antrenman döneminin dışında büyük).

Sonucun nasıl iyileştirileceğine dair çeşitli fikirler vardı, örneğin sonuçları yumuşatmak veya bir filtre eklemek (<0,1 - sat, >0,9 - satın al ve aradaki her şey - alım satımsız bir dönem). Nöronun sonucuna bir filtre ekleyerek ve onu optimize ederek ticaret sonucunu çok iyi iyileştirebilirsiniz, ancak ön test için bana hiç yardımcı olmadı. Ayrıca, nöronun belirli bir tarih dönemi üzerinde eğitilmiş olması durumunda, filtreyi bu dönemden önceki geçmişe göre optimize edebileceğinize dair iyi bir fikir vardı. Çünkü optimizasyon periyodundan önceki hata, muhtemelen optimizasyon periyodundan sonraki hata ile ilgilidir. Ama işe yaramadı, eğer tarihin üç dönemi varsa - "bir nöron öğrenmeden önce" - "nöron öğrenmeden" - "bir nöron öğrendikten sonra", o zaman üçünün de birbirine bağlı olmayan kendi optimal filtreleri olacaktır. yol.

Şimdilik, modelin eğitim ve test örneklerinde küçük bir hata (<%10) olması gerektiği sonucuna vardım. Modelin sonucuna ilişkin filtreler uygulanmaz ve "sonucu her dört haftada bir tersine çevir" gibi bir falcılık yoktur. M15'ten daha küçük periyotlarda inmeyin. Farklı yeni fikirler denerim, onda en az birinin sonucu iyileştirmesi iyi olur. Ve bir şekilde karlı bir model olduğu ortaya çıkmalı.

 
Dr.Tüccar :

İlk başta, bu görevde yeniden eğitimi hesaba katmadım, buna gerek yoktu. İlk kez nöron, iç katmanda sadece bir nöronla birlikteydi. Az önce kontrol ettim, uzun süreli eğitim sırasındaki hata yaklaşık %45 ve altına düşmüyor. Ağ, eğitim sırasında bu girdilere 1,3,5,7,9,11 daha yüksek ağırlıklar verir, ancak nöron eksikliğinden dolayı gerçekte yeniden öğrenemez. Fikir, bundan en doğru sonucu çok sınırlı koşullarda çıkarmak ve hangi girdilere daha fazla ağırlık vereceğini görmekti.

Artık bir validasyon dosyasına sahip olarak daha ciddi çalışmak zaten mümkün. Şimdi kaynak dosyayı 2 parçaya böldüm (%85 ve %15), ilk kısımda eğitim aldım, bazen eğitimi durdurdum ve her iki kısımda da hatayı ölçtüm. Dosyanın %15'inden gelen bu örnekler eğitime girmedi, ancak onlardaki hata eğitim bölümünde olduğu gibi yaklaşık olarak azaldı. Dosyanın her iki bölümünde de %0 olduğunda eğitimi durdurdum ve ikinci dosyadaki nöronu kontrol ettim, hata ~%0 idi. Bu görev için yeniden eğitimin işe yaramadığı, komik olduğu ortaya çıktı.


Ancak Forex'teki nöron bu görevden daha kötü. İlk olarak, hata hem eğitimde hem de doğrulamada her iki örneğe de düşer. Daha sonra hata eğitim setine düşmeye devam eder, ancak test setinde büyümeye başlar, bu noktada eğitimi durdurma zamanıdır. Sonra genellikle seçimlerden önceki geçmişe ve onlardan sonraki geçmişe göre sonucu kontrol ederim. Benim için bunlar sizinki gibi üç veri kümesi. Ancak her üç setteki hata benim için hala farklı (ve antrenman döneminin dışında büyük).

Sonucun nasıl iyileştirileceğine dair çeşitli fikirler vardı, örneğin sonuçları yumuşatmak veya bir filtre eklemek (<0,1 - sat, >0,9 - satın al ve aradaki her şey - alım satımsız bir dönem). Nöronun sonucuna bir filtre ekleyerek ve onu optimize ederek ticaret sonucunu çok iyi iyileştirebilirsiniz, ancak ön test için bana hiç yardımcı olmadı. Ayrıca, nöronun belirli bir tarih dönemi üzerinde eğitilmiş olması durumunda, filtreyi bu dönemden önceki geçmişe göre optimize edebileceğinize dair iyi bir fikir vardı. Optimizasyon periyodundan önceki hata, optimizasyon periyodundan sonraki hata ile ilgili olabilir. Ama işe yaramadı, eğer tarihin üç dönemi varsa - "bir nöron öğrenmeden önce" - "nöron öğrenmeden" - "bir nöron öğrendikten sonra", o zaman üçünün de birbirine bağlı olmayan kendi optimal filtreleri olacaktır. yol.

Şimdilik, modelin eğitim ve test örneklerinde küçük bir hata (<%10) olması gerektiği sonucuna vardım. Modelin sonucuna ilişkin filtreler uygulanmaz ve "sonucu her dört haftada bir tersine çevir" gibi bir falcılık yoktur. M15'ten daha küçük periyotlarda inmeyin. Farklı yeni fikirler denerim, onda en az birinin sonucu iyileştirmesi iyi olur. Ve bir şekilde karlı bir model olduğu ortaya çıkmalı.

Her şey verilerle ilgili

Tüm kümelerdeki veriler, karşılıklı olarak bağımsız gözlemler içermelidir. Ancak bu durumda bile doğrulama daha kötü bir sonuç verecektir.
 

Rattle'dan farklı modeller denedim, orman (orman) da iyi sonuç verdi.

Adım 1 - orman bir şeyler öğrendi ve istatistiklerde 1,3,5,7,9,11 girdileri bir şekilde izole görünüyor. Eğitim dosyasında hata %0, doğrulama dosyasında - %46

Adım 2 - yalnızca 1,3,5,7,9,11 girişlerini ve dosyadaki sonucu bırakın. Yine ormanı yeni bir dosya üzerinde eğittim, şimdi hem eğitim hem de doğrulama dosyalarında hata% 0, her şey yolunda. Tek uyarı, Rattle'ın muhtemelen dosya daha küçük olduğu için ikinci adım için "Değişken sayısı" parametresini 2 olarak ayarlamasıydı. İlk adımda 4 like olarak değiştirdim.

 

Dr.Tüccar

Çıngıraktan yola çıkarak akılda kalan bir kardeş görmek güzel. Her durumda, sonuçları karşılaştırabiliriz.

Yani kendi deneyimim.

Ondan çıngırak ve modeller alıyoruz.

Model sekmesinde RLE değerini alarak öğreniyoruz ve Evaluate sekmesinde Validation ve Testing setleri üzerinde değerlendirme yapıyoruz. Üç sayı alıyoruz.

Elde edilen sonuçların, tahmin ediciler kümesi önceden gürültü tahmin edicilerinden arındırılmamışsa, bu sonuçların hiçbir şey hakkında olmadığını, büyük olasılıkla sadece bir dizi sayı olduğunu iddia ediyorum .

Değerlendir sekmesinde, listelenen sonuçları elde etmenin yanı sıra, kümeyi R Veri Kümesi penceresine koymalısınız. Bu setin orijinal dosyanın mekanik olarak bölünmesiyle elde edilmesi çok önemlidir, yani. üç hanenin tümü için ilk dosya, örneğin 1 Ocak 2014'ten 1 Ocak 2015'e kadar ve işte penceredeki dosya

R Veri Kümesi, 1 Ocak 2015'ten sonra, R'de kullanılan rastgele örnekler ve diğer hileler olmadan gereklidir. Sadece aptalca, mekanik olarak.

Önerdiğim yöntem gerçek ticareti taklit ettiğinden, önemli tahmin edicileri gürültülü olanlardan ayırma başarısını değerlendirmek için başka yöntemler tanımıyorum.

Dört numarayı da yazar mısınız? R Veri Kümesi penceresinden dosyaya sonuç dahil mi?

 
Dr.Tüccar :

Rattle'dan farklı modeller denedim, orman (orman) da iyi sonuç verdi.

Adım 1 - orman bir şeyler öğrendi ve istatistiklerde 1,3,5,7,9,11 girdileri bir şekilde izole görünüyor. Eğitim dosyasında hata %0, doğrulama dosyasında - %46

Adım 2 - yalnızca 1,3,5,7,9,11 girişlerini ve dosyadaki sonucu bırakın. Yine ormanı yeni bir dosya üzerinde eğittim, şimdi hem eğitim hem de doğrulama dosyalarında hata% 0, her şey yolunda. Tek uyarı, Rattle'ın muhtemelen dosya daha küçük olduğu için ikinci adım için "Değişken sayısı" parametresini 2 olarak ayarlamasıydı. İlk adımda 4 like olarak değiştirdim.

İlginç... Tüm önemli olanları almak için derinlik 6 değişkene ayarlanmalıdır.
 
Dr.Tüccar :

Rattle'dan farklı modeller denedim, orman (orman) da iyi sonuç verdi.

Adım 1 - orman bir şeyler öğrendi ve istatistiklerde 1,3,5,7,9,11 girdileri bir şekilde izole görünüyor. Eğitim dosyasında hata %0, doğrulama dosyasında - %46

Adım 2 - yalnızca 1,3,5,7,9,11 girişlerini ve dosyadaki sonucu bırakın. Yine ormanı yeni bir dosya üzerinde eğittim, şimdi hem eğitim hem de doğrulama dosyalarında hata% 0, her şey yolunda. Tek uyarı, Rattle'ın muhtemelen dosya daha küçük olduğu için ikinci adım için "Değişken sayısı" parametresini 2 olarak ayarlamasıydı. İlk adımda 4 like olarak değiştirdim.

İlk durumda, orman eğitim için çok iyi olmayan gürültü kullandı.
 
San Sanych Fomenko :

Dört numarayı da yazar mısınız? R Veri Kümesi penceresinden dosyaya sonuç dahil mi?

Bunu bir nöronla yaptım - dummy_set_features.csv standart olarak 3 parçaya bölünmüştür %70 / %15 / %15; dummy_set_validation.csv, değerlendirme sekmesinde "csv dosyası" olarak kullanıldı (bu temelde R Veri Kümesi ile aynıdır, yalnızca dosya biçimi farklıdır).

Rattle'dan logu aldım, daha önce yazdığım nöron çağrısından bu iki kısıtlamayı kaldırdım, sadece R'de çalıştırdım, modelin hala yetersiz eğitimli olduğu ortaya çıktı (eğitim setinde %35 hata). Eğitim örneğini azaltırsanız, öğrenme sonucu daha kötü olur. Ancak iç katmandaki nöron sayısını artırabilirsiniz, bu öğrenmeyi geliştirmeli.

Nöron sayısını 10'dan 20'ye değiştirdim tekrar eğitime başladım, şimdi eğitim setindeki hata %0 oldu. Doğrulama örneğindeki hata %0,6, test örneğinde - %0,1'dir. dummy_set_validation.csv dosyasındaki hata %0,3'tür. Her şey yolunda, R uygulamada.

İlginç bir şekilde, nöronların öğrenme problemlerinin ağaçların problemlerinden çok farklı olduğu ortaya çıktı. Benim için, NN ile ilgili sorun, doğru sayıda dahili nöron almak ve ağ yeniden eğitmeye başlamadan önce eğitimi duraklatmak. Prensipte, ne kadar çok nöron o kadar iyidir, ancak bu, gerekli RAM ve eğitim süresini büyük ölçüde etkiler. Ekstra öngörücüler özellikle öğrenmeye müdahale etmez, bir nöron genellikle onlarla daha kötü öğrenir, ancak öğrenme süresini arttırırlar ve sadece daha hızlı hale getirmek için onları reddetmek tavsiye edilir.

Mt4'te kendi kendine yazılan bir ağ kullandığımda, danışman hemen öğrenip ticaret yapabilirdi. Öğrenme hızı, ağırlık başlatma, öğrenme algoritmaları ile ilgili sorunlar vardı. Çok fazla küçük problem vardı, eğitim örneğinde bile iyi bir sonuç elde etmek zor, sonunda her şeyden vazgeçtim ve şimdi R'de çalışıyorum. nnet paketi bfgs algoritmasından öğrenebiliyor, bu tüm o küçükleri ortadan kaldırıyor sorunlar. Ancak paketin yalnızca 1 iç katman sınırı vardır. En az 3 dahili katmana sahip olmak isterdim ama bfgs algoritması ile birlikte, aksi takdirde yine çok fazla öğrenme sorunu olacak.

Dosyalar:
r_nnet2.txt  10 kb
 
Dr.Tüccar :

Bunu bir nöronla yaptım - dummy_set_features.csv varsayılan olarak 3 parçaya bölünmüştür %70/%15/%15; dummy_set_validation.csv, değerlendirme sekmesinde "csv dosyası" olarak kullanıldı (bu temelde R Veri Kümesi ile aynıdır , yalnızca dosya biçimi farklıdır).

Hayır, aynı değil.

Şaşırtıcı bir şey, bu konuyu birçok kişiyle tartışıyorum ve KİMSE YAZDIĞIM GİBİ YAPMAZ. Ve ne yazdığımı biliyorum, çünkü yarım yılımı sizinki gibi egzersizlere ve çıngırak () dışında geçirdim. Test cihazında değiştirmediğim şey tamamen farklı bir hatadır. Sonra yukarıda anlatıldığı gibi yaptım, test cihazındaki hata neredeyse R Dataset dosyasındaki hatayla çakıştı.

Alexey'e büyük bir dosyayı mekanik olarak üç parçaya bölerek elde edilen üç dosya verdim. İlk bölümde pratik yapıyoruz, öğretiyoruz, değerlendiriyoruz... Diğer ikisinde de ilkinde aldığımız sayıları kontrol ediyoruz. Her üç dosyada da hata% 20'den fazlaysa (!), Veya daha doğrusu% 40'tan daha yakınsa, model yeniden eğitilmez ve onunla çalışabilirsiniz.

Bahsedilen 3 dosyanın 27 tahmincisi ve 6 hedef değişkeni vardır. 170 tahmin edici arasından kendi algoritmalarım tarafından 27 tahminci seçildi. Bugüne kadar, bu 27 tahmin edici, fazla uydurma modellere yol açmamaktadır. Ancak setimden kalan 143 tahmin edici gürültüdür ve bu gürültüde sizinkiyle karşılaştırılabilir bir hata kolayca alabilirsiniz, ancak model yeniden eğitilmiştir ve daha fazla kullanım için uygun değildir.

Gürültü tahmin edicilerinde neden önemli tahmin edicilere göre daha az hata var?

Benim düşünceme göre, model uydurma algoritması uydurma hatasını azaltmaya çalıştığından, gürültü, rastgele değerler arasında her zaman anlamlı tahmin edicilerden daha iyi bir şey bulabilir. Sonuç olarak, hata ne kadar küçükse, modelin oluşturulmasında o kadar az önemli tahmin edici yer alır!

not

Yanlışlıkla yargılanırsa, NN %100 yeniden eğitilir veya ileriye bakar.

 

Değerlendirme sekmesindeki "CSV dosyası" ve "R veri kümesi", veri kaynağını belirtmenin yalnızca farklı yollarıdır. Aynı verileri gönderirlerse, modeli test ederken sonuç aynı olacaktır.

Eğer, çıngırağı başlatmadan önce, yürütün

dataset_validate <- read.csv( "file:///C:/dummy_set_validation.csv" , na.strings=c( "." , "NA" , "" , "?" ), strip.white= TRUE , encoding= "UTF-8" )

, o zaman bu aynı dataset_validate artık değerlendirme sekmesinde R veri seti olarak mevcut olacaktır. Ancak, model doğrulamanın sonucu, csv dosyası seçeneğini seçmeniz ve C:/dummy_set_validation.csv dosyasını belirtmeniz ile aynı olacaktır, her iki durumda da test verileri aynı olacaktır.

Eğitimin kendisi farklı bir dosyadaydı, dummy_set_features.csv, bu nedenle burada geleceğe bakmak imkansızdır, çünkü her iki dosyadaki veriler farklıdır ve zamana bağlı değildir (ancak formüle). Bence nöron mükemmel bir iş çıkardı ve sonucu belirleyen 6 girdi buldu, kalan girdilerin etkisini azalttı ve istenen formülü sinirsel mantığının bir kısmı ile açıkladı.

Her ihtimale karşı, yinelenen satırları bulmak için her iki dosyayı da kontrol ettim, hala var olup olmadıklarını asla bilemezsiniz. İşte R kodu:

 #читаем данные из файлов для обучения и валидации
dataset_train <- read.csv( "file:///C:/dummy_set_features.csv" , na.strings=c( "." , "NA" , "" , "?" ), strip.white= TRUE , encoding= "UTF-8" )
dataset_validate <- read.csv( "file:///C:/dummy_set_validation.csv" , na.strings=c( "." , "NA" , "" , "?" ), strip.white= TRUE , encoding= "UTF-8" )

anyDuplicated(dataset_train) #количество повторных строк в первом файле - 567
anyDuplicated(dataset_validate) #количество повторных строк во втором файле - 202
# это покачто просто повторные строки в обоих файла по отдельности. Это не вредит, но и ничего не улучшает, лучше их убрать.
dataset_train <- unique(dataset_train)
dataset_validate <- unique(dataset_validate)

#Теперь можно узнать сколько строк из dataset_train повторяются в dataset_validate
dataset_combined <- rbind(dataset_train, dataset_validate) #Объединяем оба файла в один
nrow(dataset_combined) - nrow(dataset_combined[!duplicated(dataset_combined), ]) #количество повторенных строк - 23 . Таких повторов быть не должно, их надо удалить.
#Удаление повторенных строк из dataset_validate
dataset_validate <- dataset_validate[!(tail(duplicated(dataset_combined), nrow(dataset_validate))), ]
#Удаление из памяти объединённого файла, он больше не нужен
rm(dataset_combined)

Bu, çıngırak başlatılmadan önce yapılırsa, hem dataset_train hem de dataset_validate tabloları eğitim ve model doğrulama için kullanılabilir olacak, bunlarda tekrar olmayacak. Zafer R.

Model doğrulama dosyası, eğitim setinden 23 tekrar içeriyordu, ancak buna ek olarak, içinde 3000 benzersiz satır daha var, bu nedenle bu, modelin değerlendirmesini önemli ölçüde etkileyemedi.

 
Bu böyle olmalı. Dosya rastgele sayılarla oluşturulur.

Genel olarak, görevin karmaşıklığını fazla tahmin ettim. Aslında zaten orman tarafından çözülüyor. Ormanın nasıl çalıştığının ışığında bunun nasıl mümkün olduğu merak edilebilir.
Neden: