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

 
Dr. Trader:

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 como se você apenas selecionasse a opção de arquivo csv e especificasse 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 eu ter verificado ambos os 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 linhas únicas, de modo que a avaliação do modelo não poderia ser significativamente afetada.

Aparentemente, sou incapaz de explicar o que quero.

1. Pode dar as datas de início e fim de ambos os ficheiros, por favor?

2.Nada pode ser removido do arquivodataet_validate, pois este arquivo simula a chegada de barra após barra.

 

Estive a pensar mais nisto esta manhã, não é assim tão simples.

De acordo com a sua fórmula, existem apenas 2^6 = 64 combinações de inputs em uso. Se o algoritmo de aprendizagem determinar de alguma forma a importância dessas 6 entradas, então ele pode muito bem se lembrar de todas as 64 combinações. E então não importa que a combinação de todos os inputs na amostra de validação seja única, o modelo irá pegar apenas aqueles 6 inputs significativos e determinar a resposta já conhecida. Foi assim que funcionou para mim com o neurónio. Retirei agora algumas combinações de 1,3,5,7,9,11 entradas do arquivo de treinamento, mas deixei combinações semelhantes no arquivo de validação. O erro durante o treinamento permaneceu 0%, mas durante a validação ele aumentou para 50% nessas novas combinações. E isto é mau, em forex o spread teria levado o depósito a menos. SanSanych está certo, é tudo uma questão de requalificação, admito que estava errado.

Aparentemente é por isso que muitos modelos não funcionam em forex, eles apenas se lembram de certas combinações, mas não lidam com novas combinações.

 
SanSanych Fomenko:

Aparentemente, sou incapaz de explicar o que quero.

1. Pode dar as datas de início e fim de ambos os ficheiros, por favor?

2.Nada pode ser removido do arquivodataet_validate, poiseste arquivo simula a barra de entrada após a barra.

Não, é verdade, eu percebo. O que você diz se aplica ao forex, e eu concordo com isso. Mas eu estava a falar dos ficheiros do Alexey e do treino do modelo neles.

https://c.mql5.com/3/96/dummy_set_features.zip - formação

https://c.mql5.com/3/96/dummy_set_validation.zip - validação

o resultado nos arquivos é definido pela fórmula "1-mod(soma(input_1 ; input_3 ; input_5 ; input_7 ; input_9 ; input_11);2)".

Por favor, dê-me um link para os ficheiros que mencionou e eu vou tentar treinar o neurónio neles.

 
Rapazes,

Tive a ideia certa de que a floresta está sobreformada em todos os dados, embora tenha destacado as características importantes. Precisa de limpar os dados e treinar novamente.

Os NS sem limpeza de dados aprenderam bem?

Obrigado.
 
Dr. Trader:

Não, é verdade, eu percebo. O que você diz se aplica ao forex, e eu concordo com isso. Mas eu estava a falar dos ficheiros do Alexei, e do treino modelo neles.

https://c.mql5.com/3/96/dummy_set_features.zip - formação

https://c.mql5.com/3/96/dummy_set_validation.zip - validação

o resultado nos arquivos é definido pela fórmula "1-mod(soma(input_1 ; input_3 ; input_5 ; input_7 ; input_9 ; input_11);2)".

Por favor, me dê um link para os arquivos que você mencionou, eu vou tentar treinar neurônios neles.

Aqui está, no arquivo.

Isto é RData. Você abre R, carrega o guizo e a partir dele os quadros de dados estão disponíveis

"R1.F1" "R1.F3" "R1.F4" "R1.F5" "R1.F6" - esta é para treinamento, tem diferentes variáveis-alvo que são marcadas com Fi

"R2.F1" "R2.F3" "R2.F4" "R2.F5" "R2.F6" é para testes

"Rat_DF1" "Rat_DF2" "Rat_DF3" é o ficheiro que contém todas as variáveis de destino

Arquivos anexados:
ALL_cod.zip  3281 kb
 
Alexey Burnakov:
Rapazes,

Tive a ideia certa de que a floresta está sobreformada em todos os dados, embora tenha destacado as características importantes. Precisa de limpar os dados e treinar novamente.

Os NS sem limpeza de dados aprenderam bem?

Obrigado.
Sim, para esta tarefa desde o primeiro post é assim. Mas se aplicar NS para forex, então NS no lixo também irá sobretreinar e irá trabalhar pior em novos dados, então a seleção de dados de entrada também é relevante lá.
 
Dr.Trader:
Sim, para esta tarefa desde o primeiro post é assim. Mas se você aplicar NS ao forex, NS no lixo também irá sobretreinar e ter um desempenho pior em novos dados, então a seleção de dados de entrada é relevante lá também.

d Os dados do teste estão limpos. Então há um padrão lá em qualquer local. Em dados reais, você não pode fazer sem dividir a amostra de treinamento em várias partes e controlar o desempenho em uma subamostra ou várias subamostras ao treinar o modelo. Esta é uma regra simples.

Mas para testar a capacidade de reciclagem dos modelos "out of the box" como as florestas aleatórias, foi apenas útil ver que eles aprendem sem rodeios o ruído - na validação uma confusão completa. No entanto, eles selecionam corretamente os preditores importantes.

Mas, mesmo em dados limpos, onde 14 preditores são puro ruído (números inseridos aleatoriamente sem conexão e saída) a floresta começou a usá-los para treinamento. e isto é algo que eu mesmo já encontrei antes.

E mais um aspecto, um aspecto muito importante. O exemplo de teste contém observações mutuamente independentes. Cada fila não depende, de forma alguma, de nenhuma outra. Na realidade, em uma série temporal, as observações vizinhas estarão dependentes. Por exemplo, dois valores vizinhos de uma bola ondulante serão altamente correlacionados. E assim qualquer - eu sublinho, QUALQUER - método falhará em dados reais brutos. A maneira correta, idealmente, de preparar dados reais para o treinamento é selecioná-los para que as observações vizinhas não estejam fisicamente relacionadas. Para séries cronológicas, isto significa que se você tomar indicadores com uma janela de 20, então as observações vizinhas na amostra de treinamento devem ser tomadas pelo menos 20 passos de distância. Para que não estejam relacionados entre si. Então as estatísticas e a aprendizagem adequada de padrões começam a funcionar e não acumulações aleatórias de dados semelhantes. Espero que entenda o que quero dizer.

Quando eu voltar da minha viagem de negócios, também farei uma experiência em público usando dados reais de Forex. E talvez já o façam juntos com o objectivo prático de lucrar com os padrões.

Alexey

 
Dr. Trader:

Mas como o NS é como uma caixa preta, não é possível conhecer a lógica da solução. Você pode olhar para os pesos, determinar o valor médio absoluto para cada entrada e desenhar um diagrama. E descubra que 1, 3, 5, 7, 9, 11 são mais importantes do que os outros. No entanto, os restantes inputs também são utilizados por alguma razão; os pesos zero não são encontrados em nenhum lugar. Em outras palavras, é vice-versa, primeiro aprendemos, e depois podemos identificar os inputs importantes.

Tente algum tipo de algoritmo de contraste NS. O algoritmo pode auto-verificar tanto os inputs (não é necessário eliminá-los através da navegação "manual") como as conexões (e neurónios de camada oculta, claro). A saída será uma breve descrição da lógica da operação.
 
SanSanych Fomenko:

Aqui está, no arquivo.

Isto é RData. R aberto, guizo de carga e a partir dele estão disponíveis quadros de dados

"R1.F1" "R1.F3" "R1.F4" "R1.F5" "R1.F6" - esta é para treinamento, tem diferentes variáveis-alvo que são marcadas com Fi

"R2.F1" "R2.F3" "R2.F4" "R2.F5" "R2.F6" - isto é para testes

"Rat_DF1" "Rat_DF2" "Rat_DF3" é o ficheiro que contém todas as variáveis de destino

Obrigado, experimente. Parece que você fez muito para selecionar os preditores, para os neurônios facilmente treinados neles, e armazenou o resultado no conjunto de dados do cheque também.

Os resultados abaixo referem-se ao treinamento em R1.F3

1) Rattle é um resultado interessante. HH com configuração padrão mostrou erros de trem/validado/teste de 30%/29%/33%. O erro em R2.F3 é de 35%. Mas tudo isto é apenas um caso de sorte, noutra configuração teria facilmente sub ou sobre-treinado, aqui apenas teve sorte.

2) Então eu fiz uma simples abordagem grosseira com aprendizagem não supervisionada, 200 neurônios escondidos, rede foi treinada até que parou de melhorar. Erros de treino/validação/teste/R2.F3 - 2%/30%/27%/45%. Claramente, a rede está a ser requalificada.

3) Aprendizagem supervisionada. Isso é diferente das árvores, mas você deve sempre fazer isso com um neurônio para não treiná-lo em demasia. A essência é pausar o treinamento de vez em quando e verificar os resultados do treinamento/validação/teste. Não conheço a regra de ouro da recolha de resultados, mas é bastante normal treinar no conjunto de dados do comboio, depois procurar erros na validação e teste dos conjuntos de dados, parar o treino quando os erros na validação/teste param de cair. Isto dá algum tipo de garantia contra o sobretreinamento. R2.F3 é considerado indisponível durante todo este processo, e o teste só é feito após o final do treinamento. Neste caso o comboio/validar/testar/R2.F3 erros são 27%/30%/31%/37%. Aqui novamente há sobretreinamento, mas não muito. Você poderia ter parado o processo de aprendizagem cedo após o erro do trem ter se tornado notavelmente menor do que validar/teste erros, mas isso é adivinhar... pode ou não ter ajudado.

A variável alvo "R1.F1" tem três valores, Rattle não pode fazer isso com neurônicos e você tem que escrever seu próprio código em R, eu pulei este conjunto de dados.

"R1.F4" "R1.F5" "R1.F6" deu aproximadamente os mesmos resultados para todos os 4 erros na neuronka Rattle, acho que uma abordagem adequada com neuronka também dará aproximadamente os mesmos resultados, eu não tenho lidado com eles mais.

 

Sobre a metodologia de ensino.

Aqui descrevi um método padrão que é normalmente aplicável e dá bons resultados: https://www.mql5.com/ru/blogs/post/661499

Deixe-me explicar brevemente: divida todos os dados em 2 partes - treinamento e validação. A validação deve ser tão grande quanto você achar necessário. Eu fiz o seguinte. Eu levo 15 anos de citações de um minuto. Calculo as entradas e as saídas, afino os dados para que as observações sejam fisicamente diferentes (levo-as através de n barras, onde n não é menor que a maior janela usada no indicador e não menor que a maior defasagem). Pondera porque é que isto está correcto. Os dados tornam-se mutuamente independentes.

A seguir faço a parte do treino (a maior) - 10 anos mais longe no passado. Eu crio índices de linha para validação cruzada. Ou seja, divido os dados em 5 pedaços iguais, rigidamente separados por data. Durante a validação cruzada, o modelo passa por parâmetros de treinamento como profundidade, número de iterações, etc., treinamento em quatro pedaços de treinamento pontual e mede o erro em um quinto do pedaço de treinamento. Ele faz isso 5 vezes, cada vez selecionando uma parte de teste diferente em cada cinco. Recebe cinco métricas de erro (para um conjunto de parâmetros de treinamento). Eles são calculados como média e dados como um valor de erro de teste sobre os dados não envolvidos no treinamento.

O modelo então faz este trabalho n * m * s * d vezes, onde n,m,s,d são os parâmetros de treinamento. Isto é uma força bruta sobre a grelha. Pode chegar a centenas de iterações. Você pode fazer uma busca aleatória ou uma busca genética. Ez yu vish.

Em seguida, obtemos uma tabela de métricas de erros de validação cruzada correspondentes ao conjunto de parâmetros de aprendizagem. Deveríamos apenas pegar o melhor resultado e estes parâmetros. E depois treinar toda a amostra de treino sobre esses parâmetros. Um limite para o número de iterações também será especificado para NS, para que não ocorra sobretreinamento.

E no final validar o modelo em 5 anos de citações para avaliar o desempenho fora da amostra.

Em suma, a validação cruzada é, até agora, a melhor escolha para um treinamento modelo eficaz. Aconselho-o a tentar.

O pacote em R é de carpete.

Vejo-te em breve.

Alexei

СОПРОВОЖДЕНИЕ ЭКСПЕРИМЕНТА ПО АНАЛИЗУ ДАННЫХ ФОРЕКСА: первое серьезное обучение модели и результаты
СОПРОВОЖДЕНИЕ ЭКСПЕРИМЕНТА ПО АНАЛИЗУ ДАННЫХ ФОРЕКСА: первое серьезное обучение модели и результаты
  • 2016.02.27
  • Alexey Burnakov
  • www.mql5.com
Начало по ссылкам: https://www.mql5.com/ru/blogs/post/659572 https://www.mql5.com/ru/blogs/post/659929 https://www.mql5.com/ru/blogs/post/660386 https://www.mql5.com/ru/blogs/post/661062