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

 
elibrarius:
Si empiezas algo durante un mes - utiliza una fuente de alimentación ininterrumpida para tu ordenador, una vez tuve 2 semanas de cálculos, se fue la luz))
Y de la versión GPU no esperes mucho, reescribir el código me parece más largo y si el autor no lo ha hecho, es poco probable que otra persona termine esta tarea hasta el final.

Bueno, el autor lo ha puesto todo en paralelo, ahora sólo tengo que ejecutarlo. De todos modos, he maximizado la carrera durante 3 días y he conseguido un modelo con 9 entradas, lo que es un récord para mí ahora para ser honesto. Realmente no quiero optimizarlo durante tanto tiempo. Pero como dicen. El mercado lo exige. Por lo tanto, buscando capacidades, si alguien tiene la oportunidad de optimizar el conjunto de datos en el optimizador, e incluso en 20-30 núcleos, estaría muy agradecido.
 

Mihail Marchukajtes:

días de aprendizaje, semanas.

Aparentemente tu algoritmo no es óptimo, en conjuntos de datos tan pequeños puedes usar con seguridad algoritmos de fuerza bruta como Knn, que son cuasi-óptimos, si el algoritmo es más lento que Knn probablemente sea un mal algoritmo ML o esté mal configurado. En un conjunto de datos de este tipo, el ciclo de entrenamiento y la ejecución de todo el conjunto no debería durar más de un segundo.
 
pantural:
Aparentemente tu algoritmo no es óptimo, en conjuntos de datos tan pequeños, puedes utilizar algoritmos de fuerza bruta como Knn, que son cuasi-óptimos, si el algoritmo es más lento que Knn, probablemente sea un mal algoritmo de ML o esté mal configurado. En este conjunto de datos, el ciclo de entrenamiento y la ejecución de todo el conjunto no debería durar más de un segundo.

Ya lo he explicado antes. 100 divisiones, cada división se entrena 1000 épocas, etc. La esencia del optimizador es calcular el conjunto de datos para que no haya dudas sobre su idoneidad. Es decir, él da vueltas a este archivo de forma figurada, y tú sigues comparándolo con un entrenamiento de una sola neurona. EN MI OPINIÓN. Se trata esencialmente de un sistema de IA en el que todo tipo de optimización y preprocesamiento tiene lugar junto con el entrenamiento de las neuronas, y el propio entrenamiento se ejecuta cientos de veces. Si algo....
 
Mihail Marchukajtes:

Ya lo he explicado antes. 100 divisiones, cada división se entrena durante 1000 épocas, etc. Sólo te fijas en un único entrenamiento de una neurona, mientras que la esencia del optimizador es calcular el conjunto de datos para que no haya dudas sobre su idoneidad. Es decir, él hace girar este archivo de arriba a abajo de forma figurada, y tú sigues comparándolo con un solo entrenamiento de una neurona. EN MI OPINIÓN. Se trata esencialmente de un sistema de IA en el que todo tipo de optimización y preprocesamiento tiene lugar junto con el entrenamiento de las neuronas, y el propio entrenamiento se ejecuta cientos de veces. Si algo....
En general, estoy en contra de toda esta formación, pero su máquina es exactamente lo que inventó un burro, incluso yo puedo entenderlo.
 
elibrarius:
MLP está adivinando el 95% del tiempo... No creo que estés haciendo la moto correcta) Sin ánimo de ofender.

Tienes un error.
La primera columna de la tabla es el número de fila, y esta columna no se puede utilizar en la predicción, pero sólo es necesaria para jPrediction por alguna razón.

El objetivo se distribuye de manera que la primera mitad de las líneas es de clase 0, y la segunda mitad de las líneas es de clase 1. Así que la neurona simplemente recuerda que si el número de línea es menor que 228 es la clase 0, de lo contrario es la clase 1.

 
Dr. Trader:

Tienes un error.
La primera columna de la tabla es un número de fila y no se puede utilizar esta columna en la predicción, pero es obligatoria sólo para jPrediction por alguna razón.

El objetivo se distribuye de manera que la primera mitad de las líneas es de clase 0, y la segunda mitad de las líneas es de clase 1. Así, la neurona simplemente recuerda que si el número de línea es menor que 228, es de clase 0, de lo contrario es de clase 1.

Por cierto, sí. No me di cuenta de que es sólo un número.

Sin ella Entradas a guardar: 4,50,53,59,61,64,92,98,101,104,

Error medio en el entrenamiento (60,0%) =0,269 (26,9%) nLearns=2 NGrad=7376 NHess=0 NCholesky=0 codResp=2
Error medio en la validación (20,0%) parcela =0,864 (86,4%) nLearns=2 NGrad=7376 NHess=0 NCholesky=0 codResp=2
Error medio en la prueba (20,0%) plot =0,885 (88,5%) nLearns=2 NGrad=7376 NHess=0 NCholesky=0 codResp=2

Claramente el sobreentrenamiento. Así que tengo que cribar las entradas de una manera diferente.

¿Tal vez tamizar por peso de los insumos? Como hiciste para el problema en el primer post del hilo...

Estoy intentando reescribir tu script de R adjunto, para que pueda determinar los nombres y el número de columnas... pero no sé lo suficiente R.

 
elibrarius:

Estoy intentando reescribir el script de R que has adjuntado, para que determine los nombres y el número de columnas... pero no sé lo suficiente R.


Por aquel entonces todavía estaba empezando a aprender R, el script está generado casi en su totalidad en rattle (entorno visual para el datamining en R), por eso es tan complejo y personalizado para todas las ocasiones.


Esto...

crs$input <- c("input_1", "input_2", "input_3", "input_4",
     "input_5", "input_6", "input_7", "input_8",
     "input_9", "input_10", "input_11", "input_12",
     "input_13", "input_14", "input_15", "input_16",
     "input_17", "input_18", "input_19", "input_20")

crs$numeric <- c("input_1", "input_2", "input_3", "input_4",
     "input_5", "input_6", "input_7", "input_8",
     "input_9", "input_10", "input_11", "input_12",
     "input_13", "input_14", "input_15", "input_16",
     "input_17", "input_18", "input_19", "input_20")

debería cambiarse por...

crs$input <- colnames(crs$dataset)[-ncol(crs$dataset)]

crs$numeric <- crs$input

Y debería estar bien.


En general, es un mal enfoque, no se debería definir la importancia de las entradas de esa manera. Por alguna razón, esa vez funcionó, pero nunca más me ayudó.

 

Es mejor definir la importancia de los predictores de la siguiente manera

library(vtreat)

sourceTable <- read.table("BuySell.csv", sep=";", header = TRUE, stringsAsFactors = FALSE)

#Эта  строка кода относится только к конкретно этому файлу.
 этом csv первая колонка и первая строка специально заполнены для конкретной модели, и тут не нужны. Удалить.
#для  обычных csv файлов такую команду выполнять не нужно.
sourceTable <- sourceTable[-1,-1]

#число колонок
sourceTable_ncol <- ncol(sourceTable)

#Оценка  для классификации, только для двух классов.
#Outcometarget  должен быть равен значению одного из классов.
#На  выбор или эта функция designTreatmentsC, или designTreatmentsN, или designTreatmentsZ (ниже, закоменчены)
#Взаимная  корреляция предкиторов учитывается только в designTreatmentsC, и у повторяющихся или похожих предикторов оценка будет понижаться
set.seed(0)
treats <- designTreatmentsC(dframe = sourceTable,
                            varlist = colnames(sourceTable)[-sourceTable_ncol],
                            outcomename = colnames(sourceTable)[sourceTable_ncol],
                            outcometarget = 1,
                            verbose = FALSE
)

# #оценка  для регрессии или если больше двух классов
#  sourceTable[,sourceTable_ncol] <- as.numeric(sourceTable[,sourceTable_ncol])
#  set.seed(0)
#  treats <- designTreatmentsN(dframe = sourceTable,
#                              varlist = colnames(sourceTable)[-sourceTable_ncol],
#                              outcomename = colnames(sourceTable)[sourceTable_ncol],
#                              verbose = FALSE
# )

# #Оценка  предикторов без учёта цели.
#  set.seed(0)
#  treats <- designTreatmentsZ(dframe = sourceTable,
#                              varlist = colnames(sourceTable)[-sourceTable_ncol],
#                              verbose = FALSE
# )
# 




#табличка  только с названием колонки и её оценкой важности
resultTable <- treats$scoreFrame[,c("varName", "sig")]

#сортировка
 resultTable <- resultTable[order(resultTable$sig),]

#согласно  общему правилу, оценка предиктора (sig) должна быть меньше 1/<общее число предикторов>
#чем  оценка меньше, тем лучше
resultTable$testPassed <- resultTable$sig < 1/(sourceTable_ncol-1)

#для  создания модели и прогноза лучше использовать только те предкторы у которых testPassed == TRUE
resultTable
 

Los resultados de la evaluación de la importancia son los siguientes. Cuanto más alto sea el predictor en la tabla, mejor. SóloVVolum6, VDel1, VVolum9, VQST10 pasaron la prueba.

En rattle podemos construir 6 modelos a la vez sobre estos 4 predictores, y SVM muestra una precisión de alrededor del 55% en los datos de validación y prueba. No está mal.

             varName sig testPassed 182 VVolum6_catB 3.220305e-06 TRUE 28 VDel1_catB 1.930275e-03 TRUE 186 VVolum9_catB 5.946373e-03 TRUE 143 VQST10_catB 8.458616e-03 TRUE 126 VQST_catB 1,843740e-02 FALSE 23 Del11_catP 2,315340e-02 FALSE 147 Volum_catP 2,331145e-02 FALSE 24 Del11_catB 2.429723e-02 FALSE 154 Volum3_catB 2,985041e-02 FALSE 12 Del5_catP 3,689965e-02 FALSE 120 QST9_catB 4,092966e-02 FALSE 130 VQST2_catB 4.136235e-02 FALSE 163 Volum9_catP 4.299684e-02 FALSE 109 QST2_catB 4.311742e-02 FALSE 32 VDel3_catB 4.704981e-02 FALSE 11 Del5_lev_x.1 4,725332e-02 FALSO 19 Del9_catB 5,316355e-02 FALSO 13 Del5_catB 5,472078e-02 FALSO 178 VVolum4_catB 5.705614e-02 FALSE 191 VVolum11_catB 5.749245e-02 FALSE 148 Volum_catB 6.281945e-02 FALSE 181 VVolum6_catP 6.534487e-02 FALSE 31 VDel3_catP 6.911261e-02 FALSE 74 VST11_catB 7.709038e-02 FALSE 134 VQST4_catB 9.536026e-02 FALSE 141 VQST9_catB 9.536026e-02 FALSE 162 Volum7_catB 9.589108e-02 FALSE 107 QST1_catB 9.589108e-02 FALSE 2 Del_catB 1.049703e-01 FALSE 151 Volum2_catP 1.071203e-01 FALSE 60 ST11_catB 1.076877e-01 FALSE 43 VDel10_catP 1.201338e-01 FALSE 184 VVolum7_catB 1.286891e-01 FALSE 121 QST10_catP 1.464880e-01 FALSE 38 VDel6_catB 1.479268e-01 FALSE 173 VVolum2_catP 1,663695e-01 FALSE 8 Del3_catB 1,703652e-01 FALSE 10 Del4_catB 1,755150e-01 FALSE 30 VDel2_catB 1.781568e-01 FALSE 37 VDel6_catP 1.797087e-01 FALSE 1 Del_catP 1.995316e-01 FALSE 112 QST4_catP 2.104902e-01 FALSE 15 Del6_catB 2.132517e-01 FALSE 27 VDel1_catP 2.313270e-01 FALSE 41 VDel9_catP 2.316597e-01 FALSE 100 VAD11_catP 2.320692e-01 FALSE 144 VQST11_lev_x.100 2.374690e-01 FALSE 123 QST11_catP 2.576971e-01 FALSE 145 VQST11_catP 2.626389e-01 FALSE 104 QST_catP 2.716664e-01 FALSE 160 Volum6_catB 2.776463e-01 FALSE 115 QST6_catP 3.034207e-01 FALSE 137 VQST6_catB 3.060767e-01 FALSE 102 QST_lev_x.100 3.061104e-01 FALSE 36 VDel5_catB 3.149911e-01 FALSE 99 VAD11_lev_x.0 3.340276e-01 FALSE 17 Del7_catB 3.431346e-01 FALSE 16 Del7_catP 3.819094e-01 FALSE 3 Del1_catP 3.912432e-01 FALSE 152 Volum2_catB 3.938369e-01 FALSE 44 VDel10_catB 3.965567e-01 FALSE 5 Del2_catP 4.363645e-01 FALSE 20 Del10_catP 4.409282e-01 FALSE 171 VVolum1_catP 4.550495e-01 FALSE 169 VVolum_catP 4.682515e-01 FALSE 46 VDel11_catP 4.693330e-01 FALSE 86 AD11_catP 4.742976e-01 FALSE 187 VVolum10_catP 4.963890e-01 FALSE 132 VQST3_catP 5.291401e-01 FALSE 14 Del6_catP 5.310502e-01 FALSE 124 QST11_catP 5.355186e-01 FALSE 177 VVolum4_catP 5.542335e-01 FALSE 150 Volum1_catP 5.552986e-01 FALSE 39 VDel7_catP 5.589613e-01 FALSE 185 VVolum9_catP 5.589901e-01 FALSE 59 ST11_catP 5.669251e-01 FALSE 188 VVolum10_catB 5.680089e-01 FALSE 21 Del10_catB 5.706515e-01 FALSE 9 Del4_catP 5.708557e-01 FALSE 142 VQST10_catP 5.725309e-01 FALSE 113 QST4_catB 5.856434e-01 FALSE 119 QST9_catP 5.922916e-01 FALSE 131 VQST3_catP 6.033950e-01 FALSE 168 Volum11_catB 6.156530e-01 FALSE 155 Volum4_catP 6.196455e-01 FALSE 170 VVolum_catB 6.244269e-01 FALSE 180 VVolum5_catB 6.279081e-01 FALSE 87 AD11_catB 6.372863e-01 FALSE 153 Volum3_catP 6.641713e-01 FALSE 73 VST11_catP 6.701117e-01 FALSE 172 VVolum1_catB 6.707140e-01 FALSE 183 VVolum7_catP 6.771533e-01 FALSE 55 ST6_catB 6.780044e-01 FALSE 42 VDel9_catB 6.925700e-01 FALSE 167 Volum11_catP 6.973599e-01 FALSE 179 VVolum5_catP 7.093678e-01 FALSE 125 VQST_catP 7.189573e-01 FALSE 146 VQST11_catB 7.195859e-01 FALSE 101 VAD11_catB 7.250369e-01 FALSE 25 VDel_catP 7.310211e-01 FALSE 108 QST2_catP 7.426980e-01 FALSE 29 VDel2_catP 7.486648e-01 FALSE 136 VQST6_catP 7.529104e-01 FALSE 103 QST_lev_x.0 7,600202e-01 FALSO 22 Del11_lev_x.0 7.600202e-01 FALSE 47 VDel11_catB 7.619000e-01 FALSE 140 VQST9_catP 7.684919e-01 FALSE 164 Volum9_catB 7.743767e-01 FALSE 4 Del1_catB 7.796789e-01 FALSE 158 Volum5_catB 7.804397e-01 FALSE 117 QST7_catP 7.843659e-01 FALSE 26 VDel_catB 7.904299e-01 FALSE 166 Volum10_catB 7.936121e-01 FALSE 165 Volum10_catP 8.017445e-01 FALSE 6 Del2_catB 8.104867e-01 FALSE 190 VVolum11_catP 8.133908e-01 FALSE 45 VDel11_lev_x 8,231377e-01 FALSE 189 VVolum11_lev_x.0 8.231377e-01 FALSE 105 QST_catB 8.431046e-01 FALSE 174 VVolum2_catB 8.506238e-01 FALSE 81 AD6_catP 8.552222e-01 FALSE 94 VAD6_catP 8.552222e-01 FALSE 110 QST3_catP 8.560370e-01 FALSE 35 VDel5_catP 8.633955e-01 FALSE 122 QST10_catB 8.651814e-01 FALSE 18 Del9_catP 8.816989e-01 FALSE 34 VDel4_catB 8.909886e-01 FALSE 176 VVolum3_catB 8.911481e-01 FALSE 159 Volum6_catP 9.086195e-01 FALSE 106 QST1_catP 9.218420e-01 FALSE 133 VQST4_catP 9.218420e-01 FALSE 70 VST9_catP 9.223350e-01 FALSE 129 VQST2_catP 9.276503e-01 FALSE 54 ST6_catP 9.371128e-01 FALSE 161 Volum7_catP 9.634046e-01 FALSE 138 VQST7_catP 9.991105e-01 FALSE 116 QST6_catB 9.992413e-01 FALSE 7 Del3_catP 9.993376e-01 FALSE 33 VDel4_catP 9.994999e-01 FALSE 40 VDel7_catB 9.995014e-01 FALSE 157 Volum5_catP 9.995728e-01 FALSE 156 Volum4_catB 9.995799e-01 FALSE 118 QST7_catB 9.995921e-01 FALSE 139 VQST7_catB 9.995937e-01 FALSE 175 VVolum3_catP 9.996133e-01 FALSE 149 Volum1_catP 9.996479e-01 FALSE 48 ST_catB 1.000000e+00 FALSE 49 ST1_catB 1.000000e+00 FALSE 50 ST2_catB 1.000000e+00 FALSE 51 ST3_catB 1.000000e+00 FALSE 52 ST4_catB 1.000000e+00 FALSE 53 ST5_catB 1.000000e+00 FALSE 56 ST7_catB 1.000000e+00 FALSE 57 ST9_catB 1.000000e+00 FALSE 58 ST10_catB 1.000000e+00 FALSE 61 VST_catB 1.000000e+00 FALSE 62 VST1_catB 1.000000e+00 FALSE 63 VST2_catB 1.000000e+00 FALSE 64 VST3_catB 1.000000e+00 FALSE000000e+00 FALSE 65 VST4_catB 1.000000e+00 FALSE 66 VST5_catB 1.000000e+00 FALSE 67 VST6_catP 1.000000e+00 FALSE 68 VST6_catB 1.000000e+00 FALSE 69 VST7_catB 1.000000e+00 FALSE 71 VST9_catB 1.000000e+00 FALSE 72 VST10_catB 1.000000e+00 FALSE 75 AD_catB 1.000000e+00 FALSE 76 AD1_catB 1.000000e+00 FALSE000000e+00 FALSE 77 AD2_catB 1.000000e+00 FALSE 78 AD3_catB 1.000000e+00 FALSE 79 AD4_catB 1.000000e+00 FALSE 80 AD5_catB 1.000000e+00 FALSE 82 AD6_catB 1.000000e+00 FALSE 83 AD7_catB 1.000000e+00 FALSE 84 AD9_catB 1.000000e+00 FALSE 85 AD10_catB 1.000000e+00 FALSE 88 VAD_catB 1.000000e+00 FALSE 89 VAD1_catB 1.000000e+00 FALSE 90 VAD2_catB 1.000000e+00 FALSE 91 VAD3_catB 1.000000e+00 FALSE 92 VAD4_catB 1.000000e+00 FALSE 93 VAD5_catB 1.000000e+00 FALSE 95 VAD6_catB 1.000000e+00 FALSE 96 VAD7_catB 1.000000e+00 FALSE 97 VAD9_catB 1.000000e+00 FALSE 98 VAD10_catB 1.000000e+00 FALSE 111 QST3_catB 1.000000e+00 FALSE 114 QST5_catB 1.000000e+00 FALSE 127 VQST1_catP 1.000000e+00 FALSE 128 VQST1_catB 1.000000e+00 FALSE 135 VQST5_catB 1.000000e+00 FALSE
 
elibrarius:
MLP acierta el 95% de las veces... No creo que estés haciendo la moto correcta) Sin ánimo de ofender.
Yo también me fabrico mi propia moto, pero basándome en décadas de probada eficacia de la MLP (que se dice obsoleta y necesita algo más fresco para funcionar).


Y prueba también los árboles de decisión de alglib, cuentan más rápido y tienen mejor rendimiento que mlp. Diplerning también es más rápido, pero no en alglib.

Lo principal es la relación velocidad/calidad, de qué sirve esperar una semana o incluso un día o hasta una hora, así nunca encontrarás la combinación óptima) El modelo tarda unos segundos en aprender, entonces se puede utilizar la genética para la autosimulación de parámetros o predictores, entonces es pura IA, de lo contrario es una basura)