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

 
Dr. Trader:

as tabelas podem ser unidas usando a função rbind().
MLP1 <- rbind(Train1, Test)

O que é Test(Train2)? E porque é que a mesa de treino e a mesa de testes devem ser combinadas? O teste deve ser separado, a fim de testar o modelo já treinado sobre ele.

Tudo não sairá tão fácil e rápido quanto você quer. No modelo Reshetov você pode simplesmente alimentar os dados, e o modelo em si irá peneirar os preditores, determinar pesos, número de neurônios, e assim por diante. Mas você não pode fazê-lo com neurônios regulares, você precisa selecionar parâmetros para neurônios por validação cruzada, por exemplo como no exemplo que escrevi aqui hoje, ou como em artigos de Vladimir Perervenko.


Veja novamente o que eu escrevi lá -https://www.mql5.com/ru/forum/86386/page753#comment_6821981
Basta colar os seus dados nesse código, como descrito, e executá-lo. Se todos os preditores forem tomados um a um e não eliminados, então desde a primeira vez será provavelmente muito mau. Após executar o comando de execução de códigomax(gaResult@fitness) adicionalmente, isto mostrará a pontuação R2 do melhor modelo encontrado pela genética. Se a estimativa for próxima de 1 ou um pouco menos, boa, se for próxima de 0 ou mesmo negativa, isso é mau.

Depois emPREDICTOR_COLUMNS especifique o número exacto de colunas que identificou como boas, e mais uma vez execute o código, o modelo será treinado apenas sobre estes preditores. O ideal é que a melhor avaliação do modelo por genética seja próxima de 1 e que a exatidão na tabela de treinamento e teste seja de 1,00.

A tabela de teste deve ser cronometrada estritamente após os dados de treinamento, como se este modelo já estivesse sendo negociado no mercado.

Se nada de bom acontecer com esse código (mesmo comKFOLDS=10) - então não é bom. Se funcionar, então há uma boa alternativa ao modelo Reshetov e podemos lidar ainda mais com esse código e portar o modelo para mql.

Na verdade, existem apenas duas secções Train1 e Test1

NetworkA aprende com o Train1 e é amostrado pelo Test1

NetB aprende com o Test1 e é amostrado no Train1

Quando somarmos as duas parcelas. NetworkA learns Test1, NetworkB learns Trine1, vamos obter os resultados de aprendizagem para toda a trama de aprendizagem, mas esta trama será uma trama de teste. É isso que o Reshetov está a fazer. Não sei, como me sugeriu que o visse..... kFold divide as parcelas de alguma forma.... não clear.....

 

Não quero repetir o resultado do Reshetov, quero organizar a IA como a dele. A forma como ele treina o comité. É claro que a formação em si já estará disponível, mas a organização, pode desempenhar um papel importante....

Vou tentar correr o teu guião com os meus dados, ver o que sai daí...

 

Estou a ver, é quase a mesma coisa. No exemplo da Reshetov as linhas são tomadas uma a uma (treinamento em linhas pares, testes em linhas ímpares), mas no meu exemplo as linhas são divididas em grupos seguidos (treinamento nas linhas 1-100, testes nas linhas 101-200). Isto é melhor para forex, pelo menos alguns verificam o fato de que o modelo pode funcionar em outro intervalo de tempo, desconhecido para ele.

A partição no estilo Reshetov também pode ser feita, então na funçãoelemnn_kfold erase

split2 <- function(x,n) split(x, cut(seq_along(x), n, labels = FALSE)) #функция  которая поделит строки таблицы на число кусков согласно KFOLDS
folds <- split2(1:nrow(x), KFOLDS) #номера  строк для обучения в каждом фолде

e em vez disso inserir

folds <- list()
folds[[1]] <- c(which(y==1)[c(T,F)], which(y==0)[c(T,F)])
folds[[2]] <- c(which(y==1)[c(F,T)], which(y==0)[c(F,T)])

e certifique-se de alterar o número de dobras para 2 -KFOLDS=2, caso contrário aparecerão alguns erros

 

Só precisamos entender que "treinamento" e "teste" dentro da dobra de validação cruzada são verificações aninhadas. Há uma tabela de treinamento, que é dividida em várias partes, e essas partes serão treinadas e testadas, e os modelos no loop aprendem de uma parte e prevêem outras, para garantir que o modelo seja capaz de aprender e prever algo com esses parâmetros em novos dados para ele.

E há uma tabela de testes separada que já não está envolvida nesta validação cruzada. Ele apenas espera até que o modelo esteja totalmente treinado para verificá-lo, como um teste em um walk-forward simulando uma negociação real.
E se o roll forward dá resultados normais em cada teste quando as janelas de treinamento e teste são deslocadas pelo tempo, então o último modelo treinado não é testado em uma tabela de teste separada, mas vai para o terminal a ser comercializado.

 
Isso mesmo, uma amostra de controlo, que pode ser um site de OOS. Treinado, testado. Atirado para o ofício. Eu pessoalmente acho que sim......
 
Mihail Marchukajtes:
É isso mesmo, uma amostra de controlo, que pode ser uma secção de OOS. Treinado, testado. Eles foram treinados, testados e depois atiraram-nos para o comércio. Eu pessoalmente acho que sim......

Mas isto levanta a questão. Como escolher um modelo sem uma trama de controle. Treinado, recebeu resultados na validação cruzada, disse que este é o modelo que vai pontuar, coloque-o na real!!!!!

Eu normalmente faço um padrão de teste em um dia, são 3-4 sinais..... levando em conta duas semanas de trabalho, não uma grande perda......

 
Eu corri o teu guião com as alterações acima. Não dá nenhum erro e até treina alguma coisa, mas não mostra nenhum gráfico durante o treinamento. De qualquer forma, vejo o resultado sob a forma de um erro. Vou refazer os meus modelos, depois volto a este guião. Justamente quando os conjuntos de treinamento forem formados, nós continuaremos lá....
 

TO: Dr. Trader.

Eu não me dei ao trabalho de analisar o roteiro em detalhes, você o escreve muito "desorganizado". Bem, cada um tem o seu próprio estilo. Mas aqui estão alguns pontos importantes. O ELM tem uma série de características na aplicação:

  • quanto mais exemplos você alimentar o ELM em treinamento, menos sensível é ao ruído (a partir da experiência de pelo menos 2000)
  • em conjunto com as redes neurais ELM você deve ter mais de 100 delas para obter um resultado são (por experiência, é melhor tirar alguma redundância e peneirar mais tarde)
  • A fusão aplicada por você por simples votação dá pior resultado do que a média. Mas isso fica a critério do desenvolvedor.
  • seet.seed não proporciona a repetibilidade e diversidade necessárias ao otimizar os hiperparâmetros. Dê uma olhada nos comentários ao artigo. Ali a elibrarius testou esta ideia por experiência. Somente forçando o RNG a um estado controlado a cada inicialização de uma rede neural você terá verdadeiros resultados de otimização. Quanto a mim, é melhor usar a optimização Bayesiana. Dá uma boa escolha de hiperparâmetros.
Boa sorte.

 

Obrigado pelos comentários, vou mantê-los em mente.

Eu adicionei um link para o seu último artigo lá no final do texto, quem quer ter uma compreensão mais séria do elmNN - é melhor ir direto para a leitura do artigo.


Vladimir Perervenko:

A fusão por simples votação que você usa produz resultados piores do que a média. Embora seja a critério do desenvolvedor.

existem na verdade duas maneiras de prever o conjunto:

1) a função elemnn_kfold_predict() - a média aritmética dos resultados da regressão de cada modelo é considerada

2) function elemnn_kfold_predict_reshetovstyle() - Adicionei isto para Mikhail para seus experimentos, esta forma de combinar resultados de conjuntos é usada na neurônica Reshetov. Apenas classificação. Ele compara os resultados de todos os modelos e só dá uma resposta com uma determinada classe se todos os modelos derem a mesma previsão. Se pelo menos um modelo deu uma previsão diferente dos outros, a função retorna uma previsão de "não sei".

 
Já tens um resultado? Onde está o conselheiro?