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

 
Escribí este código en un script y lo ejecuté unas cuantas veces, obteniendo resultados ligeramente diferentes una y otra vez...
 
Vizard_:

set.seed(1234)

¿Qué es y dónde lo pongo?

 
Mihail Marchukajtes:

eso es más de la mitad de la batalla... así es....

90%, y los modelos son una cuestión de tecnología, caret está lleno de estas cosas con el atado adecuado.

 

Aquí hay un ejemplo con vtreat también,

Generalmente se trata de un preprocesamiento de datos, pero puede utilizarse como una estimación de cada predictor en relación con el objetivo. No me gusta que el paquete no tenga en cuenta las interacciones de los predictores, sólo se puede utilizar el código si se tiene suficiente para estimar los predictores de uno en uno en relación con el objetivo.

forexFeatures <- read.csv2("Qwe.txt", dec=".")
forexFeatures <- forexFeatures[,-1]

library(vtreat)


#designTreatmentsC  подходит только для классификации с двумя классами
treatmentsC <- designTreatmentsC(dframe = forexFeatures,
                                 varlist=colnames(forexFeatures)[-ncol(forexFeatures)], #названия  колонок с предикторами (тут - все кроме последней колонки)
                                 outcomename = colnames(forexFeatures)[ncol(forexFeatures)], #названия  колонок с таргетом (тут - последняя колонка)
                                 outcometarget = "1") #текст  или цифра одного из классов
#обработка,  сортировка результата
treatmensC_scores <- treatmentsC$scoreFrame[order(treatmentsC$scoreFrame$sig),]
treatmensC_scores <- treatmensC_scores[!duplicated(treatmensC_scores$origName),]
treatmensC_scores <- treatmensC_scores[,c("origName","sig")] 
treatmensC_scores$is_good <- treatmensC_scores$sig <= 1/nrow(forexFeatures)
treatmensC_scores #вывод на экран таблички результатов. Лучшие предикторы вверху таблицы. Чем оценка sig меньше тем лучше. Желательно (колонка is_good==TRUE) чтоб sig была меньше чем 1/nrow(forexFeatures), всё что больше - плохо 


#designTreatmentsN подходит для регрессии или если больше двух классов. Если всего два класса то предпочтительнее использовать C функцию, она вроде как и коррелирующие предикторы убирает заодно.
treatmentsN <- designTreatmentsN(dframe = forexFeatures,
                                 varlist=colnames(forexFeatures)[-ncol(forexFeatures)], #названия колонок с предикторами (тут - все кроме последней колонки)
                                 outcomename = colnames(forexFeatures)[ncol(forexFeatures)]) #названия колонок с таргетом (тут - последняя колонка)
#обработка, сортировка результата
treatmensN_scores <- treatmentsN$scoreFrame[order(treatmentsN$scoreFrame$sig),]
treatmensN_scores <- treatmensN_scores[!duplicated(treatmensN_scores$origName),]
treatmensN_scores <- treatmensN_scores[,c("origName","sig")] 
treatmensN_scores$is_good <- treatmensN_scores$sig <= 1/nrow(forexFeatures)
treatmensN_scores #вывод на экран таблички результатов. Лучшие предикторы вверху таблицы. Чем оценка sig меньше тем лучше. Желательно (колонка is_good==TRUE) чтоб sig была меньше чем 1/nrow(forexFeatures), всё что больше - плохо

 
Mihail Marchukajtes:
¿Qué es y dónde lo pongo?

set.seed establece la semilla inicial del generador de números aleatorios. Si se establece el mismo estado (como 1234) antes de la ejecución del código, entonces el siguiente código se ejecutará de la misma manera en todos los casos.

read.csv2(... etc.
set.seed(1234)
Boruta(ObjetivoProf... etc.)

Pero quizás el algoritmo necesita más iteraciones (maxRuns = 1000000 por ejemplo), no cabe en un número tan pequeño como por defecto y se detiene a mitad de camino.

 

He estado pensando en la regresión....
La regresión en los mercados financieros no es una función suave, sino una función escalonada con incrementos de 1 punto. (tanto para el profesor como para la previsión). Si, por ejemplo, limitamos el movimiento a +/- 100 puntos, existe una analogía con la clasificación en 200 clases. Así que en la salida predecimos la clase más probable - por ejemplo +22 pt.
¿No significa que para obtener buenos resultados la estructura/complejidad del modelo (número de neuronas) para la regresión debería ser 200 veces mayor? Bueno, si aumentamos el paso a 5 pt, entonces 40 veces sería un poco más económico a costa de menos precisión.

 
Pasé el archivo por vtreat, es cierto que no mucho. Sólo se han seleccionado 4 entradas. Gracias por el consejo..... Seguiré hilando....
 
Vizard_:

Ahora recupera el boxplot, haz algo con las entradas y ejecútalo de nuevo.

El parámetro set.seed es el mismo en ambos casos.

¿Qué quieres que haga con las entradas?

Sí..... Reconozco que esperaba algo mejor de mis aportaciones. De todos modos, pensaba que habría más importantes, desde luego no cuatro de 100. Con tantas entradas, los modelos resultan demasiado pequeños, aunque en la práctica he comprobado que cuanto más sencillo es el modelo, mejor funciona. Y viendo el modelo y haciendo mis propias pruebas entiendo que esta mierdita es bastante buena..... Es demasiado pronto para sacar conclusiones, se necesitan más pruebas. Sigue cavando....

 
En todos los lugares en los que he escrito
forexFeatures <- read.csv2("Qwe.txt")

realmente tienes que hacerlo.
forexFeatures <- read.csv2("Qwe.txt", dec=".")

Lo siento, me equivoqué en el formato de su archivo. Corregiré los mensajes antiguos. Vuelva a ejecutar el código, los resultados deberían ser mejores, de lo contrario todos los números con fracciones decimales se procesaron mal.
 
Mihail Marchukajtes:

¿Qué hacer con las entradas?

Por ejemplo, jPrediction escala los datos al intervalo [-1;1] y aprende sobre estos números. También se puede escalar al mismo intervalo en R antes de evaluar las entradas.

forexFeatures <- read.csv2("Qwe.txt", dec=".")

for(i in 1:(ncol(forexFeatures)-1)){
  forexFeatures[,i] <- (forexFeatures[,i] - min(forexFeatures[,i]))/(max(forexFeatures[,i])-min(forexFeatures[,i]))*2-1
}

vtreat, Boruta, etc,...

Los métodos de estimación basados en árboles probablemente no cambiarán el resultado, a los bosques no les importa realmente en qué intervalo vinieron los datos, pero es mejor comprobarlo. vtreat tampoco es exigente con el intervalo.


Pero, en general, se refiere a la transformación no lineal de las entradas incluso antes de alimentar la neurona. La neurónica es muy sensible a las entradas, y si se procesan los datos de entrada de alguna manera especial, sus resultados pueden mejorar. Por ejemplo, he oído un truco de este tipo: convertir las entradas a través de la sigmoidea.