Aprendizado de máquina no trading: teoria, prática, negociação e não só - página 2876

 
Maxim Dmitrievsky #:
Vou tentar fazer isso mais tarde. Se houver mais opções de perguntas, informe-as :)

1) O modelo com um número não fixo de recursos é usado para ele mesmo? (Acho que sim).

2) Solicite uma forma geral de uma função recursiva que mapeie um número para uma lista numérica de comprimento arbitrário.

 
Aleksey Nikolayev #:

Talvez seja possível pedir um exemplo simples de uso da regressão logística em uma tarefa de classificação com um número variável de recursos?

Se o número de recursos for sempre diferente, pode ser difícil aplicar os algoritmos tradicionais de aprendizado de máquina que esperam um vetor de recursos de tamanho fixo como entrada. Uma solução para esse problema é usar um método chamado "hashing de recursos", que permite representar um conjunto de recursos de comprimento variável como um vetor de recursos de tamanho fixo.

O hashing de recursos funciona aplicando uma função de hash aos recursos do conjunto de recursos e usando os valores de hash como índices em um vetor de recursos de tamanho fixo. Isso permite que você mapeie um conjunto de recursos de comprimento variável para um vetor de tamanho fixo, que pode ser usado como entrada para um modelo de aprendizado de máquina.

Por exemplo, suponha que você tenha um conjunto de dados com um número variável de recursos e queira usar a regressão logística para classificar os dados. Você pode aplicar o hashing de recursos aos recursos do conjunto de dados, resultando em um vetor de recursos de tamanho fixo que pode ser usado como entrada para o modelo de regressão logística.

Em geral, o hashing de recursos é uma técnica útil para lidar com conjuntos de dados com um número variável de recursos e pode ser usado em combinação com algoritmos de aprendizado de máquina, como a regressão logística, para resolver problemas de classificação.

 
Aleksey Nikolayev #:

1) Um modelo com um número não fixo de recursos é usado para si mesmo? (Aparentemente sim.)

2) Solicite uma forma geral de uma função recursiva que mapeie um número para uma lista numérica de comprimento arbitrário

1 sobre si mesmo é, de certa forma, relutante em responder, mas há um transformador lá, então sim

2 uma visão geral de uma função recursiva que mapeia um número em uma lista numérica de tamanho arbit rário

Uma função recursiva é uma função que chama a si mesma como parte de sua execução. Aqui está um exemplo geral de uma função recursiva que mapeia um número para uma lista numérica de comprimento arbitrário:

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)

Essa função recebe um número inteiro n e uma lista lst como entrada. Em seguida, ela verifica se n é igual a 0. Se for, a função retorna a lista lst . Se n não for igual a 0, a função acrescenta n ao final da lista lst e, em seguida, chama a si mesma com a lst modificada e o valor n-1 . Esse processo continua até que n seja igual a 0, momento em que a função retorna a versão final da lista.

Esse é apenas um exemplo de como uma função recursiva pode ser usada para mapear um número para uma lista. Há muitas outras maneiras de escrever uma função desse tipo, e a implementação específica dependerá dos requisitos e restrições específicos do problema que você está tentando resolver.


- Mostre esse código na linguagem R

Aqui está a função recursiva do exemplo anterior, escrita em R:

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

Essa função é semelhante ao exemplo anterior, mas usa a sintaxe e as funções do R. A instrução if é usada para verificar se n é igual a 0, e a função return é usada para retornar a versão final da lista. A função c é usada para acrescentar n ao final da lista lst .

Como antes, esse é apenas um exemplo de como uma função recursiva pode ser usada para mapear um número para uma lista. A implementação específica dependerá dos requisitos e restrições específicos do problema que você está tentando resolver.

 
Maxim Dmitrievsky #:

O hashing de recursos funciona aplicando uma função de hash aos recursos do conjunto de recursos e usando os valores de hash como índices em um vetor de recursos de tamanho fixo. Isso permite mapear um conjunto de recursos de comprimento variável para um vetor de tamanho fixo, que pode ser usado como entrada para um modelo de aprendizado de máquina.

Deixe que ele lhe diga quais variantes de funções de hash são usadas para vetores numéricos.

 
Maxim Dmitrievsky #:

Se o número de recursos for sempre diferente, pode ser difícil aplicar os algoritmos tradicionais de aprendizado de máquina que esperam um vetor de recursos de tamanho fixo como entrada. Uma solução para esse problema é usar um método chamado "hashing de recursos", que permite representar um conjunto de recursos de comprimento variável como um vetor de recursos de tamanho fixo.

O hashing de recursos funciona aplicando uma função de hash aos recursos do conjunto de recursos e usando os valores de hash como índices em um vetor de recursos de tamanho fixo. Isso permite mapear um conjunto de recursos de comprimento variável para um vetor de tamanho fixo, que pode ser usado como entrada para um modelo de aprendizado de máquina.

Por exemplo, suponha que você tenha um conjunto de dados com um número variável de recursos e queira usar a regressão logística para classificar os dados. Você pode aplicar o hashing de recursos aos recursos do conjunto de dados, resultando em um vetor de recursos de tamanho fixo que pode ser usado como entrada para o modelo de regressão logística.

Em geral, o hashing de recursos é uma técnica útil para lidar com conjuntos de dados com um número variável de recursos e pode ser usado em combinação com algoritmos de aprendizado de máquina, como a regressão logística, para resolver problemas de classificação.

atualização


Para dados com um número variável de recursos, algumas representações possíveis que você pode usar incluem:

  1. Vetores de recursos de tamanho fixo: como mencionado anteriormente, você pode usar técnicas de seleção de recursos para selecionar um número fixo de recursos dos dados e representá-los como um vetor de recursos.

  2. Vetores de recursos esparsos: em vez de usar um vetor de recursos denso, você pode usar um vetor de recursos esparso, que inclui apenas um subconjunto dos possíveis recursos. Isso pode ser útil se você tiver um número muito grande de recursos possíveis e apenas um pequeno número deles estiver presente em uma determinada instância.

  3. Dados de gráfico: você pode representar seus dados como um gráfico, com cada instância representada como um nó no gráfico e as bordas entre os nós representando as relações entre as instâncias. Isso pode ser útil se você estiver usando um modelo de aprendizado de máquina projetado para lidar com dados de gráfico, como uma rede convolucional de gráfico.

Novamente, a melhor representação dependerá dos requisitos e restrições específicos de seu problema. É importante considerar as características de seus dados e as metas de seu projeto ao decidir qual representação é a melhor para suas necessidades.

 
Aleksey Nikolayev #:

Ele poderá dizer quais variantes de funções hash são usadas para vetores numéricos.

Aqui está uma lista de algumas funções de hash comuns que podem ser usadas para mapear números inteiros ou outros tipos de dados para listas ou outras estruturas de dados:

  1. Hashing modular: o hash modular é uma função de hash simples que mapeia um número inteiro ou outro tipo de dados para uma lista ou outra estrutura de dados, tomando o módulo do valor em diferentes potências de um número primo.

  2. Hashing polinomial: o hashing polinomial é uma função de hash que mapeia um número inteiro ou outro tipo de dados para uma lista ou outra estrutura de dados avaliando um polinômio em um ponto específico. O polinômio é definido pelo valor e por um número primo.

  3. Hashing universal: o hashing universal é uma função de hash que mapeia um número inteiro ou outro tipo de dados para uma lista ou outra estrutura de dados usando uma função de hash gerada aleatoriamente. A função de hash é escolhida em uma família de funções de hash que têm baixa probabilidade de colisão.

  4. Tabelas de hash: as tabelas de hash são estruturas de dados que usam uma função de hash para mapear chaves para valores. Elas podem ser usadas para mapear um número inteiro ou outro tipo de dados para uma lista ou outra estrutura de dados.

  5. Mapas de hash: os mapas de hash são estruturas de dados que usam uma função de hash para mapear chaves para valores. Eles podem ser usados para mapear um número inteiro ou outro tipo de dados para uma lista ou outra estrutura de dados.

  6. Conjuntos de hash: conjuntos de hash são estruturas de dados que usam uma função de hash para armazenar um conjunto de valores. Eles podem ser usados para mapear um número inteiro ou outro tipo de dados para uma lista ou outra estrutura de dados.

Esses são apenas alguns exemplos de funções de hash e estruturas de dados que podem ser usadas para mapear números inteiros ou outros tipos de dados para listas ou outras estruturas de dados. A função de hash ou a estrutura de dados específica que você escolher dependerá das características dos seus dados


Aqui estão exemplos das funções de hash modular, hash polinomial, hash universal, tabela de hash, mapa de hash e conjunto de hash no 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 uma visão geral de uma função recursiva que mapeia um número para uma lista numérica de comprimento arbitrário

Ao contrário - a entrada é uma lista, a saída é um número. Por exemplo, fazemos uma previsão com base em cotações).

Em seguida, pergunte quais algoritmos de MO podem ser usados para criar essas funções.

 
Aleksey Nikolayev #:

Ao contrário, a entrada é uma lista e a saída é um número. Por exemplo, usamos as aspas para fazer uma previsão)

Em seguida, pergunte quais algoritmos de MO podem ser usados para criar essas funções.

Se você quiser fazer o hash de uma lista de comprimento diferente para um número inteiro, poderá usar uma função de hash que mapeie a lista para um número inteiro. Uma maneira de fazer isso é usar uma função de hash modular, que mapeia a lista para um número inteiro tomando o módulo da soma da soma dos elementos da lista em diferentes potências de um 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

Essa função recebe uma lista lst e um número primo p como entrada, e retorna um valor de hash inteiro somando os elementos da lista em diferentes potências de p e tomando o módulo do resultado.

Por exemplo, se chamarmos modular_hash([1, 2, 3], 2) , a função retornará 7 .

Você também pode usar uma abordagem semelhante no R. Aqui está o código de uma função hash modular em R que mapeia uma lista para um número inteiro:

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
}


As funções de hash normalmente não são geradas usando algoritmos de aprendizado de máquina. Em vez disso, elas são normalmente projetadas com base nas características dos dados que estão sendo transformados em hash e nos requisitos do aplicativo.

Dito isso, os algoritmos de aprendizado de máquina podem ser usados para avaliar o desempenho de diferentes funções de hash ou para otimizar os parâmetros de uma função de hash para uma tarefa específica. Por exemplo, você pode usar um algoritmo de aprendizado de máquina para otimizar o número primo usado em uma função de hash modular ou para escolher os coeficientes de uma função de hash polinomial com bom desempenho em um conjunto de dados específico.

Em geral, embora os algoritmos de aprendizado de máquina não sejam normalmente usados para criar funções de hash, eles podem ser usados para avaliar e otimizar o desempenho das funções de hash em determinados aplicativos.

 
-

e, no entanto, como posso criar uma função hash semelhante usando um algoritmo de aprendizado de máquina


*

Não é comum criar uma função de hash usando um algoritmo de aprendizado de máquina, pois o objetivo principal de uma função de hash é mapear dados para uma representação de tamanho fixo de forma a preservar a estrutura dos dados o máximo possível. Os algoritmos de aprendizado de máquina, por outro lado, são normalmente usados para aprender padrões ou fazer previsões com base nos dados, em vez de gerar representações de tamanho fixo dos dados.

No entanto, se você ainda quiser explorar a possibilidade de usar um algoritmo de aprendizado de máquina para criar uma função de hash, uma abordagem que você pode tentar é usar um algoritmo de aprendizado não supervisionado para aprender uma representação compacta dos dados e, em seguida, usar essa representação como a função de hash.

Por exemplo, você pode usar um autoencoder ou um algoritmo de agrupamento para aprender uma representação compacta dos dados e, em seguida, usar essa representação como a função de hash. Isso envolveria o treinamento do modelo de aprendizado de máquina nos dados e, em seguida, o uso do modelo treinado para gerar os valores de hash para novos dados.

Em geral, embora não seja comum criar uma função de hash usando um algoritmo de aprendizado de máquina, é possível usar o aprendizado de máquina para aprender uma representação compacta dos dados que poderia ser usada como uma função de hash em determinados aplicativos.


 
Maxim Dmitrievsky #:

Aqui está uma lista de algumas funções hash comuns que podem ser usadas para mapear números inteiros ou outros tipos de dados para listas ou outras estruturas de dados:

Pensei que ela prometia mapear um vetor de tamanho arbitrário para um vetor de tamanho fixo especificado, mas aqui ela mapeia um número para um vetor?

Tudo é complicado e incompreensível) A vida era muito mais simples sem a GPT) Teremos dificuldades na era da IA)