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

 

Denememin şu anki durumu.

Koddaki, verilerimdeki hataları düzelttikten sonra, aslında doğrulama konusunda aşağıdaki sonuçlara sahibim.

Grafik, döviz çiftlerinden, tahmin ufuklarından ve sözde gri bölgelerden geçer - piyasaya girme konusunda herhangi bir karar verilmediğinde, tahmin makinesinin çıkışındaki değer aralıkları.

Gördüğünüz gibi, birkaç çift için zaten pozitif bir MO'm var. EURUSD için maksimum. Aynı zamanda, tüm çiftler için gerçek spreadleri kullanarak (DC'mden) deneyi daha da doğru hale getiriyorum:

spreads <- as.data.frame(cbind(

c('audusd'

, 'eurusd'

, 'gbpusd'

, 'usdcad'

, 'usdchf')

, c(0.00018

, 0.0001

, 0.00014

, 0.00013

, 0.00012)

)

)

Şimdi, daha da fazla parametrenin sıralandığı gerçekten güçlü bir genelleme deneyi başlattım ve yaklaşık bir hafta sürecek. Yaklaşık 60 kat daha fazla reyting olacak. Ama sonra karşılaştırma için kesinlikle iyi sonuçlar alacağım. Ve bir yerde söz verdiğim gibi, temel mantıkla test etmeye hazır bir Uzman Danışman (eğitimli) göndereceğim. Onu iyileştirebilirsin. Çeşitli geliştiricileri doğrudan MQL koduna ekleyerek kendim değiştireceğim.

İletişime kadar.

 
Alexey Burnakov :

Hayır, durağan olmamanın önemini kesinlikle tam olarak anlamıyorsunuz. Bir sinir ağı veya doğrusal bir model veya benim modelim olması fark etmez, verileriniz durağan değilse, bunlar üzerinde bulunan bağımlılıkların örnek dışında oluşmaması garanti edilir. Formda sahip olduğunuz tüm veriler: ham fiyat, MA (ham fiyat), bar açılış (ham fiyat), vb. modelden çıkarılmalıdır. Farklarını bilinen son fiyattan almanız gerekir.

Burada aralığa ölçekleme mümkün değildir.

O kadar da kötü değil. Her eğitim örneğini ayrı ayrı ele alırsak (yani normalleştirme yaparken eğitim tablosundan bir satırda çalışırsak), her eğitim örneğinde ayrı ayrı tüm verileri gruplara göre normalleştirebiliriz. Örneğin, bir eğitim örneğindeki tüm 100 çubuk (toplamda 400) için o, h, l, c sütunlarını alın, minimum ve maksimumlarını bulun ve ölçeklendirin. Bunu her eğitim örneği için ayrı ayrı tekrarlayın. Bu normalleştirme, eğitim tablosundaki her satırdaki fiyatın her zaman kesinlikle [0..1] aralığında olmasını sağlayacaktır. Şimdi, gelecekte eğitim sırasında fiyatın fiyat sınırlarının çok ötesine geçtiği yeni bir örnek ortaya çıkarsa, normalizasyon onu [0..1] sınırlarına geri getirecek ve bu yeni bir veri olmayacak. nöron tarafından bilinmeyen bölge. Eğitilen model, "son N çubuklarının fiyatı en az bir kez 0,8'in üzerindeydi" gibi bazı kuralları kolayca bulabilir ve tanıyabilir ve bu kural, fiyat iki kez düşse bile herhangi bir yeni veri için geçerli olacaktır.

Alışıldığı gibi her sütun için ayrı ayrı normalleştirme yaparsanız, ön testteki modelin sonuçları daha kötü olacaktır. Aynı eğitim örneğinde aynı türdeki tahminciler arasındaki kayıp bağımlılıklar. (örneğin, aynı eğitim örneğindeki Open[1], Open[2], Open[3],.. tüm eğitim örneklerine göre farklı aralıklarla ölçeklendirilecektir). Artı, hala bir problem var ki, eğitim sırasında binlerce eğitim örneğine dayanarak normalleştirme yapacağız ve gerçek ticarette bir şekilde klonlar tarafından kendi kendine ölçeklenmesi gereken tek bir satır olacak ki bu anlaşılmaz ve garip.

Normalleştirme yapmazsanız, her şeyden vazgeçilebilir. Ancak fiyat, eğitim sırasında mevcut olan aralığın ötesine düşerse/yükselirse, bu, model tarafından tamamen bilinmeyen yeni bir veri bölgesi olacaktır. Çıkarıp birleştirmeyecek.

Bunların hepsi, deneyimden yola çıkarak kesinlikle nöron için geçerlidir.

 

Y ölçekli pca ile biraz daha çalıştı. Dağılım formülleri olan iyi bir makale buldum http://www.chemometrics.ru/materials/textbooks/pca.htm , R'de yaptım.

Aynı makaledeki ana kod http://www.r-bloggers.com/principal-components-regression-pt-2-y-aware-methods/
" princ <- prcomp(dmTrain, center = FALSE, scale. = FALSE)" kodunu çalıştırmanız ve durdurmanız gerekir. daha uzak:

extractProjection <- function(ndim,princ) {
   return (princ$rotation[, 1 :ndim]) #Эта функция уже была определена ранее, но в этот раз нельзя менять знаки в матрицах как раньше
}
countOfComponentsToUse <- ncol(princ$x) # сюда можно в цикле подставлять числа от 2 до ncol(princ$x), увеличивая число компонент до необходимой точности
PCnameList <- colnames(princ$x)[ 1 :countOfComponentsToUse]
proj <- extractProjection(countOfComponentsToUse, princ)
residualsMatrix <- dmTrain - ((princ$x[, 1 :countOfComponentsToUse]) %*% (t(proj)))
V0 <- sum(residualsMatrix*residualsMatrix)/nrow(dmTrain)
TRV <- V0/ncol(dmTrain)                           #полная дисперсия остатков (средний квадрат ошибок)
ERV <- 1 -nrow(dmTrain)*V0/sum(dmTrain*dmTrain)    #объяснённая дисперсия остатков, нужно увеличивать число компонент если ERV < 0.95

İşin özü şuna benzer: princ nesnesi bir hesap matrisi (princ$x) ve bir yük matrisi (princ$rotation) içerir. Bu iki matrisi princ$x %*% t(princ$rotation) ile çarparsak, orijinal tabloyu dmTrain verileriyle geri alırız (Y ölçekleme ile, hedef değişken yok).

Ana bileşenlerin sayısını sınırlayabilirsiniz, ardından ilk veriler belirli bir hatayla belirlenir. İnternetin yavaşlığını ve yüklendiğinde daha keskin görünen ve keskinleşen özel jpeg resimlerini hatırlayan varsa, o zaman benzer bir şey vardır, ne kadar çok temel bileşen alırsak, orijinal verileri o kadar doğru elde ederiz.

N bileşenlerinin sayısı için, ilk veriler şu şekilde tanımlanır: princ$x[,1:N] %*% t(princ$rotation[,1:N]). Elde edilen matris dmTrain'den çıkarılarak hata hesaplanabilir, artıklarMatris matrisini elde ederiz. Bunlar, gerçek verilerin bulunanlardan ne kadar farklı olduğu hatalardır. TRV, karesel hataların ortalamasıdır. ERV, ortalama bir hata gibi bir şeydir. ERV=0.8 ile, orijinal veriler tablonun her hücresinde bulunanlardan ~%20 farklı olacaktır. Yani, 10 sayısı bulunursa, ilk verilerde büyük olasılıkla 8'den 12'ye kadardı. Bu çok kaba bir tanımdır, ancak anlam bu şekilde daha açıktır. PCA modelinin yeterli bileşen içerdiğini düşünmek için en az 0,95 olması gereken ERV'dir.

Ne veriyor? Şimdi princ <- prcomp(dmTrain, center = FALSE, scale. = FALSE, tol=0.01) öğesine yeni bir tol parametresi ekleyebilirsiniz, böylece binlerce ana bileşen oluşturmazsınız ve üretim, yeni bileşen < sdev(PC1) * tol . Bundan sonra, kullanılan bileşenlerin sayısı, 2 ile başlayan ve kademeli olarak 1 ile artan yukarıdaki fonksiyon tarafından seçilebilir.

Aklıma hiçbir şey gelmeyinceye kadar tahmin edicileri filtrelemek için nasıl kullanılabileceğini anlamaya çalıştım. Örneğin, princ$rotation'da, bir tahmin için yükü 0 ile değiştirebilir, ERV'yi yeniden hesaplayabilir ve sonucun nasıl kötüleştiğini görebilirsiniz. Doğru, bu eylemdeki noktayı görmüyorum, bu sonucun nasıl uygulanacağı açık değil. Belki bu şekilde, herhangi bir yeni bilgi taşımayan korelasyonlu tahmin ediciler bulabilirsiniz ve bu nedenle onları bırakmak, sonucu daha da kötüleştirmeyebilir. Gürültü kestiricileri bulmak isterdim, ancak bu matrislerde hedef değişkenlerle hiçbir bağlantı yok, yani genellikle neyin gürültü olup neyin olmadığına dair bir kriter yok.

 
Dr.Tüccar :

Y ölçekli pca ile biraz daha çalıştı. Dağılım formülleri olan iyi bir makale buldum http://www.chemometrics.ru/materials/textbooks/pca.htm , R'de yaptım.

Aynı makaledeki ana kod http://www.r-bloggers.com/principal-components-regression-pt-2-y-aware-methods/

Makaleyi tekrar ziyaret etti. Görünüşe göre makaledeki örneği aptalca noktadan noktaya tekrarlamaya çalışmıyorsunuz, onu kendi verilerinizle değiştiriyorsunuz. Yoksa bir şey mi kaçırdım? Kaçırılmadıysa, neden?
 

Örneği tekrarladım. Verilerimle değiştirildi, 0.95'lik bir varyans için 100'den fazla ana bileşen elde edildi. Yükleme çizelgelerine baktım, açıkça göze çarpan iyi bir tahminci göremedim. Yani, verileriyle ilgili makalenin yazarı grafiklerde 2 ana bileşen ve 5 öngörücü bırakabileceğinizi görürken - verilerimde 100+ bileşen ve 1000+ öngörücü görüyorum (yüklemeler yavaş yavaş azalır, ne olduğu bile belli değil) filtrelenecek yüklerin eşik değeri) .

y-aware pca'ya kredi vermek zorunda olsam da, verilerimi ön tarama yapmadan taktım, üzerine Y-aware PCA modeli kurdum ve ön testte %45 hata aldım. Forex henüz karlı değil, ancak makale burada bitiyor, bu yüzden y-aware pca kullanırsam, o zaman başka bir şey bulmam gerekiyor.

Diğer şekillerde, sadece bir düzine tahminci tutabilir, nnet eğitebilir ve ön testte sadece %30 hata alabilirim. y-aware pca ile benzer bir sonuç almak istiyorum.
 
Dr.Tüccar :

Örneği tekrarladım. Kendi verilerimle değiştirildi, 0.95'lik bir varyans için 100'den fazla temel bileşen elde edildi. Yükleme çizelgelerine baktım, açıkça göze çarpan iyi bir tahminci göremedim. Yani, verileriyle ilgili makalenin yazarı grafiklerde 2 ana bileşen ve 5 öngörücü bırakabileceğinizi görürken - verilerimde 100+ bileşen ve 1000+ öngörücü görüyorum (yüklemeler yavaş yavaş azalır, ne olduğu bile belli değil) filtrelenecek yüklerin eşik değeri) .

Y-aware pca'ya kredi vermem gerekse de, verilerimi önceden tarama yapmadan taktım, üzerine bir Y-aware PCA modeli kurdum ve ön testte %45 hata aldım. Forex henüz karlı değil, ancak makale burada bitiyor, bu yüzden y-aware pca kullanırsam, o zaman başka bir şey bulmam gerekiyor.

Diğer şekillerde, sadece bir düzine tahminci tutabilir, nnet eğitebilir ve ön testte sadece %30 hata alabilirim. y-aware pca ile benzer bir sonuç almak istiyorum.
Harf harfine tekrar edilmesi gerektiğini düşünüyorum. Orada sizden görmediğim pc dışında bir paket kullanılıyor.
 

https://c.mql5.com/3/97/Principal_Components_Regression_1.zip

İşte makaledeki R kodu, _03.txt ve _04.txt dosyaları, tüm bunları zaten verilerimde yaptım. _04.txt dosyasında ön test verileri için bir kontrol bile ekledim. Gördüğüm tek fark, makalenin sonunda önerilen etal paketi. Ancak orada örnekler bile yok, sadece sonucu denemeyi ve vtreat Prune'un yaptığıyla karşılaştırmayı teklif ediyorlar.

 
Dr.Tüccar :

https://c.mql5.com/3/97/Principal_Components_Regression_1.zip

İşte makaledeki R kodu, _03.txt ve _04.txt dosyaları, tüm bunları zaten verilerimde yaptım. _04.txt dosyasında ön test verileri için bir kontrol bile ekledim. Gördüğüm tek fark, makalenin sonunda önerilen etal paketi. Ancak orada örnekler bile yok, sadece sonucu denemeyi ve vtreat Prune'un yaptığıyla karşılaştırmayı teklif ediyorlar.

Oldukça sağlam görünüyor.

Ve ne, faydalı bir sonuç yok mu?

 

Özellik seçimi ile ilgili makalem.

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

Методические заметки об отборе информативных признаков (feature selection)
Методические заметки об отборе информативных признаков (feature selection)
  • habrahabr.ru
Всем привет! Меня зовут Алексей. Я Data Scientist в компании Align Technology. В этом материале я расскажу вам о подходах к feature selection, которые мы практикуем в ходе экспериментов по анализу данных. В нашей компании статистики и инженеры machine learning анализируют большие объемы клинической информации, связанные с лечением пациентов...
 

Merhaba!

Bir fikrim var, kontrol etmek istiyorum, ancak uygulama için bir araç bilmiyorum ... Verilerime göre 3 veya 5 diyelim (istenen), birkaç nokta ileriyi tahmin edebilecek bir algoritmaya ihtiyacım var. bir sinir ağı olsun)

Ondan önce sadece sınıflandırma ile çalışıyordum, çünkü nasıl görünmesi gerektiğini bile anlamıyorum, birisine nasıl yapıldığını anlatın veya R'de bir paket önerin.

ps Harika bir makale Alex