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

 
Dr.Tüccar :

Bana öyle geliyor ki bu paket, hedef değişkeni tahmin edebilecek bir model oluşturmak için yeterli değil. Yardımda tek bulduğum, tahmin edicilere dayalı bir PCA modeli oluşturmak, orada hiç hedef değişken yok.


Merhaba! Yanlış işlevi kullanmışsın, verdiğim sitede belirtildiği gibi " nlPca " kullanmalıydın yoksa benim hatam, daha detaylı bilgi vermen gerekiyor...

Burada tahmin etmek yerine, deneyin, başarabilirsiniz

source( "https://bioconductor.org/biocLite.R" )
biocLite( "pcaMethods" )        

#создание pca объекта
library (pcaMethods)

## Data set with three variables where data points constitute a helix
data(helix)
helixNA <- helix
## not a single complete observation
helixNA <- t(apply(helix, 1 , function(x) { x[sample( 1 : 3 , 1 )] <- NA; x}))
## 50 steps is not enough, for good estimation use 1000
helixNlPca <- pca(helixNA, nPcs= 1 , method= "nlpca" , maxSteps= 50 )
fittedData <- fitted(helixNlPca, helixNA)
plot(fittedData[which(is.na(helixNA))], helix[which(is.na(helixNA))])
		
 
Dr.Tüccar :

Bana öyle geliyor ki bu paket, hedef değişkeni tahmin edebilecek bir model oluşturmak için yeterli değil. Yardımda tek bulduğum, tahmin edicilere dayalı bir PCA modeli oluşturmak, orada hiç hedef değişken yok.

Bu, metaboliteDataComplete tablosunu ayrıştırmak için 5 ana bileşene sahip bir resNipals (Yinelemeli Kısmi En Küçük Karelerle Doğrusal Olmayan Tahmin) nesnesi oluşturacaktır. metaboliteDataComplete yerine kendi tablonuzu tahmin edicilerle değiştirebilirsiniz. Hedef değişkeni burada vermemek önemlidir, daha sonra kullanılacaktır.

Ancak bu sadece farklı çizelgeleri inceleyerek değişkenler arasındaki ilişkileri analiz etmek için yeterlidir. Tahmine dayalı bir model oluşturmak için daha sonra PC1, PC2,PC3,PC4,PC5 ana bileşenlerini giriş değişkenleri (x1,x2,x3,...) olarak kullanan bir doğrusal regresyon modeli oluşturulur. Ve hedef değişken Y, gerekli sonuç olarak doğrusal modele zaten beslenir. Sorun şu ki, resNipals, pcaMethods paketindeki bir tür "pcaRes" sınıfı nesnesidir. Bütün bunları onunla nasıl yapacağımı, yardımda bulamadım.

Caret paketinden bir PCA modeli olsaydı, şöyle olurdu:

Ancak bu resNipals ile çalışmaz, teorik olarak, pcaMethods paketinin bu nesneyle çalışmak için bazı işlevleri olmalıdır, ancak hiçbir şey bulamadım.

Başlangıçta, RSA iki sorunu çözmeyi amaçladı:

1. Az sayıda gözleme sahip çok sayıda tahmin edici vardır. Bu organik kimya, genetik için tipiktir. Makroekonomik verileri büyük zaman dilimlerinde, örneğin yıllık olanlarda kullanırız.

2. Tahmin ediciler arasında korelasyonlar vardır.

Bu nedenle, SAR algoritmaları şu iki ana görevi çözer:

1. Yeni, genellikle çok daha az sayıda tahmin edici ile orijinal tahmin edicilerin sayısını azaltın. Aynı zamanda, algoritma, bu küçük sayının, orijinal öngörücü kümesinin değişkenliğinin belirli bir yüzdesini, örneğin %95'ini açıklayabileceğini garanti eder. Bu değer araştırmacı tarafından seçilir.

2. Yeni yordayıcı seti, aralarında SIFIR korelasyona sahiptir.

Bundan, bizim için PCA'nın modelleme için ilk verilerin ön hazırlığı için algoritmalardan biri olduğu, ancak hedef değişkeni tahmin etmek için modellemenin yerini alamaz.

Bana öyle geliyor ki, RSA'nın çeşitli detaylarının tartışılması arasında, bu konudaki ifadelerimin anlamı kayboldu. Bu nedenle, size hatırlatmama izin verin: PCA'nın böyle bir kullanımına bir bağlantı verdim, burada sadece ilk tahmin edicilerin sayısı azaltılmadı, aynı zamanda hedef değişken için gürültü olan tahmin edicilerin de elimine edildi. Hangisi bu başlıkta tartışılıyor.

Bu nedenle, tahminciler arasındaki gürültü sorununa ve bu sorunu çözmek için çok özel bir SAR kullanma fikrinin olası kullanımına geri dönmeyi öneriyorum.

 
Dr.Tüccar :

Bu, metaboliteDataComplete tablosunu ayrıştırmak için 5 ana bileşene sahip bir resNipals (Yinelemeli Kısmi En Küçük Karelerle Doğrusal Olmayan Tahmin) nesnesi oluşturacaktır. metaboliteDataComplete yerine kendi tablonuzu değiştirebilirsiniz ..........

Denediğiniz Nipals, sitede ikinci resimde gösteriliyor, ayrıca gerçekten ayrılmıyor, sinir ağı PCA'nın üçüncü resmindekini çekmeniz gerekiyor.

=========================

Biraz konu dışı ama kodla ilgili yardıma ihtiyacınız var ....

Sütunlarda öngörücülerim var, tüm tahmin edicilerin tüm bunlarla olan farkını hesaplamak istiyorum, tüm kombinasyonları sıralayın, üzüntünün farkına vardım ki şimdi her kombinasyonu yeterince adlandırmanız gerekiyor, böylece neyin ne olduğunu anlayabilirsiniz.

Diyelim ki "A", "B", "C" tahminlerine sahip sütunlarımız var.

farklılık kombinasyonları yapmak

1) A - B

2) A - C

3) C - B

soru: "a_minus_b", "a_minus_c" gibi yeni alınan sütun adlarını nasıl veririm

Ben sadece "R" ve genel olarak programlama öğreniyorum, bu yüzden bu tür numaralara hiç aşina değilim

bu koda ne eklemem gerekiyor

a <- 1 : 5
b <- 6 : 10
c <- 11 : 15
d <- 16 : 20
dt <- data.frame(a,b,c,d) 
dt

# все комбинации индексов между двумя переменными
# еще транспонирую(переворачиваю матрицу) мне так удобней воспринимать
combi <- t(  combn( 1 :ncol(dt), 2 )  )  
combi  

# пустая фрейм куда буду записывать результат вычислений с комбинацыями
res.dt <- as.data.frame(  matrix(nrow = nrow(dt) , ncol = nrow(combi))   )
res.dt

for (i in 1 :ncol(res.dt)){
   # буду проводить вычитание одной перем из другой во всех комбинацыях
   # и записывать в res.dt
  ii <- combi[i, 1 ]
  jj <- combi[i, 2 ]
  
  res.dt[,i] <- dt[,ii] - dt[,jj]
}
res.dt
 
mytarmailS :

Denediğiniz Nipals, sitede ikinci resimde gösteriliyor, ayrıca gerçekten ayrılmıyor, sinir ağı PCA'nın üçüncü resmindekini çekmeniz gerekiyor.

=========================

Biraz konu dışı ama kodla ilgili yardıma ihtiyacınız var ....

Sütunlarda öngörücülerim var, tüm tahmin edicilerin tüm bunlarla olan farkını hesaplamak istiyorum, tüm kombinasyonları sıralayın, üzüntünün farkına vardım ki şimdi her kombinasyonu yeterince adlandırmanız gerekiyor, böylece neyin ne olduğunu anlayabilirsiniz.

Diyelim ki "A", "B", "C" tahminlerine sahip sütunlarımız var.

farklılık kombinasyonları yapmak

1) A - B

2) A - C

3) C - B

soru: "a_minus_b", "a_minus_c" gibi yeni alınan sütun adlarını nasıl veririm

Ben sadece "R" ve genel olarak programlama öğreniyorum, bu yüzden bu tür numaralara hiç aşina değilim

bu koda ne eklemem gerekiyor

Aşağı yukarı böyle.

colnames() <- c("..", "..")

isimler de var

Yardıma bakın.

 
San Sanych Fomenko :

Başlangıçta, RSA iki sorunu çözmeyi amaçladı:

PCA'nın başlangıçta orijinal serinin boyutsallığını azaltması amaçlandı. Hepsi bu. Tahmin edicilerin seçimi için kullanmak, hayali bir saçmalıktır.
 
San Sanych Fomenko :

Aşağı yukarı böyle.

colnames() <- c("..", "..")

isimler de var

Yardıma bakın.

)) Evet, bu hiç akıllıca değil, ancak 1000 değişken varsa, her birini manuel olarak yazın?
 

Dr.Tüccar :

...

Veriler eurusd d1, sınıf 0 veya 1 - bir sonraki çubuk için düşen veya yükselen fiyattan alınmıştır. Model, test.csv sonucunu 10'dan en az 6'sında doğru tahmin ederse, o zaman zaten Forex'te işlem yapmayı deneyebilirsiniz, prensipte birleşmeyecektir, ancak büyük bir kar da beklememelisiniz. 10'dan 7'sinde (ve daha fazla) zaten doğru tahmin ediyorsa - bu, kâseye giden doğru yoldur, eğitimi denemek ve modeli diğer yıllarda ve aylarda test etmek için kalır ve her yerde aynıysa, o zaman çok mükemmel

...


Daha spesifik olarak rapor dosyasında:

/**
* Numune dışı modelleme kalitesi:
*
* TruePositives: 182
* TrueNegatives: 181
* YanlışPozitifler: 1
* YanlışNegatifler: 1
* İstatistikli numunelerdeki toplam kalıp sayısı: 365
* Numune dışı toplam hata: 2
* Genelleme yeteneğinin duyarlılığı: %99.4535519125683
* Genelleme yeteneğinin özgüllüğü: %99.45054945054946
* Genelleme yeteneği: %98.90410136311776
* Reshetov'un Göstergesi: 8.852456238401455
*/


Bir ekip oluşturmanın ve bir Açık Kaynak projesi oluşturmanın zamanı geldi - bu iş için mql5 ve Java'da otomatikleştirilmiş bir kompleks. Biraz sonra modellerin nasıl eğitileceği ve nasıl kullanılacağına dair talimatlar yazacağım, ayrıca Java'daki bir ikili sınıflandırıcının kaynak kodlarını ve eğitim modelleri için bir örnek oluşturan bir MQL5 betiğine yer vereceğim.

Kompleksin nasıl çalışacağına dair yaklaşık bir plan:

  1. Her finansal için Enstrüman, grafiklerde çubukların açılış fiyatlarında çalışan ve kalıpları dosyalara döken ayrı robotlar var.
  2. Java'daki Pribluda (ikili sınıflandırıcı), araçların her biri için ve 1 saniye aralıklarla modelleri yükler. 1. adımdaki robotlardan dosyaların görünmesini bekler. Enstrümanın ticker'ı ve onun kalıbı dosyadan okunur. Bundan sonra, desenli okuma dosyası diskten silinir. Başıboş örüntüye göre işlem sinyalini enstrümana uygun model ile sınıflandırır ve bir dosyaya yazar.
  3. Bir robot adım adım başıboştaki dosyaları bekler. Böyle bir dosya bulunur bulunmaz, robot ondan gelen sembolü ve sinyali okur ve çifte karşı ticareti açar veya tersine çevirir. sinyale göre alet. Okunan dosya silinir.

Projeye katılmak isteyen ve Java veya MQL5 ile programlamayı bilenler varsa bu başlık altında üyelikten çıkabilirsiniz.

 
mytarmailS :

Merhaba! Yanlış işlevi kullanmışsın, verdiğim sitede belirtildiği gibi " nlPca " kullanmalıydın yoksa benim hatam, daha detaylı bilgi vermen gerekiyor...

Burada tahmine dayalı yerine, deneyin, başarabilirsiniz

Bu örnek maalesef başka bir konudan. Örneğin Forex'te verilerin %100'ünü her zaman çıkarabiliyoruz ve verilerin deneysel olarak elde edildiği diğer alanlarda her zaman boşluklar, eksik değerler olacaktır. Bu örnekte, PCA, tahmin edicilerdeki eksik değerleri yeniden oluşturmak için kullanılır. Örnekte üç sütundan birindeki değer rastgele temizleniyor, bir pca modeli oluşturuluyor ve onun yardımıyla eksik değerler yeniden oluşturuluyor.

Bunu hiç denemedim, ancak teknik olarak hedef değişkeni pca modeline dahil ederek bir öngörücü olarak düşünmek mümkün. Daha sonra, yeni verilerde değeri bilinmeyecek, sırasıyla pca bu eksik değerleri doldurabilir.

source( "https://bioconductor.org/biocLite.R" )
biocLite( "pcaMethods" )        

#создание pca объекта
library (pcaMethods)

## Data set with three variables where data points constitute a helix
#trainData - таблица с обучающими примерами. Целевая переменная тоже должна быть в этойже таблице. Пример колонок: Close , Hour ,MA30,target. (target - целевая переменная, со значениями например 0 или 1 обозначающими падение/рост цены)
## 50 steps is not enough, for good estimation use 1000
NlPca <- pca(trainData, nPcs= 1 , method= "nlpca" , maxSteps= 50 )
#newData - таблица с новыми данными, для проверки модели. Колонки должны быть теже Close , Hour ,MA30,target
newData[, "target" ] <- NA   #целевая переменная на новых данных не должны быть известна модели, и в случае NA - функция fitted должна подставить туда подходящие значения
fittedNewData <- fitted(NlPca, newData)
fittedNewData[, "target" ] # ваш результат предсказания
Я не могу начать новую нормальную строку :/ В общем можно сделать как я написал выше, но это не предсказание а реконструкция. PCA модель может просто найти некие значения которые "подойдут". Гарантий никаких нет, я предполагаю что ошибка будет 50%
 
birleştirici :
PCA'nın başlangıçta orijinal serinin boyutsallığını azaltması amaçlandı. Hepsi bu. Tahmin edicilerin seçimi için kullanmak, hayali bir saçmalıktır.

Hayır, her şey yolunda. Ana bileşenlerin her biri için kullanılan tahmin ediciler bilindiğinden, ana bileşenlerde kullanılmayan tahmin edicileri güvenle filtreleyebiliriz. Okuyun, beğendim: http://www.win-vector.com/blog/2016/05/pcr_part2_yaware/ Orada, veriler 5 iyi tahmin edici ve düzinelerce gürültülü tahmin içeriyor. Gürültü analiz ile filtrelenir. Bu başlıkta rastladığım diğer örnekler için de aynı kodu kullandım, genel olarak işe yarıyor. Ama daha zor olan forex, göstergelerde bu kadar güzel resimler alamadım, daha akıllı bir şey bulmam gerekiyor.

 
Dr.Tüccar :

Bu örnek maalesef başka bir konudan. Örneğin Forex'te verilerin %100'ünü her zaman çıkarabiliyoruz ve verilerin deneysel olarak elde edildiği diğer alanlarda her zaman boşluklar, eksik değerler olacaktır. Bu örnekte, PCA, tahmin edicilerdeki eksik değerleri yeniden oluşturmak için kullanılır. Örnekte üç sütundan birindeki değer rastgele temizleniyor, bir pca modeli oluşturuluyor ve onun yardımıyla eksik değerler yeniden oluşturuluyor.

Bunu hiç denemedim, ancak teknik olarak hedef değişkeni pca modeline dahil ederek bir öngörücü olarak düşünmek mümkün. Daha sonra, yeni verilerde değeri bilinmeyecek, sırasıyla pca bu eksik değerleri doldurabilir.

Kahretsin, bu "NA"-shki'nin tarihe atılmasının tesadüf olmadığından şüphelendim, ancak kılavuzu okudum, açıkça bir sinir ağı olan PCA diyor, ancak bu kişinin siteden nasıl olduğu hala net değil bu güzel resmi sınıflara iyi bir şekilde ayırarak aldım
Neden: