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

 
Aleksey Nikolayev #:
Creo que ya hemos hablado de su cuantificación en su momento desde todos los puntos de vista. Sólo puedo añadir a lo que he dicho antes que me alegro por él de que le haya reportado al menos 200 dólares.

Gracias, es agradable estar feliz por mis ingresos - ¡es raro!

El artículo es introductorio - tienes razón, todo lo que escribí allí - creo, y tan claro.

La segunda parte es con moderación, es un poco más interesante. Sin embargo, por el momento he renunciado a describir mi propio método, y se acercó con una versión simplificada, que dio un pequeño efecto en las pruebas. Se describirá en la segunda parte.

Sin embargo, este es el caso cuando las nuevas ideas no ocupan más del 5% del texto.

Vuelve a leer y comentar si lo deseas.

 
Andrey Dik #:

h ttps:// www.mql5.com/ru/forum/309270
¿Tu hilo? Hoy has hecho un montón de elucubraciones filosóficas y otras fuera de tema (flud), ¿y a qué llamas tú "no respetar tus propios principios"?
Además, ¿cómo llamarían Kant y Diógenes, y quizás Aristóteles y Pitágoras, a una persona que se droga humillando, insultando y menospreciando las virtudes y logros de otra persona?

No sé a qué Diógenes te refieres, pero en el sentido de trollear todos somos niños en comparación con Diógenes de Sínope o Diógenes de Laertes.

Si miras las fechas de mi hilo, mi registro en el recurso y el de hoy, te quedará más claro. Dos años después del registro aún había esperanza de un diálogo constructivo y útil en el foro, y seis años y medio después ya casi no queda esperanza. Sólo por diversión.

 
Aleksey Vyazmikin #:

Aquí tiene, gracias. Es agradable alegrarse por mis ingresos, ¡algo poco frecuente!

El artículo es introductorio - tienes razón, todo lo que escribí allí - Creo que es lo suficientemente claro.

La segunda parte está bajo moderación, es un poco más interesante. Sin embargo, por el momento he renunciado a describir mi propio método, y se me ocurrió una versión simplificada, que dio un pequeño efecto en las pruebas. Se describirá en la segunda parte.

Sin embargo, este es el caso cuando las nuevas ideas no ocupan más del 5% del texto.

Vuelve a leer y comentar si lo deseas.

Gracias por la invitación. Naturalmente, he leído la primera parte y leeré también la segunda. Si hay alguna reflexión sobre el texto, la compartiré.
 
Forester #:

¿Por qué aleatoriamente?
Recorre todos los puntos de 1 clase y mide la distancia a todos los puntos de la otra clase, tomando la distancia mínima.
Cuando lo tengas todo, ordena, borra hasta la distancia que necesites, un par cada vez. Si el punto borrado se utilizó en otro par, encuentras un nuevo punto con una nueva distancia mínima, ordenas de nuevo y continúas.
Tal vez se te ocurra una manera mejor. Tal vez sin clasificación - sólo eliminar a la distancia requerida.

Uf, no lo estoy entendiendo bien, supongo:

  1. Construimos una matriz de distancias - longitud y anchura del mismo tamaño que el número de ejemplos en la muestra.
  2. Construimos una nueva matriz, digamos binaria, donde las unidades son aquellos puntos que cumplen el criterio "distancia mínima".
  3. Según tengo entendido, aquí tenemos que contar el número de puntos de la isla condicional (sumar las unidades de las filas), y si hay más puntos que en la isla vecina, y los puntos se reparten entre ellas, entonces asignar estos puntos al montón (cluster) donde hay más puntos de este tipo. Fijar que tal o cual punto pertenece al conjunto #n de puntos, y poner a cero estos puntos en la matriz del paso dos.
  4. Continúa poniendo a cero hasta que no queden puntos.

¿He entendido bien el prototipo del algoritmo?

Vuelvo al tema con tanto retraso, porque me fascina un poco la idea de que las hojas en los modelos CatBoost y en otros conjuntos de árboles pueden estar fuertemente correlacionadas en la activación, lo que distorsiona su confianza durante el entrenamiento, llevando a una sobreestimación del valor de la hoja para el modelo en su conjunto.

 
Aleksey Vyazmikin #:

Supongo que soy un poco lento:

  1. Construimos una matriz de distancias - longitud y anchura del mismo tamaño que el número de ejemplos de la muestra.
  2. Construimos una nueva matriz, digamos binaria, donde las unidades son los puntos que cumplen el criterio de "distancia mínima".
  3. Según tengo entendido, aquí tenemos que contar el número de puntos de la isla condicional (sumar las unidades de las filas), y si hay más puntos que en la isla vecina, y los puntos se reparten entre ellas, entonces asignar estos puntos al montón(cluster) donde hay más puntos de este tipo. Fijar que tal y tal punto pertenece al conjunto #n de puntos, y poner a cero estos puntos en la matriz del paso dos.
  4. Continúe poniendo a cero hasta que no queden más puntos.

¿He entendido bien el prototipo del algoritmo?

Vuelvo al tema con tanto retraso, porque me fascina un poco la idea de que las hojas en los modelos CatBoost y en otros conjuntos de árboles pueden estar fuertemente correlacionadas en la activación, lo que distorsiona su confianza durante el entrenamiento, llevando a una sobreestimación del valor de la hoja para el modelo en su conjunto.

La agrupación no tiene nada que ver con esto. Sólo elimina los puntos más cercanos con clases diferentes que se contradicen entre sí, es decir, el ruido. Y luego puedes entrenarlo por clustering, o por árbol - lo que quieras.

1) También puede utilizar una matriz, pero no necesariamente, pero inmediatamente encontrar cada punto de 0 clase el punto más cercano de 1 clase, es decir, obtenemos a la vez el punto 2.
3) no contar nada y no se refieren a los clusters, sólo eliminar los pares de los puntos más cercanos. Con la distancia menor que el umbral, el umbral en ese ejemplo sería 0,6. En otros problemas probablemente tendremos que seleccionarlo.
Si un punto borrado de 1 clase estaba emparejado con otro punto de 0 clase, entonces se queda sin par, tiene que encontrar un nuevo punto más cercano de 1 clase (de nuevo hacer un cálculo o usar una matriz, como sugeriste en el punto 1, si la memoria es suficiente, creo que una matriz de 1millón por 1millón no cabe en ninguna memoria, hasta 100 mil quizás).
4) no hasta que quede, sino hasta la distancia umbral. Si es muy grande, entonces sólo quedarán puntos de 1 de las clases, que inicialmente eran más.

Pero como he escrito antes, no creo que esta eliminación de ruido es una buena idea (ver https://www.mql5.com/ru/forum/86386/page3324#comment_50171043). No es que no se pueda eliminar ese ruido a la hora de hacer predicciones. El propio árbol marcará las hojas ruidosas dándoles una probabilidad de alrededor del 50%, y tomará por ejemplo las hojas no ruidosas con una probabilidad de una de las clases >80% (o las que considere oportunas).

Машинное обучение в трейдинге: теория, модели, практика и алготорговля - На рыночных данных сигналы пропадают, потому что на новых данных сигналы выходят за узкий допустимый диапазон.
Машинное обучение в трейдинге: теория, модели, практика и алготорговля - На рыночных данных сигналы пропадают, потому что на новых данных сигналы выходят за узкий допустимый диапазон.
  • 2023.10.26
  • www.mql5.com
если в работу использовать листья с высокой чистотой классов и не делить листья до 1 примера в листе. остальные как то достигли чистоты листьев например 70 - вроде неплохо. Препочитаю дерево и лист с честными 53 чистоты одного из классов
 
Forester #:
Los clusters no tienen nada que ver. Es sólo eliminar los puntos más cercanos con diferentes clases que se contradicen entre sí, es decir, el ruido. Y entonces usted puede utilizar la agrupación, o árbol - lo que quieras entrenar.
.

1) También puede utilizar una matriz, pero no necesariamente, pero inmediatamente encontrar cada punto de 0 clase el punto más cercano de 1 clase, es decir, obtenemos a la vez el punto 2.
3) no contar nada y no se refieren a los clusters, sólo eliminar los pares de los puntos más cercanos. Con la distancia menor que el umbral, el umbral en ese ejemplo sería 0,6. En otros problemas probablemente tendremos que seleccionarlo.
Si un punto borrado de 1 clase estaba emparejado con otro punto de 0 clase, entonces se queda sin par, tiene que encontrar un nuevo punto más cercano de 1 clase (de nuevo hacer un cálculo o usar una matriz, como sugeriste en el punto 1, si la memoria es suficiente, creo que una matriz de 1millón por 1millón no cabe en ninguna memoria, hasta 100 mil quizás).
4) no hasta que quede, sino hasta la distancia umbral. Si es muy grande, entonces sólo quedarán puntos de 1 de las clases, que inicialmente eran más.

Pero como he escrito antes, no creo que esta eliminación de ruido es una buena idea (ver https://www.mql5.com/ru/forum/86386/page3324#comment_50171043). No es que no se pueda eliminar ese ruido a la hora de hacer predicciones. El propio árbol marcará las hojas ruidosas dándoles una probabilidad de alrededor del 50%, y tomará por ejemplo las hojas no ruidosas con una probabilidad de una de las clases >80% (o las que considere oportunas).

Todavía no me entra en la cabeza. Bueno todo ocurre en un espacio - en la métrica de un predictor, pero ¿cómo tener en cuenta los demás?

En cuanto a qué hacer a la hora de predecir - estaba pensando en usar dos modelos - uno que detecte lo que se ha caído o confirme que los datos están en la región de "aglomeración", y otro que ya trabaje sobre lo que queda.

 
Aleksey Vyazmikin #:

Todavía no me hago a la idea. Bueno, todo ocurre en un espacio, en la métrica de un predictor, pero ¿cómo tener en cuenta los demás?

En cuanto a lo que hay que hacer a la hora de predecir, estaba pensando en utilizar dos modelos: uno detecta lo que se ha eliminado o confirma que los datos están en la zona de "aglomeración", y el otro ya trabaja sobre lo que queda.

https://www.mql5.com/ru/articles/9138

Nadie se ha preocupado desde hace un año

He escrito una docena o veintena de algoritmos como este, algunos están bien establecidos. El del artículo no es el mejor en cuanto a estabilidad de resultados, el primer pancake.

así que no hay nada que discutir, porque no hay nada mejor todavía.


Метамодели в машинном обучении и трейдинге: Оригинальный тайминг торговых приказов
Метамодели в машинном обучении и трейдинге: Оригинальный тайминг торговых приказов
  • www.mql5.com
Метамодели в машинном обучении: Автоматическое создание торговых систем практически без участия человека — Модель сама принимает решение как торговать и когда торговать.
 
Soy nuevo en ML. Estoy trabajando en varios modelos. Y en la última semana ha aparecido un problema. Ninguno de los modelos se guarda en ONNX(((. ¿Quién se ha encontrado con este problema?
WARNING:tf2onnx.tf_loader:Could not search for non-variable resources. Concrete function internal representation may have changed.
ERROR:tf2onnx.tf_utils:pass1 convert failed for name: "model_3/lstm_4/PartitionedCall/while"
op: "StatelessWhile"
input: "model_3/lstm_4/PartitionedCall/while/loop_counter"
input: "model_3/lstm_4/PartitionedCall/while/maximum_iterations"
input: "model_3/lstm_4/PartitionedCall/time"
input: "model_3/lstm_4/PartitionedCall/TensorArrayV2_1"
input: "model_3/lstm_4/zeros"
input: "model_3/lstm_4/zeros_1"
input: "model_3/lstm_4/PartitionedCall/strided_slice"
input: "model_3/lstm_4/PartitionedCall/TensorArrayUnstack/TensorListFromTensor"
input: "Func/model_3/lstm_4/PartitionedCall/input/_3"
input: "Func/model_3/lstm_4/PartitionedCall/input/_4"
input: "Func/model_3/lstm_4/PartitionedCall/input/_5"
attr {
  key: "T"
  value {
    list {
      type: DT_INT32
      type: DT_INT32
      type: DT_INT32
      type: DT_VARIANT
      type: DT_FLOAT
      type: DT_FLOAT
      type: DT_INT32
      type: DT_VARIANT
      type: DT_FLOAT
      type: DT_FLOAT
      type: DT_FLOAT
    }
  }
}
attr {
  key: "_lower_using_switch_merge"
  value {
    b: false
  }
}
attr {
  key: "_num_original_outputs"
  value {
    i: 11
  }
}
attr {
  key: "_read_only_resource_inputs"
  value {
    list {
    }
  }
}
attr {
  key: "body"
  value {
    func {
      name: "while_body_149241"
    }
  }
}
attr {
  key: "cond"
  value {
    func {
      name: "while_cond_149240"
    }
  }
}
attr {
  key: "output_shapes"
  value {
    list {
      shape {
      }
      shape {
      }
      shape {
      }
      shape {
      }
      shape {
        dim {
          size: -1
        }
        dim {
          size: 128
        }
      }
      shape {
        dim {
          size: -1
        }
        dim {
          size: 128
        }
      }
      shape {
      }
      shape {
      }
      shape {
        dim {
          size: 1
        }
        dim {
          size: 512
        }
      }
      shape {
        dim {
          size: 128
        }
        dim {
          size: 512
        }
      }
      shape {
        dim {
          size: 512
        }
      }
    }
  }
}
attr {
  key: "parallel_iterations"
  value {
    i: 32
  }
}
, ex=Could not infer attribute `_read_only_resource_inputs` type from empty iterator
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-7-50 ef5b7ad3f4> in <cell line: 87>()
     85 
     86 # Преобразовать Keras-модель в ONNX формат
---> 87 onnx_model = tf2onnx.convert.from_keras(model)
     88 
     89 # Сохранить модель в формате ONNX

8 frames
/usr/local/lib/python3.10/dist-packages/onnx/helper.py in make_attribute(key, value, doc_string, attr_type)
    874         value = list(value)
    875         if len(value) == 0 and attr_type is None:
--> 876             raise ValueError(
    877                 f"Could not infer attribute `{key}` type from empty iterator"
    878             )

ValueError: Could not infer attribute `_read_only_resource_inputs` type from empty iterator
 
Aleksey Vyazmikin #:

Todavía no me hago a la idea. Bueno, todo ocurre en un espacio, en la métrica de un predictor, pero ¿cómo tener en cuenta los demás?

En cuanto a lo que hay que hacer a la hora de predecir, estaba pensando en utilizar dos modelos: uno detecta lo que se ha eliminado o confirma que los datos están en la zona de "aglomeración", y el otro ya trabaja sobre lo que queda.

En el ejemplo hay 2 predictores, es decir, cambiamos la distancia en el espacio bidimensional (calculamos la hipotenusa). Si habrá 5000 signos, entonces usted va a medir la distancia en el espacio de 5000 dimensiones (cómo medir - ver el código k-means en Algibe, allí sólo esta es la tarea principal - para medir distancias, tomarlo como base).
Se parece a la raíz de la suma de cuadrados de catetos en todos los espacios https://wiki.loginom.ru/articles/euclid-distance.html.

Si realmente lo vas a hacer - no te olvides de ajustar los predictores, para que por ejemplo volúmenes de 1...100000 no se traguen deltas de precios de 0,00001...0,01000 en los cálculos.

¿Cómo detectarlo? Esa es la cuestión. Sobre todo en datos de mercado, donde no habrá una separación tan clara de la zona ruidosa como en el ejemplo. Todo será ruidoso, entre el 90% y el 99%.

Puede que sea más fácil utilizar paquetes ya preparados para eliminar las líneas con ruido, tal vez tengan un detector....

 
Maxim Dmitrievsky #:

https://www.mql5.com/ru/articles/9138

Hace un año que nadie se preocupa

He escrito una docena o una veintena de tales algoritmos, algunos de ellos han demostrado ser bien. El artículo no es el mejor en términos de estabilidad de los resultados, el primer panqueque.

así que no hay nada que discutir, porque no hay nada mejor todavía.


Bueno, ¿por qué no hay caso - Creo que python aún no está muy extendida entre los comerciantes, por lo que la gente se mueve a la discusión activa.
Voy a probar su enfoque más adelante en mi muestra.

¿Has probado el método out-of-the-box de CatBoost?