Ticarette makine öğrenimi: teori, pratik, ticaret ve daha fazlası - sayfa 136
Alım-satım fırsatlarını kaçırıyorsunuz:
- Ücretsiz alım-satım uygulamaları
- İşlem kopyalama için 8.000'den fazla sinyal
- Finansal piyasaları keşfetmek için ekonomik haberler
Kayıt
Giriş yap
Gizlilik ve Veri Koruma Politikasını ve MQL5.com Kullanım Şartlarını kabul edersiniz
Hesabınız yoksa, lütfen kaydolun
Ve R ^ 2'yi tam olarak nasıl değerlendiriyorsunuz, hangi işlev?
Farklı modelleri çıngırak yoluyla eğitmeye çalıştım, "sözde r^2"yi korelasyon, yani cor(fitpoints[,1], fitpoints[,2])^2 olarak kabul etti, ancak r^2'yi aynı yöntemle hesaplamak istiyorum karşılaştırma için senin gibi.
Bu kod [1 - sum((yx)^2)/sum((y-mean(y))^2)] çalışır mı?
Ve R ^ 2'yi tam olarak nasıl değerlendiriyorsunuz, hangi işlev?
Farklı modelleri çıngırak yoluyla eğitmeye çalıştım, "sözde r^2"yi korelasyon, yani cor(fitpoints[,1], fitpoints[,2])^2 olarak kabul etti, ancak r^2'yi aynı yöntemle hesaplamak istiyorum karşılaştırma için senin gibi.
Bu kod [1 - sum((yx)^2)/sum((y-mean(y))^2)] çalışır mı?
Aynen öyle. X - modeli.
Gizli katmanda ne kadar çok nöron varsa, fonksiyon bir nöron tarafından o kadar karmaşık tanımlanabilir, daha fazla gizli katmana ve nöronlara ihtiyacınız vardır.
Ama o zaman sorun, nöronun hedefi tanımlamak için ardışık toplamalar ve çarpmalar (ve örneğin, aktivasyon fonksiyonu için sigmoidler) kullanması olacaktır, yani, bu açıkça sizin orijinal fonksiyonunuz değil, bir tür yaklaşıklık olacaktır. Ve bu yaklaşımın eğitim verilerindeki bazı özellikleri hatırlayacağı ve bu nedenle yeni veriler üzerinde doğru şekilde çalışmadığı ortaya çıkabilir. Bu nedenle, bazen eğitimi durdurmanız, test setindeki hatanın azalıp azalmadığına bakmanız ve her şey yolundaysa eğitime devam etmeniz gerekir. Bir noktada, test verilerindeki hata büyümeye başlayacak, ardından eğitimin tamamen durdurulması gerekiyor.
Ayrıca nöronun çıkışı, aktivasyon fonksiyonu ile sınırlıdır. Popüler olanlar için sigmoid (0; 1), relu [0; inf). Hedef değerlerin farklı bir aralığa ölçeklenmesi gerekir, (-7; 7) aralığındaki çıktılarınız birçok paket için basitçe elde edilemez.
Bir kez daha çıngırak aldım, nnet öğrettim, günlükten bitmiş kodu aldım. Rattle nnet ile düzgün çalışmıyor, zamanla öğrenmeyi durdurmak için biraz daha kod ekledim.
Yeni verilerde en iyi R^2 = 0.18. En iyi ağ yapılandırması, tek bir iç katmanda bir nöronla oldukça komik çıktı. Ayrıca iç katmanda iki nörona sahip olabilirsiniz, sonuç yaklaşık olarak aynı olacaktır. Sayılarını artırmaya devam ederseniz, programa göre ağ çok hızlı bir şekilde yeniden eğitilir ve yeni veriler üzerinde daha kötü çalışır.
Sağdaki grafikte, mavi çizgi model için 20001 satırından yeni verilerdir. Gerisi eğitim ve çapraz doğrulamadır.
Evrişimsel ağ önde görünüyor.
Bir kez daha çıngırak aldım, nnet öğrettim, günlükten bitmiş kodu aldım. Rattle nnet ile düzgün çalışmıyor, zamanla öğrenmeyi durdurmak için biraz daha kod ekledim.
Yeni verilerde en iyi R^2 = 0.18. En iyi ağ konfigürasyonu, tek bir iç katmanda bir nöronla oldukça komik çıktı. Ayrıca iç katmanda iki nörona sahip olabilirsiniz, sonuç yaklaşık olarak aynı olacaktır. Sayılarını artırmaya devam ederseniz, programa göre ağ çok hızlı bir şekilde yeniden eğitilir ve yeni veriler üzerinde daha kötü çalışır.
Sağdaki grafikte, mavi çizgi model için 20001 satırından yeni verilerdir. Gerisi eğitim ve çapraz doğrulamadır.
Evrişimsel ağ önde görünüyor.
sadece bir gözlem, konu dışı ama .... evrişimsel ağ ile ilgili yardım istediğimde ve mxnet paketine dikkat ettiğimde, herkes sessiz kaldı, diyorlar. kendin için takıl dostum ve şimdi herkes 50 sayfa önce bahsettiğim şeyi yapmakla ilgilenmeye başladı, bu neden oluyor? :) İlginçtir, belki 100 sayfa sonra birileri fark eder, benim de uzun zaman önce dikkat ettiğim quantstrat paketi ....
Diyeceksiniz ki - ha, peki, bunu kendin al ve çok akıllı olduğunda yap, gerçek şu ki bu çok akıllıca değil ve ben pek bir şey anlamıyorum ve İngilizce ile her şey çok kötü ve I için açıklamalar içeren dört satır kod, kendi başıma çözmeye çalışmak için harcadığım haftalara eşit olabilir ve o zaman bile her zaman işe yaramaz ...
sadece bir gözlem, konu dışı ama .... evrişimli ağ ile başa çıkmak için yardım istediğimde ve mxnet paketine dikkat ettiğimde, herkes sessiz kaldı, diyorlar. kendin için takıl dostum ve şimdi herkes 50 sayfa önce bahsettiğim şeyi yapmakla ilgilenmeye başladı, bu neden oluyor? :) İlginçtir, belki 100 sayfa sonra birileri fark eder, benim de uzun zaman önce dikkat ettiğim quantstrat paketi ....
Diyeceksiniz ki - ha, peki, bunu kendin al ve çok akıllı olduğunda yap, gerçek şu ki bu çok akıllıca değil ve ben pek bir şey anlamıyorum ve İngilizce ile her şey çok kötü ve I için açıklamalar içeren dört satır kod, kendi başıma çözmeye çalışmak için harcadığım haftalara eşit olabilir ve o zaman bile her zaman işe yaramaz ...
Sadece harika bir yorum, meslektaşım! ) ha
Vizyonuma göre madde madde cevaplayayım:
1) Burada insanların %90'ı kendi çıkarları, düşünme aşaması ve deney aşaması tarafından yönlendirilir. Bu nedenle, bazı iyi fikirler rafa kaldırıldı. İlginç örnekler ve problemler vermediğiniz için kimse ilgilenmedi. Basit, değil mi?
2) Bilgi edinmek için iki strateji vardır: kendinizi kazın ve acı içinde bir şeyler yapmaya çalışın (hepimiz bunu değişen derecelerde yapıyoruz. Örneğin, "Para kazanmayı öğrenin Köylüler!" Konusunda birkaç yıl harcayan adamı hatırlıyorum. Mevcut danışmanların performansını test eden hayatının bir kısmı Ve hepsi sızdırıldı.) Başka bir seçenek de, birinin yardım edip bitmiş olanı ortaya koyması umuduyla beklemek. Bu nedenle, koşullarınızdan dolayı ikinci stratejiyi seçtiyseniz, bitmiş olanı bekleme süresi çok uzayabilir.
Mxnet'e gelince, zaten başlattığım için, bu arada, internette neredeyse tamamen aynı olan kodu gönderdiğim için üzgün değilim:
install.packages ( "mxnet" )
train.x = data.matrix(dat_ready_scale[1:(nrow(dat_ready_scale) / 2), 1:100])
train.y = dat_ready_scale[1:(nrow(dat_ready_scale) / 2), 101]
test.x = data.matrix(dat_ready_scale[!rownames(dat_ready_scale) %in% rownames(train.x), 1:100])
test.y = dat_ready_scale[!rownames(dat_ready_scale) %in% rownames(train.x), 101]
########
train.x <- t(train.x)
test.x <- t(test.x)
dim(train.x) <- c(100, 1, 1, ncol(train.x))
dim(test.x) <- c(100, 1, 1, ncol(test.x))
#########
############ BUILD NET
library(mxnet)
# first conv layer
data <- mx.symbol.Variable('data')
conv1 <- mx.symbol.Convolution(data = data,
kernel=c(14, 1),
stride=c(1, 1),
num.filter = 1)
tanh1 <- mx.symbol.Activation(data = conv1,
act.type = 'relu')
pool1 <- mx.symbol.Pooling(data = tanh1,
pool_type = "avg",
kernel=c(5, 1),
stride=c(1, 1))
# second conv layer
conv2 <- mx.symbol.Convolution(data = conv1,
kernel=c(12, 1),
stride=c(1, 1),
num.filter = 1)
tanh2 <- mx.symbol.Activation(data = conv2,
act.type = 'relu')
pool2 <- mx.symbol.Pooling(data = tanh2,
pool_type = "avg",
kernel=c(5, 1),
stride=c(1, 1))
# third conv layer
conv3 <- mx.symbol.Convolution(data = conv2,
kernel=c(10, 1),
stride=c(1, 1),
num.filter = 1)
tanh3 <- mx.symbol.Activation(data = conv3,
act.type = 'relu')
pool3 <- mx.symbol.Pooling(data = tanh3,
pool_type = "avg",
kernel=c(2, 1),
stride=c(1, 1))
# first fully connected layer
flatten <- mx.symbol.Flatten(data = conv3)
fc1 <- mx.symbol.FullyConnected(data = flatten
, num_hidden = 10)
tanh4 <- mx.symbol.Activation(data = fc1, act.type = 'tanh')
# second fully connected layer
fc2 <- mx.symbol.FullyConnected(data = tanh4, num_hidden = 1)
lenet <- mx.symbol.LinearRegressionOutput(data = fc2)
#### train
device <- mx.cpu()
log <- mx.metric.logger$new()
model <- mx.model.FeedForward.create(lenet,
X = train.x,
y = train.y,
ctx = device,
num.round = 100,
array.batch.size = 128,
learning.rate = 0.01,
momentum = 0.9,
eval.metric = mx.metric.rmse,
eval.data = list(data = test.x, label = test.y),
optimizer = 'sgd',
initializer = mx.init.uniform(0.5),
#array.layout = 'rowmajor',
epoch.end.callback = mx.callback.log.train.metric(1, log))
plot(log$train, type = 'l', col = 'blue', ylim = c(min(c(log$train, log$eval)), max(c(log$train, log$eval))))
lines(log$eval, type = 'l', col = 'red')
mx.ctx.internal.default.value = list(device="cpu",device_id=0,device_typeid=1)
class(mx.ctx.internal.default.value) = "MXContext"
preds <- as.numeric(predict(model, test.x))
1 - sum((test.y - preds)^2) / sum((test.y - mean(test.y))^2)
Doğal olarak, sadece temel mantığı gösteren bir balıktır.
Her şeyi orijinalinde olduğu gibi değiştirmeden servis ettim. Doğru göstergelerin değerlerini sayarak ve bunları tahmin için de kullanarak daha iyi bir sonuç alınabileceğinden eminim. Ancak göstergelerden hangileri doğru? (retorik soru, henüz cevap yok).
Cevaptaki "-1; 1"e gelince, her şey komik. Son nöronun çıktısı orada lineerdir, aktivasyon fonksiyonu yoktur, yani hiçbir şeyle sınırlı değildir. Hedef değerleri -1;1'de de ölçeklendirmeyi denedim ancak bundan sonra ağ (-0.2;0.2) aralığında sonuç vermeye başladı. Bazı nedenlerden dolayı, sonuç her zaman gerekenden daha dar bir aralıkta olacaktır, muhtemelen hızlı bir şekilde durdurulan eğitim nedeniyle, sadece 250 yineleme.
Daha fazla nöron eklerseniz ve öğrenmeyi bırakmazsanız, sonunda ağ istenen aralığa kadar eğitecektir. İç katmandaki 100 nöron, eğitim verilerinde %100 doğruluk elde etmek için neredeyse yeterlidir. Günlüğe bakılırsa, tüm 20000 * 0.7 (daha sonra düzeltildi) sonuçlarındaki kalıntıların toplamı yaklaşık 200'dü. Ancak aynı zamanda, çapraz doğrulama sonuçları genellikle istenen sonuçlarla ilişkilendirilmeyi bırakacak, sadece İstenen aralıkta da olsa rastgele değerler.
Her şeyi orijinalinde olduğu gibi değiştirmeden servis ettim. Doğru göstergelerin değerlerini sayarak ve bunları tahmin için de kullanarak daha iyi bir sonuç alınabileceğinden eminim. Ancak göstergelerden hangileri doğru? (retorik soru, henüz cevap yok).
Cevaptaki "-1; 1"e gelince, her şey komik. Son nöronun çıktısı orada lineerdir, aktivasyon fonksiyonu yoktur, yani hiçbir şeyle sınırlı değildir. Hedef değerleri -1;1'de de ölçeklendirmeyi denedim ancak bundan sonra ağ (-0.2;0.2) aralığında sonuç vermeye başladı. Bazı nedenlerden dolayı, sonuç her zaman gerekenden daha dar bir aralıkta olacaktır, muhtemelen hızlı bir şekilde durdurulan eğitim nedeniyle, sadece 250 yineleme.
Daha fazla nöron eklerseniz ve öğrenmeyi bırakmazsanız, sonunda ağ istenen aralığa kadar eğitecektir. İç katmandaki 100 nöron, eğitim verilerinde %100 doğruluk elde etmek için neredeyse yeterlidir. Günlüğe bakılırsa, tüm 20.000*100 öngörücülerdeki artıkların toplamı yaklaşık 200'dü. Ancak aynı zamanda, çapraz doğrulama sonuçları artık istenen sonuçlarla bağıntılı olmayacak, bunlar yalnızca rastgele değerler olacak, ancak istenilen aralık
Komik. Düşünmek gerek.
Not: büyük olasılıkla, bu aralıkta [-1; 1] ağ en tutarlı giriş sinyallerini alır ve işlevin bu parçası en kolay modellenir (sinir ağı en kolay olanı öğrenir). Ve elbette, bu seçenek, eğim inişinin minimumunu bulduğu zamandır. Bununla tartışmak zor...
Tamam, yine de pratik yapmak istiyorsan sana bir ipucu ekleyeceğim.
İlk olarak, R^2 0.55, "metafişe" bazı küçük fonksiyonel dönüşümler uygulanarak gerçekten elde edilebilir. Başka bir şey, işlevin görünüşünde oldukça karmaşık olduğu ortaya çıkıyor.
Ayrıca şunu deneyin:
satırOrtalamalar(df[, 1:10])
satırOrtalamalar(df[, 1:20])
satırOrtalamalar(df[, 1:30])
...
satırOrtalamalar(df[, 1:100])
Bu 10 üstkurmaca, anlamlı girdilerin doğru kombinasyonunu içerir.
Bu arada, evrişimli katmanlar, nereye kazacağınızı biliyorsanız, bunu öğrenme sürecinde zaten vurgulamanıza izin verir.
Neden öneriyorum, aslında - ne ile öğütüleceğini bilsen bile, çıktının yaklaşıklığını yeniden oluşturmak için çok çabalaman gerekiyor. Ve içeriden biri olarak, insanlara çözülemez bir problem satmaya çalıştığım hissinden hoşlanmıyorum.
Sadece harika bir yorum, meslektaşım! ) ha
Vizyonuma göre madde madde cevaplayayım:
Seni anladım, daha sert bir tepki bekliyordum, beni dövmediğin için teşekkürler)) ve kod için de teşekkürler, zaten başka bir fikirle meşgul olduğum için hafta sonu çözmeye çalışacağım ....
Yardıma ihtiyacım var...
Hareketli ortalamada eşbütünleşme testi yapmak istiyorum ama hata veriyor...
burada sadece statik veriler üzerinde bir test var
library(tseries)
her şey çalışıyor...
fakat aynısını sürgülü pencerede yaptığımda bir hata alıyorum - Error in lm.fit(x, y, offset = offset, singular.ok = singular.ok, ...) :
0 (NA dışı) vaka
sürgülü pencere testi
benzer problemlerde yığın taşması üzerine bunun verilerdeki "NA" nedeniyle olduğu söylenir, ancak bende böyle bir şey yok, orası kesin ...
sorun nedir? bana yardım et lütfen