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

 
Dr. tüccar :

Burada zaten nöron örnekleri yayınladım, uygun bir şey arayacağım ve verileriniz için (ve komite ile) yeniden yapacağım. Giriş dersleri yazmayacağım, ancak koda daha fazla yorum ekleyeceğim.


Üzgünüm, döngüdeki c(F,T) değişkeninin anlamını anlamıyorum

 for (i in c( 1 :nrow(table))[c(F,T)]){
   ..... table[i,] ..... 
}

Yani bu döngü tablonun çift sıralarından geçer ama o zaman tek sıralardan nasıl yapılır ???

 

F ve T, YANLIŞ ve DOĞRU boole değerlerinin kısaltmalarıdır, prensipte c(T,F) veya c(TRUE,FALSE) yazmanız farketmez, ilk seçenek sadece daha kısadır.

Tabloda 10 satır varsa, o zaman c(1:nrow(table)) sadece c(1,2,3,4,5,6,7,8,9,10) vektörüdür.
Ve bu durumda boole değerlerine sahip diziler istenen uzunlukta döngü yapacak, c(TRUE,FALSE,TRUE,FALSE,TRUE,FALSE,TRUE,FALSE,TRUE,FALSE) elde edeceksiniz.

onlar. c(1:nrow(table))[c(F,T)] R nasıl olduğunu anlayacaktır
c(1,2,3,4,5,6,7,8,9,10)[c(DOĞRU,YANLIŞ,DOĞRU,YANLIŞ,DOĞRU,YANLIŞ,DOĞRU,YANLIŞ,DOĞRU,YANLIŞ)]
ve vektörün TRUE ile eşleşen öğelerini sırayla alın.

Örneğin, her üçüncü öğeyi almak istiyorsanız, bu şu şekilde yazılabilir:
c(1,2,3,4,5,6,7,8,9,10)[c(YANLIŞ,YANLIŞ,DOĞRU,YANLIŞ,YANLIŞ,DOĞRU,YANLIŞ,YANLIŞ,DOĞRU,YANLIŞ)]
veya kısaca
c(1:10)[c(F,F,T)]


tek öğeler için, T ve F'yi değiştirmeniz yeterlidir: c(1:nrow(table))[c( T,F )]

 
Dr. tüccar :

F ve T, YANLIŞ ve DOĞRU boole değerlerinin kısaltmalarıdır, prensipte c(T,F) veya c(TRUE,FALSE) yazmanız farketmez, ilk seçenek sadece daha kısadır.

Tabloda 10 satır varsa, o zaman c(1:nrow(table)) sadece c(1,2,3,4,5,6,7,8,9,10) vektörüdür.
Ve bu durumda boole değerlerine sahip diziler istenen uzunlukta döngü yapacak, c(TRUE,FALSE,TRUE,FALSE,TRUE,FALSE,TRUE,FALSE,TRUE,FALSE) elde edeceksiniz.

onlar. c(1:nrow(table))[c(F,T)] R nasıl olduğunu anlayacaktır
c(1,2,3,4,5,6,7,8,9,10)[c(DOĞRU,YANLIŞ,DOĞRU,YANLIŞ,DOĞRU,YANLIŞ,DOĞRU,YANLIŞ,DOĞRU,YANLIŞ)]
ve vektörün TRUE ile eşleşen öğelerini sırayla alın.

Örneğin, her üçüncü öğeyi almak istiyorsanız, bu şu şekilde yazılabilir:
c(1,2,3,4,5,6,7,8,9,10)[c(YANLIŞ,YANLIŞ,DOĞRU,YANLIŞ,YANLIŞ,DOĞRU,YANLIŞ,YANLIŞ,DOĞRU,YANLIŞ)]
veya kısaca
c(1:10)[c(F,F,T)]


tek öğeler için, T ve F'yi değiştirmeniz yeterlidir: c(1:nrow(table))[c( T,F )]

Bu kadar ayrıntılı açıklamaları yazmayı kesmediğiniz için teşekkür ederiz. Aslında çok şey netleşiyor. Sormaya bile utanıyorum ama kararımı vereceğim. Sorunun anlamı şudur...

Eğitim dosyası aynı sayıda hedef sınıftan oluşur. Başka bir deyişle, hedefte 24 birlik ve 24 sıfır var. Tekrar ediyorum, Reshetov gibi yapmak istiyorum .....

Eğitim tablosunu, birinde hedefin 1 olduğu, diğerinde hedefin 0 olduğu tüm vektörlerin olduğu iki tabloya böldüm.

Hedef 1 ile bir tablo alıyorum ve burada, Train1'de stokların bile yazılması ve Train2'de stokların bile yazılmaması gereken iki alt tablo oluşturmamız gerekiyor.

İlk önce eşit için yapıyoruz

 for (i in c( 1 :nrow(Qwe_true))[c(F,T)]){
  Train1[i,]<-Qwe_true[i,]
  }

Ama sonra Train1 tablosu NA'lı satırlar içerecek ve Train1'in 12 satır boyutunda olması gerekiyor, çünkü 24 satırdan sadece 12'si çift. Bunu nasıl yapacağım konusunda kafamı kırdım ....

 

Rica ederim.

R için farklı bir düşünme biçimine ihtiyacınız var, vektörlerle zihinsel olarak çalışmanız gerekiyor, o zaman kod yazmak oldukça basit. Profesyoneller, anlamadığım bir satırda böyle şeyler yazarlar ve ben de birkaç satırda döngüler halinde yazarım.

Train1 <- rbind(Qwe[hangi(Qwe[,"target"]==1)[c(T,F)], ], Qwe[hangi(Qwe[,"target"]==0)[c(T ,F)], ])
Train2 <- rbind(Qwe[hangi(Qwe[,"target"]==1)[c(F,T)], ], Qwe[hangi(Qwe[,"target"]==0)[c(F ,T)], ])

adım adım -
that(Qwe[,"target"]==1) - hedef 1 ile satır numaraları
that(Qwe[,"target"]==1)[c(T,F)] - hedef1 ile satır numaraları 1 atlanır
Qwe[what(Qwe[,"target"]==1)[c(T,F)], ] - Qwe'den türetilen plaka, hedef 1, 1'den atlandı
rbind(... , ...) - iki etiketin birleşimi (hedef 1 ve hedef 0 ile)

 
Dr. tüccar :

Rica ederim.

R için farklı bir düşünme biçimine ihtiyacınız var, vektörlerle zihinsel olarak çalışmanız gerekiyor, o zaman kod yazmak oldukça basit. Profesyoneller, anlamadığım bir satırda böyle şeyler yazarlar ve ben de birkaç satırda döngüler halinde yazarım.

Train1 <- rbind(Qwe[hangi(Qwe[,"target"]==1)[c(T,F)], ], Qwe[hangi(Qwe[,"target"]==0)[c(T ,F)], ])
Train2 <- rbind(Qwe[hangi(Qwe[,"target"]==1)[c(F,T)], ], Qwe[hangi(Qwe[,"target"]==0)[c(F ,T)], ])

Sen sadece bir canavarsın. İki sıra, omuzlu bir dağ. Tamam, anlamaya devam ediyorum ... Teşekkürler!!!

 
Cuma akşamı... kafa artık kaynamıyor. Teoriyi birlikte test etmeye ne dersiniz... Sizin R ile yazabilme yeteneğimle ve benim sorunu (doğruluk) belirleme yeteneğimle, her şeyi yarım saat içinde kontrol etmiş olurduk? Zamanı olmak? Dr.Tüccar
 
Hayır, çalışmaya devam et. Sorular olursa yardımcı olurum.
 

Bu iki örneğe iki tane daha eklenmelidir.

MLP1=Tren1+Test(Tren2)

MPL2=Tren2+Test(Tren1)

Test(Tren2)+Test(Tren1) eklersek, tüm eğitim bölümünde sonucu alacağız ve bu bölüm her bir polinom için bir test olacaktır.

Şimdi mümkün değilse, zamanı seçebilir misiniz? Ama yarım saat ve emin oldu. Sadece bir ayna yapmak istiyorum. Aynı dosyayı alıp iki şekilde öğreteceğim. Sonra hepsini Kontrol alanına atacağız ve her şey görünür hale gelecektir. Sen ne diyorsun?

 

tabloları rbind() işleviyle birleştirebilirsiniz
MLP1 <- rbind(Eğitim1, Test)

Test(Tren2) nedir? Ve neden eğitim ve test tablolarını birleştirelim? Üzerinde önceden hazırlanmış eğitimli modeli kontrol etmek için test ayrı olmalıdır.

Her şey istediğiniz kadar kolay ve hızlı olmayacak. Basitçe Reshetov modeline veri alıp gönderebilirsiniz ve modelin kendisi tahmin edicileri taramak, ağırlıkları belirlemek, nöron sayısını ve diğer şeyleri belirlemekle meşgul olacaktır. Ancak sıradan bir nöronla bu mümkün değildir, örneğin bugün burada yazdığım örnekte veya Vladimir Perervenko'nun makalelerinde olduğu gibi nöronun parametreleri çapraz doğrulama ile seçilmelidir.


Orada yazdıklarıma tekrar bakın - https://www.mql5.com/ru/forum/86386/page753#comment_6821981
sadece verilerinizi bu koddaki açıklamaya göre değiştirin ve çalıştırın. Tahminciler arka arkaya alınır ve ortadan kaldırılmazsa, ilk seferde muhtemelen her şey kötü sonuçlanacaktır. Kodu çalıştırdıktan sonra, ayrıca max(gaResult@fitness) komutunu da çalıştırın, bu R2'ye genetik tarafından bulunan en iyi modelin puanını gösterecektir. Skor 1'e yakın veya biraz daha az ise iyi, 0'a yakın veya hatta negatif ise kötüdür.

Ardından, PREDICTOR_COLUMNS içinde, iyi olarak tanımladığınız belirli sütun numaralarını belirtin ve kodu yeniden çalıştırın, model yalnızca bu öngörücüler üzerinde öğrenecektir. İdeal olarak, bulunan genetik tarafından en iyi modelin puanı 1'e yakın olmalı ve eğitim ve test plakasındaki doğruluk 1.00 olmalıdır.

Test tablosu - bu model zaten piyasada işlem görüyormuş gibi, eğitim verilerinden sonra kesinlikle zamanında olmalıdır.

Bu kodla iyi bir şey olmazsa ( KFOLDS=10 ile bile) - o zaman bu kader değildir. İşe yararsa, Reshetov modeline iyi bir alternatif var ve bu kodla daha fazla ilgilenip modeli mql'ye aktarabilirsiniz.

 

Genel olarak demek istediğim, Reshetov'un modelindeki gibi bir şey yaparsanız, bir şeyler eklerseniz, sonra sıradan bir nöron alıp bir şekilde önceki adımlar ile karıştırırsanız ve her şeyin Reshetov'unki gibi çalışmasını beklerseniz, umutsuzluğa kapılacaksınız. abone olmadığım uzun süreç.

Reshetov ile aynı sonucu, ancak R'de istiyorsanız, modelin tüm Java kodunu R'de almanız ve yeniden yazmanız gerekir.

Ama birçok alternatif var. Onlarla Reshetov'dan daha iyi çıkarsa, genellikle mükemmeldir, başka bir şeye gerek yoktur, her şey hazırdır.

Neden: