Aprendizado de máquina no trading: teoria, prática, negociação e não só - página 5
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
Não vejo nenhuma prova de que a NS tenha lidado com alguma coisa.
O excesso de aprendizagem é um mal mundial na ciência e na construção de modelos, em particular.
Portanto, é necessário um erro para três conjuntos:
Os dois últimos conjuntos são desembaciados quando chegam ao terminal, bases atrás da barra.
Deve haver aproximadamente o mesmo erro em todos os três conjuntos. Ao fazer isso, você terá que consertar o conjunto de preditores que você toma ao treinar o modelo.
No início não considerei a hipótese de me reciclar nesta tarefa, não havia necessidade. A primeira vez que um neurônio foi com apenas um neurônio na camada interna. Verifiquei agora, o erro no treino longo é de cerca de 45%, e não vai mais baixo. A rede dá essas entradas 1,3,5,7,9,11 pesos mais altos quando se treina, mas não pode realmente treinar devido à falta de neurónios. Esta foi a idéia de espremer o máximo resultado correto para fora dele, em condições muito limitadas, e ver quais insumos ele dará mais peso.
Agora com o ficheiro de validação, posso trabalhar mais a sério. Agora eu dividi o arquivo fonte em 2 partes (85% e 15%), treinei na primeira parte, às vezes parei de treinar e medi erros em ambas as partes. Esses exemplos do arquivo de 15% não chegaram ao treinamento, mas o erro neles diminuiu aproximadamente o mesmo que na parte do treinamento. Quando o erro se tornou 0% em ambas as partes do arquivo, eu parei de treinar e testei os neurônios no segundo arquivo, o erro apareceu lá em ~0%. Acontece que para esta tarefa o sobretreinamento nem sequer foi alcançado, é engraçado.
Mas a neurônica no forex é pior do que neste problema. No início o erro cai tanto nas amostras de treinamento como nas de validação. Então o erro continua a cair na amostra de treinamento, mas começa a crescer na amostra de teste, neste momento é hora de parar o treinamento. Em seguida, eu geralmente testei o resultado no histórico pré-amostra e novamente no histórico pós-amostra. Para mim, são três conjuntos de dados, como o teu. Mas o erro em todos os três conjuntos é diferente até agora (e grande fora do período de treinamento).
Eu tinha idéias diferentes de como melhorar os resultados, por exemplo para suavizar os resultados ou adicionar um filtro (<0.1 - vender, >0.9 - comprar, e tudo no meio - período sem troca). Você pode melhorar os resultados adicionando filtro à saída neural e otimizando-a também, mas para testes iniciais não ajudou em nada. Outra boa idéia foi que se o neurônio foi treinado em algum período da história, então você pode otimizar o filtro no histórico anterior a esse período. Para um erro antes do período de optimização está provavelmente associado a um erro após o período de optimização. Mas não funcionou - se existem três períodos de história - "antes do neurônio" - "aprendendo neurônio" - "depois do neurônio", então todos os três terão seus filtros ideais que não estão conectados de forma alguma.
Até agora concluí que o modelo deve ter um pequeno erro (<10%) para o treinamento e as amostras de teste. Não aplicar filtros aos resultados dos modelos, e nenhum trabalho de adivinhação como "inverter o resultado a cada quarta semana". Não cair em períodos menores que M15. Tento novas ideias diferentes e é bom que pelo menos uma em cada dez melhore o resultado. E de alguma forma isso deve resultar em um modelo lucrativo.
No início não considerei a possibilidade de me reciclar nesta tarefa, não havia necessidade. A primeira vez foi com apenas um neurónio na camada interior. Verifiquei agora, o erro durante o longo treinamento é de cerca de 45%, e não vai mais baixo. A rede dá essas entradas 1,3,5,7,9,11 pesos mais altos quando se treina, mas não pode realmente treinar devido à falta de neurónios. Esta foi a idéia de espremer o máximo resultado correto para fora dele, em condições muito limitadas, e ver quais insumos ele dará mais peso.
Agora com o ficheiro de validação, posso trabalhar mais a sério. Agora eu tenho arquivo fonte dividido em 2 partes (85% e 15%), treinado na primeira parte, às vezes parei de treinar e medi erros em ambas as partes. Esses exemplos do arquivo de 15% não chegaram ao treinamento, mas o erro neles diminuiu aproximadamente o mesmo que na parte do treinamento. Quando se tornou 0% em ambas as partes do arquivo, eu parei de treinar e testei a neurônica no segundo arquivo, o erro ali era de ~0%. Acontece que para esta tarefa o sobretreinamento nem sequer foi alcançado, é engraçado.
Mas a neurônica no forex é pior do que neste problema. No início o erro cai tanto nas amostras de treinamento como nas de validação. Então o erro continua a cair na amostra de treinamento, mas começa a crescer na amostra de teste, neste momento é hora de parar o treinamento. Em seguida, eu geralmente testei o resultado no histórico pré-amostra e novamente no histórico pós-amostra. Para mim, são três conjuntos de dados, como o teu. Mas o erro em todos os três conjuntos é diferente até agora (e grande fora do período de treinamento).
Eu tinha idéias diferentes de como melhorar os resultados, por exemplo para suavizar os resultados ou adicionar um filtro (<0.1 - vender, >0.9 - comprar, e tudo no meio - período sem troca). Você pode melhorar os resultados adicionando filtro à saída neural e otimizando-a também, mas para testes iniciais não ajudou em nada. Outra boa idéia foi que se o neurônio foi treinado em algum período da história, então você pode otimizar o filtro no histórico anterior a esse período. Para um erro antes do período de otimização está provavelmente associado a um erro após o período de otimização. Mas não funcionou - se existem três períodos de história - "antes do neurônio" - "aprendendo neurônio" - "depois do neurônio", então todos os três terão seus filtros ideais que não estão conectados de forma alguma.
Até agora concluí que o modelo deve ter um pequeno erro (<10%) para o treinamento e as amostras de teste. Nenhum filtro deve ser aplicado ao resultado do modelo, e nenhuma suposição como "inverter o resultado a cada quarta semana". Não cair em períodos menores que M15. Tento novas ideias diferentes e é bom que pelo menos uma em cada dez melhore o resultado. E de alguma forma isso deve resultar em um modelo lucrativo.
Eu tentei modelos diferentes do Rattle, a floresta também deu bons resultados.
Passo 1 - a floresta aprendeu algo, e nas entradas das estatísticas 1,3,5,7,9,11 parecem de alguma forma separadas. Erro no arquivo de treinamento 0%, no arquivo de validação 46%
Etapa 2 - deixou apenas as entradas 1,3,5,7,9,11 no arquivo e o resultado. Treinou a floresta novamente no novo arquivo, agora o erro é 0% tanto nos arquivos de treinamento quanto nos de validação, tudo é legal. A única nuance foi que Rattle para o segundo passo definiu o parâmetro "Número de variáveis" para 2, provavelmente porque o arquivo é menor em tamanho. Mudei-o para 4, como no primeiro passo.
Dr.Trader
É bom ver um irmão em mente baseado em chocalhos. Pelo menos podemos comparar resultados.
Assim como a minha própria experiência.
Tiramos o chocalho e os modelos dele.
No modelo de aba aprendemos, obtendo o valor da AOB, e na aba Avaliar avaliamos sobre os conjuntos de Validação e Teste. Temos três números.
Argumento que os resultados obtidos, se o conjunto de preditores não foi previamente limpo de preditores de ruído - estes resultados são sobre nada, muito provavelmente apenas um conjunto de números.
Na aba Avaliar, além de obter os resultados listados, o conjunto deve ser colocado na janela Dataset R. É muito importante que este conjunto seja obtido dividindo mecanicamente o arquivo original, ou seja, o primeiro arquivo para os três dígitos, por exemplo, de 1 de janeiro de 2014 a 1 de janeiro de 2015, mas o arquivo no
R Dataset necessariamente após 1 de janeiro de 2015 sem qualquer amostragem aleatória e outros truques utilizados em R. É apenas rombo, mecânico.
Eu não reconheço nenhuma outra forma de avaliar o sucesso de separar os preditores significativos dos ruidosos, porque o meu método proposto imita a negociação real.
Poderia publicar os quatro números, por favor? Incluindo o resultado no arquivo da janela do R Dataset?
Eu tentei modelos diferentes do Rattle, a floresta também deu bons resultados.
Passo 1 - a floresta treinou algo, e nas entradas das estatísticas 1,3,5,7,9,11 parecem de alguma forma separadas. O erro no ficheiro de formação é 0%, no ficheiro de validação é de 46%.
Etapa 2 - deixou apenas as entradas 1,3,5,7,9,11 no arquivo e o resultado. Treinou a floresta novamente no novo arquivo, agora o erro é 0% tanto nos arquivos de treinamento quanto nos de validação, tudo é legal. A única nuance foi que Rattle para o segundo passo definiu o parâmetro "Número de variáveis" para 2, provavelmente porque o arquivo é menor em tamanho. Mudei-o para 4, como no primeiro passo.
Eu tentei modelos diferentes do Rattle, a floresta também deu bons resultados.
Passo 1 - a floresta treinou algo, e nas entradas das estatísticas 1,3,5,7,9,11 parecem de alguma forma separadas. O erro no ficheiro de formação é 0%, no ficheiro de validação é de 46%.
Etapa 2 - deixou apenas as entradas 1,3,5,7,9,11 no arquivo e o resultado. Treinou a floresta novamente no novo arquivo, agora o erro é 0% tanto nos arquivos de treinamento quanto nos de validação, tudo é legal. A única nuance foi que Rattle para o segundo passo definiu o parâmetro "Número de variáveis" para 2, provavelmente porque o arquivo é menor em tamanho. Mudei-o para 4, como no primeiro passo.
Poderia publicar os quatro números, por favor? Incluindo o resultado em ficheiro da janela do R Dataset?
Fez isso com neuronka - dummy_set_features.csv é dividido em 3 partes 70%/15%/15%; dummy_set_validation.csv usado na aba de avaliação como "arquivo csv" (é essencialmente o mesmo que R Dataset, apenas um formato de arquivo diferente).
Tirei o registro do Rattle, removi essas duas limitações da chamada neurônica, sobre a qual escrevi anteriormente, executei-o em R, mas o modelo ainda está subtreinado (erro de 35% na amostra de treinamento). Então acontece, se você reduzir a amostra de treinamento, então o resultado do treinamento é pior. Mas você pode aumentar o número de neurônios na camada interna, isso deve melhorar a aprendizagem.
Mudei o número de neurónios de 10 para 20, voltei a correr o treino, agora o erro no treino tornou-se 0%. Erro na amostra de validação é de 0,6%, erro na amostra de teste é de 0,1%. Erro no arquivo dummy_set_validation.csv é 0,3%. Tudo bem, R na aplicação.
Interessante, acontece que os problemas de treinamento dos neurônios são muito diferentes dos problemas das árvores. Para mim o problema com nn é pegar o número certo de neurônios internos e suspender a aprendizagem antes que a rede comece a se reciclar. Basicamente, quanto mais neurônios, melhor, mas isso afeta muito a RAM necessária e o tempo de treinamento. Os preditores supérfluos não são um grande obstáculo para a aprendizagem, a neurônica geralmente aprende tão bem com eles, mas eles aumentam o tempo de treinamento, e é melhor se livrar deles para torná-lo mais rápido.
Uma vez que eu usei a rede mt4 auto-escrita, um EA poderia aprender e negociar imediatamente. Havia problemas com a velocidade de aprendizagem, inicialização de pesos, algoritmos de aprendizagem. Havia demasiados pequenos problemas, era difícil conseguir bons resultados mesmo com uma amostra de treino, por isso finalmente desisti e agora trabalho em R. O pacote nnet pode ser treinado pelo algoritmo bfgs, ele remove todos aqueles pequenos problemas. Mas o pacote tem um limite de apenas 1 camada interior. Eu quero ter pelo menos 3 camadas internas, mas com o algoritmo bfgs, caso contrário haverá muitos problemas com a aprendizagem novamente.
Fez isso com neurônio - dummy_set_features.csv é dividido em 3 partes 70%/15%/15% como padrão; dummy_set_validation.csv usado na aba de avaliação como "arquivo csv" (este é essencialmente o mesmo que R Dataset, apenas um formato de arquivo diferente).
Não, não é a mesma coisa.
Surpreendente, eu discuto este assunto com muitas pessoas e NENHUMA o faz da forma como escrevo. E sei o que estou escrevendo, porque passei meio ano em exercícios como o seu, e fora do chocalho(). O que não coloco no testador, recebo um erro completamente diferente. Então eu fiz o que descrevi acima e o erro no testador praticamente coincidiu com o erro no arquivo R Dataset.
Eu dei ao Alexey três arquivos, que são obtidos dividindo mecanicamente um grande arquivo em três partes. Na primeira parte exercitamos, aprendemos, avaliamos... E nos outros dois, verificamos os números que temos no primeiro. Se os três arquivos tiverem erros superiores a 20%(!), ou mais precisamente, mais perto de 40%, o modelo não é retrabalhado e você pode trabalhar com ele.
Os 3 arquivos acima têm 27 preditores e 6 variáveis alvo. Os 27 preditores foram selecionados entre 170 preditores pelos meus próprios algoritmos. A partir de hoje, estes 27 preditores não conduzem a modelos demasiado treinados. Mas os restantes 143 preditores do meu conjunto são ruído e sobre este ruído pode facilmente obter um erro comparável ao seu, mas o modelo está sobre-treinado e não é adequado para uso posterior.
Por que há menos erros nos preditores de ruído do que nos preditores significativos?
Do meu ponto de vista, como o algoritmo de ajuste do modelo tende a reduzir o erro de ajuste, ele é sempre capaz de encontrar algo entre os valores ruidosos e aleatórios que é melhor que os preditores significativos. Como resultado, quanto menor o erro, menos preditores significativos estão envolvidos na construção do modelo!
PS
A julgar pelo erro, ou a NS está 100% sobretreinada, ou a olhar para o futuro.
O "ficheiro CSV" e o "conjunto de dados R" no separador de avaliação são simplesmente formas diferentes de especificar a fonte de dados. Se você alimentar os mesmos dados com eles, você obterá o mesmo resultado ao testar o modelo.
Se antes do guizo executar
então este conjunto de dados_validate estará agora disponível no separador avaliar como conjunto de dados R. Mas o resultado da verificação do modelo acabará sendo o mesmo que se você apenas selecionar a opção de arquivo csv e especificar o arquivo C:/dummy_set_validation.csv, os dados para o teste serão idênticos em ambos os casos.
O treinamento em si foi em um arquivo diferente, dummy_set_features.csv, então é impossível olhar para o futuro aqui, porque os dados em ambos os arquivos são diferentes, e não dependentes do tempo (mas dependentes da fórmula). Eu acho que a neurônica fez um ótimo trabalho e encontrou 6 inputs que determinam o resultado, reduziram a influência de outros inputs, e com alguma lógica neural descreveu a fórmula desejada.
Só para o caso de ter verificado os dois ficheiros para encontrar cordas duplicadas, se houver alguma. Aqui está o código em R:
Se isto for feito antes de chocalhar, então ambas as tabelasdataet_train edataet_validate estão disponíveis para treinamento e verificação do modelo, e não haverá duplicatas. Glory R.
o arquivo de validação do modelo continha 23 repetições da amostra de treinamento, mas além disso tem mais 3000 filas únicas, de modo que a avaliação do modelo não poderia ser significativamente afetada.