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

 
Aleksey Nikolayev #:

1) ¿Se utiliza un modelo con un número no fijo de características para sí mismo? (Aparentemente sí.)

2) Pida una forma general de una función recursiva que asigne un número a una lista numérica de longitud arbitraria

1 sobre sí mismo es de alguna manera reacios a responder, pero hay un transformador allí, así que sí

2 una forma general de una función recursiva que mapea un número a una lista numérica de longitud arbitraria

Una función recursiva es una función que se llama a sí misma como parte de su ejecución. He aquí un ejemplo general de una función recursiva que asigna un número a una lista numérica de longitud arbitraria:

def map_to_list(n: int, lst: List[int]) -> List[int]:
  if n == 0:
    return lst
  else:
    lst.append(n)
    return map_to_list(n-1, lst)

Esta función toma como entrada un número entero n y una lista lst. A continuación, comprueba si n es igual a 0. Si lo es, la función devuelve el número n. Si lo es, la función devuelve la lista lst . Si n no es igual a 0, la función añade n al final de la lista lst y luego se llama a sí misma con la lst modificada y el valor n-1 . Este proceso continúa hasta que n es igual a 0, momento en el que la función devuelve la versión final de la lista.

Éste es sólo un ejemplo de cómo puede utilizarse una función recursiva para asignar un número a una lista. Hay muchas otras formas de escribir una función de este tipo, y la implementación específica dependerá de los requisitos y restricciones concretos del problema que se intente resolver.


- Mostrar este código en lenguaje R

Aquí está la función recursiva del ejemplo anterior, escrita en R:

map_to_list <- function(n, lst) {
  if (n == 0) {
    return(lst)
  } else {
    lst <- c(lst, n)
    return(map_to_list(n-1, lst))
  }
}

Esta función es similar a la del ejemplo anterior, pero utiliza sintaxis y funciones de R. La sentencia if se utiliza para comprobar si n es igual a 0, y la función return se utiliza para devolver la versión final de la lista. La función c se utiliza para añadir n al final de la lista lst .

Como antes, esto es sólo un ejemplo de cómo una función recursiva se puede utilizar para asignar un número a una lista. La implementación específica dependerá de los requisitos y restricciones concretos del problema que se intente resolver.

 
Maxim Dmitrievsky #:

El hash de características funciona aplicando una función hash a las características del conjunto de características y utilizando los valores hash como índices en un vector de características de tamaño fijo. Esto permite asignar un conjunto de características de longitud variable a un vector de tamaño fijo, que puede utilizarse como entrada para un modelo de aprendizaje automático.

Veamos qué variantes de funciones hash se utilizan para vectores numéricos.

 
Maxim Dmitrievsky #:

Si el número de características es siempre diferente, puede resultar difícil aplicar los algoritmos tradicionales de aprendizaje automático que esperan un vector de características de tamaño fijo como entrada. Una solución a este problema es utilizar un método llamado "feature hashing", que permite representar un conjunto de características de longitud variable como un vector de características de tamaño fijo.

Para ello, se aplica una función hash a las características del conjunto y se utilizan los valores hash como índices en un vector de características de tamaño fijo. Esto permite asignar un conjunto de características de longitud variable a un vector de tamaño fijo, que puede utilizarse como entrada para un modelo de aprendizaje automático.

Por ejemplo, supongamos que tenemos un conjunto de datos con un número variable de características y queremos utilizar la regresión logística para clasificar los datos. Puede aplicar el hash de características a las características del conjunto de datos, obteniendo un vector de características de tamaño fijo que puede utilizarse como entrada para el modelo de regresión logística.

En general, el hashing de características es una técnica útil para manejar conjuntos de datos con un número variable de características, y puede utilizarse en combinación con algoritmos de aprendizaje automático como la regresión logística para resolver problemas de clasificación.

upd


Para datos con un número variable de características, se pueden utilizar algunas representaciones:

  1. Vectores de características de tamaño fijo: Como ya se ha mencionado, puede utilizar técnicas de selección de características para seleccionar un número fijo de características de sus datos y representarlas como un vector de características.

  2. Vectores de características dispersos: en lugar de utilizar un vector de características denso, puede utilizar un vector de características disperso, que sólo incluye un subconjunto de las características posibles. Esto puede ser útil si tiene un gran número de características posibles y sólo un pequeño número de ellas están presentes en un caso dado.

  3. Grafo de datos: puede representar sus datos como un grafo, en el que cada instancia se representa como un nodo y las aristas entre los nodos representan las relaciones entre las instancias. Esto puede ser útil si se utiliza un modelo de aprendizaje automático diseñado para manejar datos de grafos, como una red convolucional de grafos.

Una vez más, la mejor representación dependerá de los requisitos y limitaciones específicos de su problema. Es importante tener en cuenta las características de los datos y los objetivos del proyecto a la hora de decidir qué representación se adapta mejor a sus necesidades.

 
Aleksey Nikolayev #:

Que diga entonces qué variantes de funciones hash se utilizan para los vectores numéricos.

He aquí una lista de algunas funciones hash comunes que pueden utilizarse para mapear enteros u otros tipos de datos a listas u otras estructuras de datos:

  1. Hashing modular: El hashing modular es una función hash simple que mapea un entero u otro tipo de datos a una lista u otra estructura de datos tomando el módulo del valor a diferentes potencias de un número primo.

  2. Hashing polinómico: El hashing polinómico es una función hash que asigna un número entero u otro tipo de datos a una lista u otra estructura de datos evaluando un polinomio en un punto específico. El polinomio está definido por el valor y un número primo.

  3. Hashing universal: El hashing universal es una función hash que asigna un número entero u otro tipo de datos a una lista u otra estructura de datos utilizando una función hash generada aleatoriamente. La función hash se elige de entre una familia de funciones hash que tienen una baja probabilidad de colisión.

  4. Tablas hash: las tablas hash son estructuras de datos que utilizan una función hash para asignar claves a valores. Pueden utilizarse para asignar un número entero u otro tipo de datos a una lista u otra estructura de datos.

  5. Mapas hash: los mapas hash son estructuras de datos que utilizan una función hash para asignar claves a valores. Pueden utilizarse para asignar un número entero u otro tipo de datos a una lista u otra estructura de datos.

  6. Conjuntos hash: Los conjuntos hash son estructuras de datos que utilizan una función hash para almacenar un conjunto de valores. Pueden utilizarse para asignar un entero u otro tipo de datos a una lista u otra estructura de datos.

Estos son sólo algunos ejemplos de funciones hash y estructuras de datos que pueden utilizarse para asignar números enteros u otros tipos de datos a listas u otras estructuras de datos. La función hash o estructura de datos que elijas dependerá de las características de tus datos.


Aquí hay ejemplos de las funciones hash modular, hash polinómico, hash universal, tabla hash, mapa hash y conjunto hash en R:

modular_hash <- function(n, length, p) {
  lst <- vector("numeric", length)
  for (i in 1:length) {
    lst[i] <- n %% p^(i+1)
  }
  lst
}

polynomial_hash <- function(n, length, p) {
  lst <- vector("numeric", length)
  for (i in 1:length) {
    lst[i] <- sum(n * p^(i-1)) %% p^(length+1)
  }
  lst
}

universal_hash <- function(n, length, p) {
  a <- sample(p^length, length, replace=TRUE)
  b <- sample(p^length, length, replace=TRUE)
  lst <- vector("numeric", length)
  for (i in 1:length) {
    lst[i] <- sum(a[i] * n + b[i]) %% p^(length+1)
  }
  lst
}

hash_table <- function(n, length, p) {
  lst <- vector("list", p^length)
 
Maxim Dmitrievsky #:

2 una vista general de una función recursiva que asigna un número a una lista numérica de longitud arbitraria

Al contrario - la entrada es una lista, la salida es un número. Por ejemplo, hacemos una previsión basada en las cotizaciones).

A continuación, pregúntese qué algoritmos de MO pueden utilizarse para construir tales funciones.

 
Aleksey Nikolayev #:

Al contrario - la entrada es una lista, la salida es un número. Como, usamos las comillas para hacer una predicción)

A continuación, pregunte qué algoritmos MO se pueden utilizar para construir tales funciones.

Si quieres hacer un hash de una lista de diferente longitud a un número entero, puedes usar una función hash que mapee la lista a un número entero. Una forma de hacerlo es utilizar una función hash modular, que mapea la lista a un entero tomando el módulo de la suma de la suma de los elementos de la lista a diferentes potencias de un número primo.

def modular_hash(lst: List[int], p: int) -> int:
  h = 0
  for i, x in enumerate(lst):
    h += x * p**i
  return h % M

Esta función toma una lista lst y un número primo p como entrada, y devuelve un valor hash entero sumando los elementos de la lista a diferentes potencias de p y tomando el módulo del resultado.

Por ejemplo, si llamamos a modular_hash([1, 2, 3], 2) , la función devolverá 7 .

También puedes utilizar un método similar en R. Este es el código de una función hash modular en R que asigna una lista a un número entero:

modular_hash <- function(lst, p, M) {
  h <- 0
  for (i in 1:length(lst)) {
    h <- h + lst[i] * p^(i-1)
  }
  h %% M
}
polynomial_hash <- function(lst, p, M) {
  h <- 0
  for (i in 1:length(lst)) {
    h <- h + lst[i] * p^(i-1)
  }
  h %% M
}

universal_hash <- function(lst, p, M) {
  a <- sample(p^length(lst), length(lst), replace=TRUE)
  b <- sample(p^length(lst), length(lst), replace=TRUE)
  h <- 0
  for (i in 1:length(lst)) {
    h <- h + a[i] * lst[i] + b[i]
  }
  h %% M
}


Las funciones hash no suelen generarse utilizando algoritmos de aprendizaje automático. Más bien, se diseñan basándose en las características de los datos a los que se aplica el hash y en los requisitos de la aplicación.

Dicho esto, los algoritmos de aprendizaje automático se pueden utilizar para evaluar el rendimiento de diferentes funciones hash, o para optimizar los parámetros de una función hash para una tarea específica. Por ejemplo, se puede utilizar un algoritmo de aprendizaje automático para optimizar el número primo utilizado en una función hash modular, o para elegir los coeficientes de una función hash polinómica que funcione bien en un conjunto de datos concreto.

En general, aunque los algoritmos de aprendizaje automático no se suelen utilizar para construir funciones hash, sí se pueden utilizar para evaluar y optimizar el rendimiento de las funciones hash en determinadas aplicaciones.

 
-

y sin embargo, ¿cómo puedo construir una función hash similar utilizando un algoritmo de aprendizaje automático


*

no es habitual construir una función hash utilizando un algoritmo de aprendizaje automático, ya que el objetivo principal de una función hash es asignar datos a una representación de tamaño fijo de forma que se preserve la estructura de los datos tanto como sea posible. Los algoritmos de aprendizaje automático, por otro lado, se utilizan normalmente para aprender patrones o hacer predicciones basadas en datos, más que para generar representaciones de tamaño fijo de los datos.

Sin embargo, si aún quieres explorar la posibilidad de usar un algoritmo de aprendizaje automático para construir una función hash, un enfoque que podrías probar es usar un algoritmo de aprendizaje no supervisado para aprender una representación compacta de los datos, y luego usar esa representación como la función hash.

Por ejemplo, se podría utilizar un autoencoder o un algoritmo de clustering para aprender una representación compacta de los datos, y luego utilizar esa representación como función hash. Esto implicaría entrenar el modelo de aprendizaje automático en los datos y, a continuación, utilizar el modelo entrenado para generar los valores hash para los nuevos datos.

En general, aunque no es habitual construir una función hash utilizando un algoritmo de aprendizaje automático, es posible utilizar el aprendizaje automático para aprender una representación compacta de los datos que podría utilizarse como función hash en determinadas aplicaciones.


 
Maxim Dmitrievsky #:

A continuación se muestra una lista de algunas funciones hash comunes que se pueden utilizar para asignar números enteros u otros tipos de datos a listas u otras estructuras de datos:

Pensé que prometía mapear un vector de tamaño arbitrario a un vector de tamaño fijo especificado, ¿pero aquí mapea un número a un vector?

Todo es complicado e incomprensible) La vida era mucho más sencilla sin GPT) Lo pasaremos mal en la era de la IA)

 
Aleksey Nikolayev #:

Creo que prometía mapear un vector de tamaño arbitrario en un vector de tamaño fijo especificado, pero aquí mapea un número en un vector?

Todo es complicado e incomprensible) La vida era mucho más fácil sin GPT) Lo pasaremos mal en la era de la IA)

He escrito más sobre vector a número.

¿Vector a vector fijo?

 

Si quieres convertir una lista de longitud variable en una lista de longitud fija, puedes utilizar una función hash que transforme la lista en una lista de tamaño fijo. Una forma de hacerlo es utilizar una técnica llamada "feature hashing", que permite representar una lista de longitud variable como una lista de tamaño fijo aplicando una función hash a los elementos de la lista y utilizando los valores hash como índices en la lista de tamaño fijo.

He aquí un ejemplo de función hash en Python:

def feature_hash(lst: List[int], n: int) -> List[int]:
  h = [0] * n
  for x in lst:
    h[hash(x) % n] += 1
  return h

Esta función toma una lista lst y una longitud de lista deseada n como entrada, y devuelve una lista de tamaño fijo aplicando una función hash a los elementos de lst y utilizando los valores hash como índices en la lista de tamaño fijo. Los valores de cada índice se incrementan para contar el número de apariciones de cada elemento en la lista original.

Por ejemplo, si llamamos a feature_hash([1, 2, 3], 5) , la función devolverá [0, 1, 1, 1, 1, 0] .

También puede utilizar un enfoque similar en R. Aquí está el código para una función hash de características en R:

feature_hash <- function(lst, n) {
  h <- rep(0, n)
  for (x in lst) {
    h[as.integer(x) %% n] <- h[as.integer(x) %% n] + 1
  }
  h
}
Razón de la queja: