El problema es que la normalización es una causa perdida.
Déjeme explicarle. Hay algunos datos A, B, C...
Son diferentes en cuanto a su importancia, etc. Todo el mundo (google) dice que la normalización debe hacerse por columnas (A-A-A, B-B-B, C-C-C) y no por filas. Esto es lógicamente comprensible.
Pero cuando aparecen nuevos datos para la "predicción" ¿CÓMO normalizarlos si es sólo una fila? ¿Y cualquier término de esa fila puede superar la normalización en los datos de entrenamiento y de prueba?
¡Y la normalización por cadenas no tiene ningún efecto!
En realidad, después de comprobar estos matices, tuve este "grito del alma" ))))
Durante la normalización se guardan los coeficientes. Para evitar que se salgan del rango, debemos tomar una gran parte de la historia y normalizarla, para luego aplicar estos coeficientes a los nuevos datos
en datos no normalizados, la red no aprenderá, o lo hará de forma deficiente. Esa es su naturaleza.
los coeficientes se conservan durante la normalización. Para evitar que se salgan del rango, tenemos que tomar una gran parte de la historia y normalizarla, y luego aplicar estos coeficientes a los nuevos datos
No aprenderá de los datos no normalizados, o aprenderá mal. Esa es su peculiaridad.
Todo esto es lógico y comprensible, ¡pero la red se está formando! Además hay información de que usar datos no normalizados es más complicado para el aprendizaje, pero no es crítico.
¿Y cómo no salirse de las gamas? Por ejemplo, hay un precio. Hay un rango de precios en los datos de entrenamiento y de prueba: toma 123-324. Pero el precio sube a 421. ¿Cómo entra en ese mismo rango?
Pero nos estamos alejando del meollo de la cuestión: ¿por qué, con un entrenamiento y unas pruebas normales, la predicción es algo?
if num_check_rows > r or num_check_rows == 0:
num_check_rows = r
model = tf.keras.models.Sequential()
model = tf.keras.models.load_model(flname)
model.summary()
for i in range(num_check_rows):
b = model.predict(test_data[i])
a = b[0]
x = a[0]
y = a[1]
x = format(x, '.5f')
y = format(y, '.5f')
print(f'ожидалось {test_verification[i]} >>> получили [{x} {y}]')
jura
Model: "sequential_16"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
dense (Dense) (None, 20) 820
_________________________________________________________________
dropout (Dropout) (None, 20) 0
_________________________________________________________________
dense_1 (Dense) (None, 10) 210
_________________________________________________________________
dense_2 (Dense) (None, 2) 22
=================================================================
Total params: 1,052
Trainable params: 1,052
Non-trainable params: 0
_________________________________________________________________
Traceback (most recent call last):
File "M:/PythonProgs/PycharmProjects/NNets/ТестерНС.py", line 79, in <module>
b = model.predict(test_data[i])
.....
ValueError: Error when checking input: expected dense_input to have shape (40,) but got array with shape (1,)
Después de haber buscado en la web y haber mirado el artículo, en base al cual escribí mi código, llegué a la decepcionante conclusión de que todo autor de cualquier artículo "para principiantes" está obligado a olvidar mencionar algo importante...
Y aquí resultó queStandardScaler se utiliza en el entrenamiento de la red.Pero el artículo no dice ni una palabra sobre qué es y por qué es necesario.
Además,StandardScaler es estandarización. Además, quiero saber cómo puedo implementar la misma normalización para un solo vector de entrada e incluso menos.
Y lo que es peor, ¡la "normalización" se lleva a cabo por columnas del conjunto de datos! No, bueno, para las estadísticas, está bien. Pero para los pronósticos, es "***hole". Cuando llegan nuevos datos, ¿tengo que volver a entrenar la red sólo para que los nuevos datos estén en el rango de "normalización"?
¡Mentira!
Para cuando esta "nueva red" esté formada, la situación puede haber cambiado ya drásticamente. Entonces, ¿cuál es el puto objetivo de esto?
Hasta aquí Python con un montón de bibliotecas "afiladas" ....
Le agradecería mucho que me hiciera cambiar de opinión.
P.D. Sólo quiero creer que no he perdido mi tiempo en Python para nada.
Después de haber buscado en la web y haber mirado el artículo, en base al cual escribí mi código, llegué a la decepcionante conclusión de que todo autor de cualquier artículo "para principiantes" está obligado a olvidar mencionar algo importante...
Y aquí resultó queStandardScaler se utiliza en el entrenamiento de la red.Pero el artículo no dice ni una palabra sobre qué es y por qué es necesario.
Además,StandardScaler es una estandarización. Además, quiero saber cómo puedo implementar la misma normalización para un solo vector de entrada e incluso menos.
Y lo que es peor, ¡la "normalización" se realiza por columnas del conjunto de datos! No, bueno, para las estadísticas, está bien. Pero para los pronósticos, es "***hole". Cuando llegan nuevos datos, ¿tengo que volver a entrenar la red sólo para que los nuevos datos estén en el rango de "normalización"?
¡Mentira!
Para cuando esta "nueva red" esté formada, la situación puede haber cambiado ya drásticamente. Entonces, ¿cuál es el puto objetivo de esto?
Hasta aquí Python con un montón de bibliotecas "afiladas" ....
Le agradecería mucho que me hiciera cambiar de opinión.
P.D. Sólo quiero creer que no he perdido mi tiempo en Python para nada.
Tal vez porque es sólo el comienzo.
Pero recientemente me he interesado por las capacidades de python para mt. Y sobre si es posible hacerlo, nadie ha respondido. Además, no funciona en mql4. Decidí no perder el tiempo (quizá la situación cambie a mejor después de algún tiempo).
Después de obtener un poco más de conocimiento del mismo google, llegué a conclusiones:
Los datos deben ser "equilibrados". Por ejemplo, si de 1000 datos de entrada sólo aparecen señales en 100, necesitamos al menos 1000 - ((1000 - 100) /3) = 700 datos "vacíos" (que no forman señales) para eliminarlos.
El resto debe ser preferentemente "normalizado". Llévalo al rango 0-1. Pero aquí hay una dificultad evidente para elegir el "rango" de normalización. ¿Qué considerar como mínimo y qué considerar como máximo? Todavía no lo sé. Normalizo cada matriz de entrada sólo por su rango...
Bien - mal preparado....
¿Dónde puedo leer sobre esto? Preparo los datos para la NS según mi percepción de lo que es importante y lo que no.
Una cosa que me desconcierta es si el mismo tipo de datos debe recogerse "en un montón" o añadirse a medida que van llegando.
¿De qué lado deben recogerse los datos: de los "más viejos" o de los "más nuevos"?
Bien - mal preparado....
¿Dónde puedo leer sobre esto? Preparo los datos para la NS según mi percepción de lo que es importante y lo que no.
Una cosa que me desconcierta es si el mismo tipo de datos debe recogerse "en un montón" o añadirse a medida que van llegando.
¿Desde qué lado deben recogerse los datos: desde el "más viejo" o desde el "más nuevo"?
En el hilo de MoD pregunta, alguien te responderá. Este es el tema del conector
El problema es que la normalización es una causa perdida.
Déjeme explicarle. Hay algunos datos A, B, C...
Son diferentes en cuanto a su importancia, etc. Todo el mundo (google) dice que la normalización debe hacerse por columnas (A-A-A, B-B-B, C-C-C) y no por filas. Esto es lógicamente comprensible.
Pero cuando aparecen nuevos datos para la "predicción" ¿CÓMO normalizarlos si es sólo una fila? ¿Y cualquier término de esa fila puede superar la normalización en los datos de entrenamiento y de prueba?
¡Y la normalización por cadenas no tiene ningún efecto!
En realidad, después de comprobar estos matices, tuve este "grito del alma" ))))
Durante la normalización se guardan los coeficientes. Para evitar que se salgan del rango, debemos tomar una gran parte de la historia y normalizarla, para luego aplicar estos coeficientes a los nuevos datos
en datos no normalizados, la red no aprenderá, o lo hará de forma deficiente. Esa es su naturaleza.los coeficientes se conservan durante la normalización. Para evitar que se salgan del rango, tenemos que tomar una gran parte de la historia y normalizarla, y luego aplicar estos coeficientes a los nuevos datos
No aprenderá de los datos no normalizados, o aprenderá mal. Esa es su peculiaridad.Todo esto es lógico y comprensible, ¡pero la red se está formando! Además hay información de que usar datos no normalizados es más complicado para el aprendizaje, pero no es crítico.
¿Y cómo no salirse de las gamas? Por ejemplo, hay un precio. Hay un rango de precios en los datos de entrenamiento y de prueba: toma 123-324. Pero el precio sube a 421. ¿Cómo entra en ese mismo rango?
Pero nos estamos alejando del meollo de la cuestión: ¿por qué, con un entrenamiento y unas pruebas normales, la predicción es algo?
Queridos amigos, una vez más mis esquís no se mueven... Estoy pidiendo ayuda.
Decidí esbozar un pequeño probador para comprobar la predicción de la red entrenada.
Todo está bien aquí.
Y lo siguiente que sabes...
jura
¿Qué pasa?
Después de haber buscado en la web y haber mirado el artículo, en base al cual escribí mi código, llegué a la decepcionante conclusión de que todo autor de cualquier artículo "para principiantes" está obligado a olvidar mencionar algo importante...
Y aquí resultó queStandardScaler se utiliza en el entrenamiento de la red.Pero el artículo no dice ni una palabra sobre qué es y por qué es necesario.
Además,StandardScaler es estandarización. Además, quiero saber cómo puedo implementar la misma normalización para un solo vector de entrada e incluso menos.
Y lo que es peor, ¡la "normalización" se lleva a cabo por columnas del conjunto de datos! No, bueno, para las estadísticas, está bien. Pero para los pronósticos, es "***hole". Cuando llegan nuevos datos, ¿tengo que volver a entrenar la red sólo para que los nuevos datos estén en el rango de "normalización"?
¡Mentira!
Para cuando esta "nueva red" esté formada, la situación puede haber cambiado ya drásticamente. Entonces, ¿cuál es el puto objetivo de esto?
Hasta aquí Python con un montón de bibliotecas "afiladas" ....
Le agradecería mucho que me hiciera cambiar de opinión.
P.D. Sólo quiero creer que no he perdido mi tiempo en Python para nada.
Después de haber buscado en la web y haber mirado el artículo, en base al cual escribí mi código, llegué a la decepcionante conclusión de que todo autor de cualquier artículo "para principiantes" está obligado a olvidar mencionar algo importante...
Y aquí resultó queStandardScaler se utiliza en el entrenamiento de la red.Pero el artículo no dice ni una palabra sobre qué es y por qué es necesario.
Además,StandardScaler es una estandarización. Además, quiero saber cómo puedo implementar la misma normalización para un solo vector de entrada e incluso menos.
Y lo que es peor, ¡la "normalización" se realiza por columnas del conjunto de datos! No, bueno, para las estadísticas, está bien. Pero para los pronósticos, es "***hole". Cuando llegan nuevos datos, ¿tengo que volver a entrenar la red sólo para que los nuevos datos estén en el rango de "normalización"?
¡Mentira!
Para cuando esta "nueva red" esté formada, la situación puede haber cambiado ya drásticamente. Entonces, ¿cuál es el puto objetivo de esto?
Hasta aquí Python con un montón de bibliotecas "afiladas" ....
Le agradecería mucho que me hiciera cambiar de opinión.
P.D. Sólo quiero creer que no he perdido mi tiempo en Python para nada.
(Apenas puedo distinguirlo. )))
Pero ahora tengo otra pregunta (por la que empecé todo):
Cuando entrené la red obtuve los siguientes resultados
En otras palabras, ¡el resultado es una ganga!
He puesto en marcha mi probador. Tengo estos resultados
Bien, dime exactamente dónde puedes ver que la red está entrenada para obtener un 98% de resultados correctos????
Hola, leyendo algunas páginas de la discusión no encontré nada concreto sobre la siguiente pregunta :
- ¿Hay algo que funcione actualmente como los paquetes de MetaTraderR o MetaTrader5 para la integración de MT y R?
Saludos
Lo siento, continuaré mi epopeya... )))
Después de obtener un poco más de conocimiento del mismo google, llegué a conclusiones:
Cumpliendo estas dos condiciones, conseguí una notable reducción de la curva de aprendizaje de la red. Además, descubrí que
Además, había otra pregunta: ¿cuál debería ser la respuesta de la red?