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

 
Rorschach:

Para uma floresta, há uma opção de olhar para a importância e os aglomerados. Em catbust é provavelmente plot_tree.

Eu prepararei os dados e os afixarei.

Fez uma versão de teste para 6 colunas, levou 11GB. O bloco de notas++ não conseguiu abri-lo, diz que o arquivo é muito grande. O BD Browser para SQLite está pendurado há cerca de 20 minutos.

Mostra uma imagem de como são os aglomerados de árvores, ainda não sei o que queres dizer.

Porquê abri-la? :) Eu só faço uma mini cópia com uma estrutura similar para depuração.

 
elibrarius:

Como será que eles treinam árvores sem levar todos os dados para a memória? Se a tabela for de 6 gigabytes, então cerca de 6 gigabytes de memória devem ser usados. A árvore precisa de ordenar cada coluna como um todo. Se não colocarmos tudo na memória, mas lermos os dados do disco todas as vezes, será muito lento.
A única variante é manter os dados na memória em tipo flutuante em vez do dobro, mas isso reduzirá a precisão. Para nós com 5 dígitos de precisão, pode não ser muito ruim, mas o catbust é um software universal, acho que os problemas físicos e matemáticos devem ser resolvidos com dupla precisão.

Eu não estudei o código, mas se você pensar sobre isso logicamente, CatBoost provavelmente converte a tabela de dados da amostra e armazena exatamente a variante convertida, o que se presta à compressão rápida.

A transformação ocorre em uma grade de quantização de cada preditor (6 algoritmos estão disponíveis), e, por exemplo, a partir de 1000 valores diferentes de uma variável 32 variantes (que caem no intervalo de uma grade de quantização) permanecem e tal vetor de dados é facilmente comprimido, além de números já apenas inteiros (a julgar pelas restrições de tamanho de uma grade - tipo ushort de dados - 2 bytes em número), e a tabela de quantização fica simplesmente na memória e é usada já na criação do modelo em um código. Agora já reduzimos o tamanho, e ainda é possível reduzir o volume escolhendo não todos os preditores para avaliação, mas a sua parte, que é recomendada para fazer em amostras grandes, em que o algoritmo do randomizador permite usar em outras árvores aqueles preditores, que não entraram no "saco" de uma vez, devido a este treinamento também será mais rápido, mas haverá mais árvores no modelo. Certamente existem outros truques, mas o principal deles é a quantização.

A quantificação deve ser considerada separadamente, o ideal é que cada preditor seja combinado com a sua própria grelha e que os dados sejam submetidos para treino juntamente com a grelha, o que permite que o algoritmo o faça.

Assim, a amostra pode ser auto-quantizada e será bem comprimida.

 
Aleksey Vyazmikin:

Eu não estudei o código, mas se você pensar nisso logicamente, o CatBoost provavelmente transforma a tabela de dados da amostra e armazena exatamente as variantes transformadas, que são passíveis de compressão rápida.

A transformação ocorre em uma grade de quantização de cada preditor (6 algoritmos estão disponíveis), e, por exemplo, a partir de 1000 valores diferentes de uma variável 32 variantes (que caem no intervalo de uma grade de quantização) permanecem e tal vetor de dados é facilmente comprimido, além de números já apenas inteiros (a julgar pelas restrições de tamanho de uma grade - tipo ushort de dados - 2 bytes em número), e a tabela de quantização fica simplesmente na memória e é usada já na criação do modelo em um código. Agora já reduzimos o tamanho, e ainda é possível reduzir o volume escolhendo não todos os preditores para avaliação, mas a sua parte, que é recomendada para fazer em amostras grandes, em que o algoritmo do randomizador permite usar em outras árvores aqueles preditores, que não entraram imediatamente no "saco", devido a este treinamento também será mais rápido, mas haverá mais árvores no modelo. Certamente existem outros truques, mas o principal deles é a quantização.

A quantificação deve ser considerada separadamente, o ideal é que cada preditor seja combinado com a sua própria grelha e que os dados sejam submetidos para treino em conjunto com a grelha, o que permite que o algoritmo o faça.

É por isso que a amostra pode ser quantizada por si só e será bem comprimida.

Certo, eu lembro-me, eu acho que há uma grelha padrão de 1024 variantes divididas. Se você substituir todos os dados por números separados, você pode armazenar em formato ushort, que é 2 bytes ao invés de 8, 4 vezes a compressão. Deve ter sido por isso que usou 2gb em vez de 6.
Agora percebo para que é usada esta grelha, afinal é para compressão. E é mais rápido de classificar.
Документация по MQL5: Основы языка / Типы данных / Целые типы / Типы char, short, int и long
Документация по MQL5: Основы языка / Типы данных / Целые типы / Типы char, short, int и long
  • www.mql5.com
Целый тип char занимает в памяти 1 байт (8 бит) и позволяет выразить в двоичной системе счисления 2^8 значений=256. Тип char может содержать как положительные, так и отрицательные значения. Диапазон изменения значений составляет от -128 до 127. uchar # Целый тип uchar также занимает в памяти 1 байт, как и тип char, но в отличие от него, uchar...
 
elibrarius:
Certo, eu me lembro, parece ter uma grade padrão de 1024 variantes divididas. Se você substituir todos os dados por números separados, você pode armazenar em formato ushort, que é 2 bytes ao invés de 8, 4 vezes a compressão. Deve ter sido por isso que tiveste 2gb em vez de 6 e a usaste.

O padrão é 254, mas não me lembro de quanto eu defini então. Provavelmente menos de 2gb de memória foi consumida - lembro-me de ter ficado muito surpreendido por ter sido tão pouco.

Em qualquer caso, esta abordagem permite comprimir significativamente os dados, mesmo a própria amostragem. Não se pode fazer isso com redes neurais.

elibrarius:
Agora eu entendo para que serve esta grelha, ela acaba por ser utilizada para compressão. E é mais rápido para ordenar.
A grelha também permite um menor encaixe, porque é utilizada uma gama de valores. Mas isto nem sempre será bom - para apanhar níveis teóricos, acho que você mesmo tem que cortar a grelha.
 
Aleksey Vyazmikin:

O padrão é 254, mas não me lembro de quanto eu defini então. Provavelmente menos de 2gb de memória foi consumida - lembro-me de ter ficado muito surpreendido por ser tão pequena.

Podes usar uchar então, é 1 byte.

Aleksey Vyazmikin:
A grelha permite encaixar menos, porque é utilizada uma gama de valores. Mas nem sempre é bom, para apanhar níveis teóricos terias de ser tu a cortar a grelha.


O valor máximo em ushort é 65 mil - se você definir tal grade, você pode não se incomodar com ela manualmente.

 
Maxim Dmitrievsky:

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

não é um facto que seja uma boa implementação )

Vou passar o russo.

Eu li essa)))) está cheia de erros nos cálculos e a rede dá respostas bastante aleatórias

 
elibrarius:

Então você pode usar uchar , é 1 byte.


Em ushort o valor máximo é 65k - se você definir tal grade, você não precisa se preocupar com isso manualmente

Seu tamanho máximo é65535, mas eu não posso afetar variáveis no código.

Quanto ao tamanho máximo - não, ele não garante o resultado, pois pode ser ajustado à faixa de dados e saltar aqueles próximos a ela.

Geralmente é bom ter um algoritmo de aprendizagem, que sempre verifica a razoabilidade do fechamento da divisão (A>10 && A<=15), mas geralmente acontece aleatoriamente - não existe essa condição obrigatória, embora às vezes seja reproduzida.

 
Alexander Alexeyevich:

Eu li esta)))) há muitos erros nos cálculos e a rede dá respostas bastante aleatórias

Queres ser tu a escrever a rede?

Vod aqui é um código mínimo de palavras e máximo em python, mas também em inglês.

https://datascience-enthusiast.com/DL/Building_a_Recurrent_Neural_Network-Step_by_Step_v1.html

Building a Recurrent Neural Network - Step by Step - v1
  • datascience-enthusiast.com
Building your Recurrent Neural Network - Step by Step
 
Maxim Dmitrievsky:

Queres ser tu a escrever a rede?

Há um mínimo de palavras e um máximo de código em Python, mas também em inglês.

https://datascience-enthusiast.com/DL/Building_a_Recurrent_Neural_Network-Step_by_Step_v1.html

Sim, eu mesmo quero fazer isso), porque todos os artigos e exemplos não contam corretamente as funções de ativação, por exemplo a função sigmóide é sempre assumida como 1/1+exp(-x). Eu preciso de 1.0/1.0+exp(-x). Parece ser o mesmo, mas o terminal dá cálculos diferentes) veja se você tem os mesmos cálculos) daí os erros.
 
Alexander Alexeyevich:
Sim, eu mesmo quero fazer isso) porque em todos os artigos, as funções de ativação de exemplos são contadas incorretamente) por exemplo sigmoid é contado como 1/1+exp(-x) em todo lugar. Eu preciso de 1.0/1.0+exp(-x). Parece ser o mesmo, mas o terminal dá cálculos diferentes) veja se você tem os mesmos cálculos) daí o erro.
Escrever redes neurais no terminal não é de todo uma opção. Você pode notar que qualquer função pode funcionar de repente de uma maneira diferente do esperado. Use um já testado