Discussão do artigo "Floresta de Decisão Aleatória na Aprendizagem por Reforço" - página 6

 
mov:

Boa tarde,

Estou postando os resultados de alguns experimentos (obtidos em árvores puras sem lógica fuzzy, pensei em anexá-los a um novo artigo, mas como a discussão sobre funções de recompensa continua, estou postando-os como informação para reflexão e discussão).

1) Não me pareceu muito correto que, digamos, na VENDA o valor aleatório seja definido em todo o intervalo 0...1, porque já sabemos que as vendas não são lucrativas

Ao limitar os intervalos a valores opostos e incertos, a velocidade do aprendizado aumenta muitas vezes. Com 2-3 execuções (acredito que com uma passagem em dados aleatórios), a qualidade do treinamento é a mesma que com 4-6 execuções (a dispersão é grande, porque há muitos fatores adicionais, mas a eficiência não aumentou nem mesmo em dezenas de por cento).

2. Na implementação inicial, achei estranho o fato de o valor obtido aleatoriamente ser um fator de reforço. Isso cria facilmente uma situação em que uma tendência forte tem uma recompensa menor.

A primeira tentativa de evitar isso

Ideia: a 100 pips e acima do lucro obtido - 1, se menor - aumentando uniformemente (nesse caso, a partir de 0,61). O pdl adequado para venda e para compra é semelhante ao de outros níveis. Teoricamente, para uma tendência mais forte - maior recompensa. Os resultados melhoraram, mas um pouco mais do que o erro estatístico. Ao mesmo tempo, o arquivo com a árvore para as mesmas condições diminuiu significativamente de tamanho. Aparentemente, essa classificação peculiar dos resultados permitiu descrever as regras de forma mais simples.

Para testar o conjunto de árvores, decidi carregar a estimativa de uma árvore

e, por hábito, executei o treinamento. Qual não foi a minha surpresa: em um treinamento semelhante com uma função de recompensa mais grosseira, houve uma melhoria significativa - no gráfico treinado, mantendo-se todas as outras coisas iguais, o lucro de 4 meses excedeu o lucro de 6 meses da variante antiga (estou fazendo comparações, pois os números específicos variam muito em relação às condições de treinamento, ao par, à curvatura das alças do codificador) e, o que é mais interessante, os resultados no intervalo de controle melhoraram. Carregar a função de avaliação melhorou a previsão! Provavelmente, para um estatístico profissional, não há nada de novo aqui e ele pode provar por meio de fórmulas que deve ser assim, mas para mim é um choque, como dizem, é necessário se acostumar com isso. Isso levanta a questão da seleção e avaliação adicionais das funções de previsão.

Espero que o tempo que gastei nos testes ajude alguém a reduzir o tempo de sua pesquisa, pelo menos (ou dê a oportunidade de cometer novos erros, que serão compartilhados conosco).

Resultados interessantes, obrigado. O primeiro ponto foi, sim, a velocidade do aprendizado aumenta. Na verdade, a classe em que estou trabalhando agora já está aprendendo efetivamente em 1 iteração. Ou seja, é um algoritmo supereficiente em termos de velocidade de aprendizado, mas ainda vale a pena organizar o pré-processamento interno para que o modelo não seja muito treinado.

Não entendi, na parte destacada, o que significa carregar a estimativa de uma única árvore? Você quer dizer que dá apenas 0 e 1 como rótulos de classe? Nesse caso, podemos presumir que a variação dos valores dentro do modelo diminuiu e, consequentemente, a qualidade aumentou. O algoritmo foi originalmente projetado para um grande número de iterações, mas, na prática, verifica-se que isso não é necessário e que esse carregamento pode estar correto.

 
Igor Makanu:

E quão realista é ensinar esse código, gentilmente fornecido pelo autor do artigo, para os padrões mais simples de 3 a 5 barras?

SZY: hmm, mesmo sob efeito de álcool, estou escrevendo como no Aliexpress para um vendedor chinês ))))

Tudo é real, você insere padrões de 3 a 5 compassos.

 
Maxim Dmitrievsky:

Tudo é real, você alimenta a entrada com padrões de 3 a 5 barras

Eu serei breve..... Como?

 
Igor Makanu:

Serei breve..... como?

à mão)

 
Maxim Dmitrievsky:

Não entendo o que significa carregar a avaliação de uma única árvore. Você quer dizer que dá apenas 0 e 1 como rótulos de classe?

Sim, o teste foi realizado com uma árvore e rótulos 0 e 1. (Em um conjunto de árvores semelhantes, o resultado é ainda maior).
 
mov:
Sim, o teste foi realizado com uma árvore e os rótulos 0 e 1. (Em um conjunto de árvores semelhantes, o resultado é ainda maior).
Desculpe, naturalmente com uma floresta de árvores (quero dizer sempre uma floresta, e no nível cotidiano eu digo árvore, vou me livrar desse hábito).
 
mov:
Desculpe, naturalmente com uma floresta de árvores (quero dizer sempre uma floresta, e em um nível doméstico dizendo árvore, vou me livrar desse hábito)

Sim, entendi. Mas a floresta também pode ser definida como 1 árvore ou retirar sua função de construção. Não sei por que isso é necessário.

 

Inicialmente, tentei aumentar o número de árvores para 500 e 1000. Mas percebi que cada vez mais árvores não melhoravam os resultados. Mas o que vejo internamente é que, ao exceder 500 árvores, a otimização continua travando e não cria arquivos de texto Mtrees.

Além disso, fiz o teste aumentando o número de 50 para 100 e percebi que os melhores resultados estão em iterações entre 20 e 25 iterações, e qualquer coisa além disso não faz sentido.

Mas tenho de concordar que o período do RSI resulta em diferentes combinações.

hnd1 = iRSI (_Symbol, 0,8, PRICE_CLOSE);

hnd2 = iRSI (_Symbol, 0,16, PRICE_CLOSE);

hnd3 = iRSI (_Symbol, 0,24, PRICE_CLOSE);


Então, pensei em adicionar outro ao MTrees para uso futuro. Mas, mais tarde, percebi que o EA armazena os valores da última iteração. Se for o caso, podemos alterar o período. Quero dizer, a EA deve ser capaz de mudar imediatamente para outro período de RSI se houver uma perda.

Além disso, não sou muito versado em lógica difusa. Por isso, gostaria de saber se alguém pode postar o código-fonte completo sem a lógica difusa, e agradeceria se não for possível encontrar o código correto para o RDF sem a lógica difusa e um indicador de exemplo.

Estou curioso para ver o que acontece com os resultados se fornecermos de 20 a 30 valores de indicadores como entrada para o agente e o treinarmos automaticamente.

 
FxTrader562:

Inicialmente, tentei aumentar o número de árvores para 500 e 1000. Mas percebi que cada vez mais árvores não melhoravam os resultados. Mas o que vejo internamente é que, ao exceder 500 árvores, a otimização continua travando e não cria arquivos de texto Mtrees.

Além disso, fiz o teste aumentando o número de 50 para 100 e notei que os melhores resultados estão em iterações entre 20 e 25 iterações e nada além disso faz sentido.


Estou curioso para ver o que acontece com os resultados se fornecermos de 20 a 30 valores de indicadores como entrada para o agente e o treinarmos automaticamente.

Há resultados experimentais na Web, 100 árvores é o melhor reconhecimento, 20-50 se a previsão for necessária, tentei com 100, a previsão fica pior.

Tentei 15-19 indicadores na entrada, na expectativa de que, quando a situação mudar, a floresta selecionará os melhores durante o treinamento. A partir de 10, os resultados param de crescer. Observe que, ao criar a floresta para cada árvore, apenas metade das entradas é usada (nessa implementação da floresta). Parece que, teoricamente, a raiz do número de entradas (e não a metade) é melhor para as tarefas de classificação (como dizem), mas eu mesmo não tentei.

 
mov :

A rede tem os resultados de experimentos, 100 árvores - o melhor reconhecimento, 20-50 - se a previsão for necessária, tentei com 100, a previsibilidade está piorando.

Tentei 15-19 indicadores na entrada, calculando que, se a situação mudar, a floresta escolherá o melhor durante o treinamento. Já com 10 ou mais, os resultados deixam de crescer. Observe que, ao criar uma floresta, apenas metade das entradas é usada para cada árvore. Parece que, teoricamente, para problemas de classificação (como dizem), a raiz do número de entradas (em vez da metade) é melhor, mas ele não tentou.

Obrigado por sua resposta.

No entanto, quero saber o que acontece se pudermos saber tudo (15 a 20 indicadores) de uma vez e NÃO usarmos apenas os poucos indicadores para o agente, mas devemos usar todos os indicadores. E, em seguida, treinar o agente durante o último ano para que ele possa desenvolver a melhor política usando todos os indicadores. Quero dizer que devemos determinar o estado atual do agente a cada fechamento de vela com mais valores de indicadores.

Até agora, o que notei é que uma perda está eliminando a série de pequenos lucros devido à falta de condições de saída adequadas. Portanto, as condições de entrada e saída precisam ser bem ajustadas.

Você pode me fornecer um exemplo de código de um indicador sem lógica difusa e onde colocar o indicador na implementação atual do código?

Tentei adicionar os indicadores dentro da função OnTick (), mas isso não ajudou muito. Estou procurando um código de exemplo completo da versão atual do EA sem lógica difusa.