Ticarette makine öğrenimi: teori, pratik, ticaret ve daha fazlası - sayfa 21
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
Y ölçeğini de denedim, her iki durumda da (Y ölçeği olan ve olmayan) R^2 aynı çıktı (bu durumlarda farklı paketler kullanılmasına rağmen!).
Y ölçeğinin daha az temel bileşenle aynı iyi sonucu verebileceğini anlıyorum. Ancak, tüm bileşenleri kullansanız bile sonuç hala tatmin edici değilse (şimdiki gibi), o zaman hiçbir fark olmayacaktır. Ayrıca daha hızlı çalışıyor, bu benim için artık daha önemli. Doğru, bu yöntemin genel olarak tahmin edicileri seçmek için uygun olup olmadığını teori veya pratikle henüz kendime kanıtlamadım ... İlk başta, tüm tahmin ediciler üzerinde bir temel bileşen modeli yapma ve aşağıdaki katsayılara bakarak tahmin edicileri seçme fikri vardı. bileşenler. Ama sonra çöp ilavesiyle - R ^ 2 modellerinin düştüğünü fark ettim. Farklı öngörücü kümelerini denemek ve daha yüksek R^2'ye sahip olanları aramak mantıklıdır, ancak bu yine de sadece bir teoridir.
Burada düzenli olarak şu öneriyi yapıyorum: Bana setinizi gönderirseniz, sonuçlarımı sizinkiyle karşılaştırırız.
Benim için ideal olan .RData'dır. Hedefin ikili olduğu ve tahmin edicilerin tercihen gerçek sayılar olduğu bir çerçeve.
Daha önce ormanı eğitti ve doğrulama kümesinde bir hata döndürdü. Prensip olarak işe yaradı - orman en azından biraz yeniden eğitilmişse, hata hemen% 50'ye düşer.
Şimdi yukarıdaki kod olan GetPCrsquared() kullanıyorum. Ayrıca feature_selector_modeller.txt'den sizin örneğiniz var, ancak bunu çözmeniz ve doğru kod parçasını almanız gerekiyor, bu yüzden henüz verilerim üzerinde test etmedim.
işte bunu almalısın:
library(infotheo) # measured in nats, converted to bits
library(scales)
library(GenSA)
#get data
sampleA <- read.table('C:/Users/aburnakov/Documents/Private/dummy_set_features.csv'
, sep= ','
, header = T)
#calculate parameters
predictor_number <- dim(sampleA)[2] - 1
sample_size <- dim(sampleA)[1]
par_v <- runif(predictor_number, min = 0, max = 1)
par_low <- rep(0, times = predictor_number)
par_upp <- rep(1, times = predictor_number)
#load functions to memory
shuffle_f_inp <- function(x = data.frame(), iterations_inp, quantile_val_inp){
mutins <- c(1:iterations_inp)
for (count in 1:iterations_inp){
xx <- data.frame(1:dim(x)[1])
for (count1 in 1:(dim(x)[2] - 1)){
y <- as.data.frame(x[, count1])
y$count <- sample(1 : dim(x)[1], dim(x)[1], replace = F)
y <- y[order(y$count), ]
xx <- cbind(xx, y[, 1])
}
mutins[count] <- multiinformation(xx[, 2:dim(xx)[2]])
}
quantile(mutins, probs = quantile_val_inp)
}
shuffle_f <- function(x = data.frame(), iterations, quantile_val){
height <- dim(x)[1]
mutins <- c(1:iterations)
for (count in 1:iterations){
x$count <- sample(1 : height, height, replace = F)
y <- as.data.frame(c(x[dim(x)[2] - 1], x[dim(x)[2]]))
y <- y[order(y$count), ]
x[dim(x)[2]] <- NULL
x[dim(x)[2]] <- NULL
x$dep <- y[, 1]
rm(y)
receiver_entropy <- entropy(x[, dim(x)[2]])
received_inf <- mutinformation(x[, 1 : dim(x)[2] - 1], x[, dim(x)[2]])
corr_ff <- received_inf / receiver_entropy
mutins[count] <- corr_ff
}
quantile(mutins, probs = quantile_val)
}
############### the fitness function
fitness_f <- function(par){
indexes <- c(1:predictor_number)
for (i in 1:predictor_number){
if (par[i] >= threshold) {
indexes[i] <- i
} else {
indexes[i] <- 0
}
}
local_predictor_number <- 0
for (i in 1:predictor_number){
if (indexes[i] > 0) {
local_predictor_number <- local_predictor_number + 1
}
}
if (local_predictor_number > 1) {
sampleAf <- as.data.frame(sampleA[, c(indexes[], dim(sampleA)[2])])
pred_entrs <- c(1:local_predictor_number)
for (count in 1:local_predictor_number){
pred_entrs[count] <- entropy(sampleAf[count])
}
max_pred_ent <- sum(pred_entrs) - max(pred_entrs)
pred_multiinf <- multiinformation(sampleAf[, 1:dim(sampleAf)[2] - 1])
pred_multiinf <- pred_multiinf - shuffle_f_inp(sampleAf, iterations_inp, quantile_val_inp)
if (pred_multiinf < 0){
pred_multiinf <- 0
}
pred_mult_perc <- pred_multiinf / max_pred_ent
inf_corr_val <- shuffle_f(sampleAf, iterations, quantile_val)
receiver_entropy <- entropy(sampleAf[, dim(sampleAf)[2]])
received_inf <- mutinformation(sampleAf[, 1:local_predictor_number], sampleAf[, dim(sampleAf)[2]])
if (inf_corr_val - (received_inf / receiver_entropy) < 0){
fact_ff <- (inf_corr_val - (received_inf / receiver_entropy)) * (1 - pred_mult_perc)
} else {
fact_ff <- inf_corr_val - (received_inf / receiver_entropy)
}
} else if (local_predictor_number == 1) {
sampleAf<- as.data.frame(sampleA[, c(indexes[], dim(sampleA)[2])])
inf_corr_val <- shuffle_f(sampleAf, iterations, quantile_val)
receiver_entropy <- entropy(sampleAf[, dim(sampleAf)[2]])
received_inf <- mutinformation(sampleAf[, 1:local_predictor_number], sampleAf[, dim(sampleAf)[2]])
fact_ff <- inf_corr_val - (received_inf / receiver_entropy)
} else {
fact_ff <- 0
}
return(fact_ff)
}
########## estimating threshold for variable inclusion
iterations = 5
quantile_val = 1
iterations_inp = 1
quantile_val_inp = 1
levels_arr <- numeric()
for (i in 1:predictor_number){
levels_arr[i] <- length(unique(sampleA[, i]))
}
mean_levels <- mean(levels_arr)
optim_var_num <- log(x = sample_size / 100, base = round(mean_levels, 0))
if (optim_var_num / predictor_number < 1){
threshold <- 1 - optim_var_num / predictor_number
} else {
threshold <- 0.5
}
#run feature selection
start <- Sys.time()
sao <- GenSA(par = par_v, fn = fitness_f, lower = par_low, upper = par_upp
, control = list(
#maxit = 10
max.time = 1200
, smooth = F
, simple.function = F))
trace_ff <- data.frame(sao$trace)$function.value
plot(trace_ff, type = "l")
percent(- sao$value)
final_vector <- c((sao$par >= threshold), T)
names(sampleA)[final_vector]
final_sample <- as.data.frame(sampleA[, final_vector])
Sys.time() - start
Bir veri çerçevesinde, en sağdaki sütun hedef sütundur.
TÜM sütunlar kategoriler (tamsayı, karakter veya faktör) olmalıdır.
Ve tüm İncilleri indirmeniz gerekiyor.
Sayıların kategorik değişkenlere nasıl çevrileceğini gösteren bir kod parçası:
disc_levels <- 3 # сколько равночастотных уровней переменной создается
for (i in 1:56){
naming <- paste(names(dat[i]), 'var', sep = "_")
dat[, eval(naming)] <- discretize(dat[, eval(names(dat[i]))], disc = "equalfreq", nbins = disc_levels)[,1]
}
İnternette böyle ilginç bir işlev buldum
belki bu formda algoritma verileri tanımada daha iyi olur? Ancak bir yanlış anlaşılma var, fonksiyonun çıktısı "d" değişkeni ve "x" ve "y" sütunlu iki sütunlu bir matris, biri fiyatı gösteriyor, ikinci kez algoritma tarafından eğriliyor, soru nasıl özelliklerini kaybetmemesi için bu matrisi bir vektöre dönüştürmek
Burada düzenli olarak şu öneriyi yapıyorum: Bana setinizi gönderirseniz, sonuçlarımı sizinkiyle karşılaştırırız.
Benim için ideal olan .RData'dır. Hedefin ikili olduğu ve tahmin edicilerin tercihen gerçek sayılar olduğu bir çerçeve.
Ekli, en iyi tahmincilerimdir. trainData - 2015 için eurusd için D1, fronttestData - 1 Ocak 2016'dan Haziran'a kadar. Ön test uzun, gerçek ticarette aynı ayarlarla bir aydan fazla ticaret yapma ihtimalim yok, sadece modelin karlılığının gerçekten ne kadar süreceğini görmek istedim. fronttestData1, fronttestData2, fronttestData3, fronttestData'dan yalnızca Ocak, yalnızca Şubat ve yalnızca Mart için ayrı kupürlerdir. Gerçekten sadece fronttestData1'deki hatayı azaltmakla ilgileniyorum, gerisi sadece araştırma içindir. Tahmin ediciler seti, esas olarak göstergeler ve aralarında çeşitli hesaplamalar içerir. nnet ile fronttestData1'de yineleme kontrolü ve dahili nöron sayısı seçimi ile eğitimde %30 hata alıyorum. Buradaki %30'un sadece bir şans meselesi olduğuna inanıyorum, model Mart 2015'ten Şubat 2016'ya kadar piyasada bir miktar trend yakaladı. Ama diğer dönemlerin birleşmemesi zaten iyi.
İşte mt5 tester 2014.01-2016.06'dan bir resim, eğitim dönemini bir çerçeve ile işaretledim. Zaten eskisinden daha iyi :). Şimdiye kadar, bu benim sınırım, göstergelerle ilgili birçok sorunu çözmem gerekiyor, yani varsayılan parametrelerinin kesinlikle zaman dilimlerine bağlı olduğu gerçeği, örneğin, H1'de deneyimim tamamen işe yaramaz, aynı gösterge seçim algoritması H1'de her şeyi çöp olarak kabul eder. İlk gösterge grubuna farklı parametrelere sahip bir grup varyasyon eklemeniz veya bir şekilde ohlc'den rastgele göstergeler oluşturmanız gerekir.
işte bunu almalısın:
Bu daha açık, teşekkürler. Bana öyle geliyor ki gösterge başına sadece 3 kategori çalışmayacak. Mantıken en az 100 seviye yapardım ama daha mı iyi olur yoksa bu algoritmanın tüm anlamını mı kaybeder?
Bu daha açık, teşekkürler. Bana öyle geliyor ki gösterge başına sadece 3 kategori çalışmayacak. Mantıken en az 100 seviye yapardım ama daha mı iyi olur yoksa bu algoritmanın tüm anlamını mı kaybeder?
O zaman anlam kaybolur. Algoritma, girdi değişkenlerinin toplam düzeylerini ve yanıt düzeylerinin bu düzeyler arasında nasıl dağıldığını dikkate alır. Buna göre, girdi seviyelerinin her birindeki yanıt değerlerinin sayısı çok düşükse, olasılık çarpıklığının istatistiksel önemini değerlendirmek imkansız olacaktır.
100 seviye yaparsanız, birçok değişken olacaktır. Daha sonra algoritma, sınırlı örnek boyutu göz önüne alındığında oldukça makul olan herhangi bir alt kümenin sıfır önemini döndürür.
Bir örnek iyi bir örnektir.
giriş seviyeleri | gözlem sayısı
1 150
2 120
...
9 90
burada yanıtın içindeki önemi değerlendirebilirsiniz
Örnek kötü.
giriş seviyeleri
112 5
...
357 2
...
1045 1
burada yanıtın içindeki önemi tahmin etmek imkansız
Ekli, en iyi tahmincilerimdir. trainData - 2015 için eurusd için D1, fronttestData - 1 Ocak 2016'dan Haziran'a kadar. Ön test uzun, gerçek ticarette aynı ayarlarla bir aydan fazla ticaret yapma ihtimalim yok, sadece modelin karlılığının gerçekten ne kadar süreceğini görmek istedim. fronttestData1, fronttestData2, fronttestData3, fronttestData'dan yalnızca Ocak, yalnızca Şubat ve yalnızca Mart için ayrı kupürlerdir. Gerçekten sadece fronttestData1'deki hatayı azaltmakla ilgileniyorum, gerisi sadece araştırma içindir. Tahmin ediciler seti, esas olarak göstergeler ve aralarında çeşitli hesaplamalar içerir. nnet ile fronttestData1'de yineleme kontrolü ve dahili nöron sayısı seçimi ile eğitimde %30 hata alıyorum. Buradaki %30'un sadece bir şans meselesi olduğuna inanıyorum, model Mart 2015'ten Şubat 2016'ya kadar piyasada bir miktar trend yakaladı. Ama diğer dönemlerin birleşmemesi zaten iyi.
İşte mt5 tester 2014.01-2016.06'dan bir resim, eğitim dönemini bir çerçeve ile işaretledim. Zaten eskisinden daha iyi :). Şimdiye kadar, bu benim sınırım, göstergelerle ilgili birçok sorunu çözmem gerekiyor, yani varsayılan parametrelerinin kesinlikle zaman dilimlerine bağlı olduğu gerçeği, örneğin, H1'de deneyimim tamamen işe yaramaz, aynı gösterge seçim algoritması H1'de her şeyi çöp olarak kabul eder. İlk gösterge grubuna farklı parametrelere sahip bir grup varyasyon eklemeniz veya bir şekilde ohlc'den rastgele göstergeler oluşturmanız gerekir.
Fena değil, ancak örneklem dışı dönemlerin kendileri küçük.
Numunenin dışında kaç işlemin kaldığı henüz belli değil. Onlarca, yüzlerce var, ne sıra?
Ekli, en iyi tahminci setimdir. trainData - 2015 için eurusd için D1, fronttestData - 1 Ocak 2016'dan Haziran'a kadar. Ön test uzun, gerçek ticarette aynı ayarlarla bir aydan fazla ticaret yapma ihtimalim yok, sadece modelin karlılığının gerçekten ne kadar süreceğini görmek istedim. fronttestData1, fronttestData2, fronttestData3, fronttestData'dan yalnızca Ocak, yalnızca Şubat ve yalnızca Mart için ayrı kupürlerdir. Gerçekten sadece fronttestData1'deki hatayı azaltmakla ilgileniyorum, gerisi sadece araştırma içindir. Tahmin ediciler seti, esas olarak göstergeler ve aralarında çeşitli hesaplamalar içerir. nnet ile fronttestData1'de yineleme kontrolü ve dahili nöron sayısı seçimi ile eğitimde %30 hata alıyorum. Buradaki %30'un sadece bir şans meselesi olduğuna inanıyorum, model Mart 2015'ten Şubat 2016'ya kadar piyasada bir miktar trend yakaladı. Ama diğer dönemlerin birleşmemesi zaten iyi.
İşte mt5 tester 2014.01-2016.06'dan bir resim, eğitim dönemini bir çerçeve ile işaretledim. Zaten eskisinden daha iyi :). Şimdiye kadar, bu benim sınırım, göstergelerle ilgili birçok sorunu çözmem gerekiyor, yani varsayılan parametrelerinin kesinlikle zaman dilimlerine bağlı olduğu gerçeği, örneğin, H1'de deneyimim tamamen işe yaramaz, aynı gösterge seçim algoritması H1'de her şeyi çöp olarak kabul eder. İlk gösterge grubuna farklı parametrelere sahip bir grup varyasyon eklemeniz veya bir şekilde ohlc'den rastgele göstergeler oluşturmanız gerekir.
Baktı.
Toplam veri setinde 107 satır (107 gözlem) olduğunu doğru anladım mı?
Baktı.
Toplam veri setinde 107 satır (107 gözlem) olduğunu doğru anladım mı?
hayır, eğitim setinde 250'lik satır var (2015'teki işlem gün sayısı). Modeli trainData tablosunda eğittim. Test edildi - fronttestData1'de. Ek kontroller için diğer her şey göz ardı edilebilir
trainData - tüm yıl 2015.
fronttestData1 - Ocak 2016
fronttestData2 - Şubat 2016
fronttestData3 - Mart 2016
fronttestData - Ocak 2016 - Haziran 2016
hayır, eğitim setinde 250'lik satır var (2015'teki işlem gün sayısı). Modeli trainData tablosunda eğittim. Test edildi - fronttestData1'de. Ek kontroller için diğer her şey göz ardı edilebilir
trainData - tüm yıl 2015.
fronttestData1 - Ocak 2016
fronttestData2 - Şubat 2016
fronttestData3 - Mart 2016
fronttestData - Ocak 2016 - Haziran 2016
Benim için bu çok az - istatistik kullanıyorum. Şu anki pencere için bile 107 satır benim için çok az. Mevcut pencere için 400'ün üzerinde kullanıyorum
Genel olarak, kümelerinizde gözlem sayısı, tahmin edicilerin sayısıyla karşılaştırılabilir. Bunlar çok özel setlerdir. Her nasılsa bu tür setlerin özel yöntemler gerektirdiğini gördüm. Bağlantı yok, çünkü böyle bir sorunum yok.
Ne yazık ki yöntemlerim verileriniz için uygun değil.