Aprendizado de máquina no trading: teoria, prática, negociação e não só - página 2032
![MQL5 - Linguagem para estratégias de negociação inseridas no terminal do cliente MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Você está perdendo oportunidades de negociação:
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Registro
Login
Você concorda com a política do site e com os termos de uso
Se você não tem uma conta, por favor registre-se
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.
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.
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.
Agora percebo para que é usada esta grelha, afinal é para compressão. E é mais rápido de classificar.
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.
Agora eu entendo para que serve esta grelha, ela acaba por ser utilizada para compressão. E é mais rápido para ordenar.
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.
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.
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
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.
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
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 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.