Aprendizaje automático en el trading: teoría, práctica, operaciones y más - página 2801

 
elibrarius #:

Por cierto, ¿alguien sabe cómo calcular la raíz del índice de Gini (entiendo cómo calcular la raíz, pero el índice de Gini en sí)? Preferiría un ejemplo del código. Sería interesante experimentar con él.
Como ya señalé en su momento "el índice de Giniy el coeficiente de Gini son cosas diferentes - no losconfundas ".
Para el coeficiente de Gini utilizamos un GSC, es decir, añadimos ruido. He adjuntado al artículo el código encontrado para calcular R y PY.
El índice es otra cosa.

Hay coeficiente de Gini y hay Impureza de Gini. El primero se utiliza como una métrica en la clasificación binaria, artículo. El segundo se utiliza en los árboles de decisión como un análogo de la entropía.

Коэффициент Джини. Из экономики в машинное обучение
Коэффициент Джини. Из экономики в машинное обучение
  • 2018.03.06
  • habr.com
Интересный факт: в 1912 году итальянский статистик и демограф Коррадо Джини написал знаменитый труд «Вариативность и изменчивость признака», и в этом же году «Титаник» затонул в водах Атлантики. Казалось бы, что общего между этими двумя событиями? Всё просто, их последствия нашли широкое применение в области машинного обучения. И если датасет...
 

Una vez que hizo una secuencia de comandos, que decidí utilizar de nuevo.

library('caret')

way <-         "D:\\FX\\MT5_CB\\MQL5\\Files\\Po_Vektoru_TP_0_SL_0\\EURUSD_0\\Setup"
df1 = read.csv("D:\\FX\\MT5_CB\\MQL5\\Files\\Po_Vektoru_TP_0_SL_0\\EURUSD_0\\Setup\\train.csv", header = TRUE, sep = ";",dec = ".")


cor.test.range <- seq(from = 0.1,to = 0.9,by = 0.1)  # диапазон перебора в коеф корр

get.findCorrelation <- function(data , not.used.colums , cor.coef){
  library('caret')
  df2 <-  cor(     data[, ! colnames(data)  %in%  not.used.colums])  
  not.need <- findCorrelation(df2, cutoff=cor.coef) 
  not.need.nms <- colnames(df2[,not.need])  # получаем имена переменных что не прошли коррел тест
  reduced_Data <- data[, ! colnames(data)  %in%  not.need.nms]
  return(reduced_Data)}


for(i in 1:length(cor.test.range)){
  
    reduced_Data <- get.findCorrelation(data = df1 , 
                                      not.used.colums = c("Target_100_Buy","Target_100_Sell","Target_P","Time","Target_100"),
                                      cor.coef = cor.test.range[i] )


  
  #reduced_Data <- get.findCorrelation(data = reduced_Data , 
  #                                    not.used.colums = c("Target_100_Buy","Target_100_Sell","Target_P","Time","Target_100"),
  #                                    cor.coef = cor.test.range[i]*-1 )  
    
  file.name <- paste0("train2_" , cor.test.range[i] , ".csv")
  final.way <- paste0(way , file.name)
  
  
  #write.csv2(x = reduced_Data,file = final.way,row.names = F)  # возможно это лучше
  
   write.table(reduced_Data, file = final.way,
               append = FALSE, quote = FALSE, sep=";",
               eol = "\n", na = "NA", dec = ".", row.names = FALSE,
               col.names = TRUE, qmethod = c("escape", "double"),
               fileEncoding = "")
}

Lo ejecuté en una muestra, y da un error - No puedo entender dónde buscar el error y cómo solucionarlo - tal vez usted sabe, ya que utiliza estas bibliotecas / paquetes?

R version 4.0.5 (2021-03-31) -- "Shake and Throw"
Copyright (C) 2021 The R Foundation for Statistical Computing
Platform: x86_64-w64-mingw32/x64 (64-bit)

R is free software and comes with ABSOLUTELY NO WARRANTY.
You are welcome to redistribute it under certain conditions.
Type 'license()' or 'licence()' for distribution details.

R is a collaborative project with many contributors.
Type 'contributors()' for more information and
'citation()' on how to cite R or R packages in publications.

Type 'demo()' for some demos, 'help()' for on-line help, or
'help.start()' for an HTML browser interface to help.
Type 'q()' to quit R.

[Workspace loaded from F:/FX/R/.RData]

Loading required package: Matrix
Error: package or namespace load failed for ‘Matrix’ in getClassDef(class1):
 reached elapsed time limit
> source('F:/FX/R/Viborka_Korrelyaciya_v_02.R', echo=TRUE)

> library('caret')
Загрузка требуемого пакета: lattice
Загрузка требуемого пакета: ggplot2

> #way <- "F:\\FX\\Открытие Брокер_Demo\\MQL5\\Files\\Proboy_236_TP_4_SL_4\\Si\\Setup\\"
> #df1 = read.csv("F:\\FX\\Открытие Брокер_Demo\\MQL5\\Files\ ..." ... [TRUNCATED] 

> df1 = read.csv("D:\\FX\\MT5_CB\\MQL5\\Files\\Po_Vektoru_TP_0_SL_0_G_2_Bi_v2\\EURUSD_0\\Setup\\train.csv", header = TRUE, sep = ";",dec = ".")

> cor.test.range <- seq(from = 0.1,to = 0.9,by = 0.1)  # диапазон перебора в коеф корр

> get.findCorrelation <- function(data , not.used.colums , cor.coef){
+   library('caret')
+   df2 <-  cor(     data[, ! colnames(data)  %in%  not.use .... [TRUNCATED] 

> for(i in 1:length(cor.test.range)){
+   
+     reduced_Data <- get.findCorrelation(data = df1 , 
+                                       not.used.co .... [TRUNCATED] 
Warning messages:
1: пакет ‘caret’ был собран под R версии 4.1.0 
2: пакет ‘ggplot2’ был собран под R версии 4.1.0 
> source('F:/FX/R/Viborka_Korrelyaciya_v_02.R', echo=TRUE)

> library('caret')

> #way <- "F:\\FX\\Открытие Брокер_Demo\\MQL5\\Files\\Proboy_236_TP_4_SL_4\\Si\\Setup\\"
> #df1 = read.csv("F:\\FX\\Открытие Брокер_Demo\\MQL5\\Files\ ..." ... [TRUNCATED] 

> df1 = read.csv("D:\\FX\\MT5_CB\\MQL5\\Files\\Po_Vektoru_TP_0_SL_0\\EURUSD_0\\Setup\\train.csv", header = TRUE, sep = ";",dec = ".")

> cor.test.range <- seq(from = 0.1,to = 0.9,by = 0.1)  # диапазон перебора в коеф корр

> get.findCorrelation <- function(data , not.used.colums , cor.coef){
+   library('caret')
+   df2 <-  cor(     data[, ! colnames(data)  %in%  not.use .... [TRUNCATED] 

> for(i in 1:length(cor.test.range)){
+   
+     reduced_Data <- get.findCorrelation(data = df1 , 
+                                       not.used.co .... [TRUNCATED] 
Error in findCorrelation_fast(x = x, cutoff = cutoff, verbose = verbose) : 
  The correlation matrix has some missing values.
In addition: Warning message:
In cor(data[, !colnames(data) %in% not.used.colums]) :
  стандартное отклонение нулевое

Todo funcionaba bien en una muestra binaria.

 
Aleksey Vyazmikin #:

Una vez hiciste un guión que decidí volver a utilizar.

Lo ejecuté en una muestra, y da un error - No puedo entender dónde encontrar el error y cómo solucionarlo - tal vez usted sabe, ya que utiliza estas bibliotecas / paquetes?

Todo funcionaba bien en una muestra binaria.

Yo no uso esta biblioteca, lo hice una vez, creo que fue sólo para usted.... Debes haber hecho algo mal en tus nuevos datos si funciona con los datos antiguos
 
mytarmailS #:
No uso esta bibliotheca, lo hice una vez, creo que fue solo para ti.... Algo habrás hecho mal con tus nuevos datos si funciona con los antiguos.

Sí, para mí. Funciona con binarios, antes de mirar funcionaba sobre todo con binarios. Lastima que no te digan que columna/fila esta mal.

 
Aleksey Vyazmikin #:

Sí, para mí. Funciona con binario, antes de mirar funcionaba sobre todo con binario. Lástima que no te digan qué columna/fila está mal.

Comprueba dos veces tus datos para asegurarte de que coinciden con el binario.

Si no puedes averiguarlo, envíame un pequeño trozo de tus datos con los que el script no funciona, así como el propio script y recuérdame lo que debería hacer.
Intentaré ayudarte...

 
mytarmailS #:
Vuelva a comprobar sus datos para asegurarse de que coinciden con los binarios....

Si no lo consigues, envíame un pequeño fragmento de tus datos con los que el script no funcione, así como el propio script y recuérdame lo que debería hacer.
Intentaré ayudarte...

¿Por qué tienen que coincidir con el binario? Acabo de decir que el script funciona, pero no funciona con todos los datos.

Corté la muestra y adjunté el script en un archivo separado.

El script elimina las columnas correlacionadas de la muestra y guarda la nueva muestra.

Las columnas se excluyen dependiendo del umbral de correlación.

Archivos adjuntos:
 
Aleksey Vyazmikin #:

¿Por qué tienen que coincidir con el binario? Acabo de decir que el script funciona, pero no funciona con todos los datos.

No sé, a lo mejor has cambiado el separador o algo...
Y sigo sin entender qué error da el script.
¿Y por qué instalaste los paquetes en el R más nuevo y usas el R viejo?
 
Aleksey Vyazmikin #:

Aquí tienes, he tenido que reescribirlo todo de nuevo, era tan mierda de código que no entendía lo que hacía

df <- read.csv(file = file.choose(), header = T,sep = ";",dec = ".",stringsAsFactors = F)


#  указываем какие колонки не использовать
not_used_vars <- c("Target_100_Buy","Target_100_Sell","Target_P","Time","Target_100")


#  сохраняем отдельно не испозуемые колонки
not_used_vars_df <- df[,not_used_vars]


#  создаем датафрейм для поиска, без колонок  not_used_vars
df <- df[!names(df) %in% not_used_vars]


#  чтобы прочитать как работает функция и примеры  ?caret::findCorrelation
#  находим колонки которые не коррелированы с порогом корреляции 0,9    "cutoff = 0.9"
not_corr_colums <- caret::findCorrelation(as.matrix(df), cutoff = 0.9, exact = F,names = F)


#  оставляем df с некоррелироваными колонками
df <- df[,not_corr_colums]


#  обьединяем все в результирующий датафрейм
df <- cbind.data.frame(not_used_vars_df , df)


#  сохраняем результат
res_save_way <- "C:\\......\\not_correl_data.csv"
write.csv2(x = df,file = res_save_way,row.names = F)
 
Aleksey Vyazmikin #:

Una vez hiciste un guión que decidí volver a utilizar.

Lo ejecuté en una muestra, y da un error - No puedo entender dónde encontrar el error y cómo solucionarlo - tal vez usted sabe, ya que utiliza estas bibliotecas / paquetes?

Todo funcionaba bien en una muestra binaria.

El error dice que han aparecido valores indefinidos(NA) en la matriz de correlaciones y la función findCorrelation no puede utilizarla. Abra el paquete y lea la descripción de la función.

Los scripts son desordenados y un mar de resultados intermedios innecesarios. a continuación se muestra el script corregido

#=====================================================================
 require(tidyft)
#--get  df1------------------------------------------------------------
way <-         "D:\\FX\\MT5_CB\\MQL5\\Files\\Po_Vektoru_TP_0_SL_0\\EURUSD_0\\Setup"
df1 = read.csv(paste0(way, "train.csv"), header = TRUE, sep = ";",dec = ".")
#df1 = fread(paste0(way, "train1.csv"))
#fst::write_fst(df1, "train1.fst")
#-----archiv--------------------------------
 ft <- as_fst(df1) #
 rm(df1)


#---constanti--------------------------------------------
 cor.test.range <- seq(from = 0.1,to = 0.9,by = 0.1)  #  диапазон перебора в коеф корр
not.used.colums = c("Target_100_Buy","Target_100_Sell","Target_P","Time","Target_100")

ft %>% select_fst(cols = not.used.colums, negate = TRUE)-> dt
#--function--------------------------------------------
 get.findCor<- function(data , cor.coef = cor.test.range){
    import::here(.from = caret, findCor = findCorrelation)
    data %>%
        cor(method = "kendall", use = "pairwise" ) %>%
        findCor(cutoff = cor.coef, exact = FALSE, names = TRUE)->nms
        if(nms!= 0)
        select_dt(data, cols = nms, negate = TRUE)
}
#----Calculate--------------------------------------------------------------
for(i in seq_len(length(cor.test.range))){
    get.findCor(dt, cor.coef = cor.test.range[i])-> dt.n
    paste0("train2_" , cor.test.range[i]*10 , ".csv") %>%
        paste0(way , .) %>% fwrite(dt.n, .)
    rm(dt.n)
}

Explicaciones por orden:

1. No es necesario cargar el paquete "caret" en el ámbito global. Es muy pesado, tira de muchas dependencias y datos. Sólo necesitas una función del mismo. Lo importas directamente en la función get.findCor.

El paquete tidyft es un paquete de manipulación de dataframes muy rápido. Úsalo.

 

Para el control, he probado en mi equipo utilizando este script. Resultado:

# patch <- "C:/RData/Project/FEDOT/"
# df1 <- fread(paste0(patch, "DF_train_M5.csv"))
# object.size(df1) #780184 bytes
# dim(df1) #[1] 4030   25
# ft <- as_fst(df1)#
# rm(df1)
#ft %>% select_fst(cols = c(1:3,25), negate = TRUE)-> dt
#dim(dt) [1] 4030   21
bench::workout({
    for(i in seq_len(length(cor.test.range))){
        get.findCor(dt, cor.coef = cor.test.range[i])-> dt.n
        paste0("train2_" , cor.test.range[i]*10 , ".csv") %>%
            paste0(patch , .) %>% fwrite(dt.n, .)
        rm(dt.n)
    }
})->t1 #(12.9  m)
setwd(patch)
dim(fread("train2_1.csv"))
#[1] 4030    3
dim(fread("train2_2.csv"))
#[1] 4030    6
dim(fread("train2_3.csv"))
#[1] 4030   10
dim(fread("train2_4.csv"))
#[1] 4030   13
dim(fread("train2_5.csv"))
#[1] 4030   16
dim(fread("train2_6.csv"))
#[1] 4030   17
dim(fread("train2_7.csv"))
#[1] 4030   18
dim(fread("train2_8.csv"))
#[1] 4030   18
dim(fread("train2_9.csv"))
#[1] 4030   18

Cuenta durante bastante tiempo (12,9 min). Pero el cuadro tampoco es pequeño. Por supuesto hay que paralelizarlo, buscar una función cor más rápida.

De los 21 predictores iniciales con diferentes umbrales seleccionamos diferentes números de predictores.

Pero este no es el camino a seguir.

Suerte