Encontrar um conjunto de indicadores para alimentar as entradas da rede neural. Discussão. Uma ferramenta para avaliar os resultados. - página 5

 
joo писал(а) >>

Por que eles não podem ser vistos? As diferenças são visíveis. Não há supersaturação de neurônios quando é escolhida a faixa de busca correta. "Você simplesmente não sabe como cozinhá-los"(c) :)

Para diferentes complexidades de tarefas, haverá diferentes otimizações de ferramentas, como você notou corretamente (chaves de fenda).

Sobre o tema da seleção de faixa é muito discutível. GA é muito longo, muito mais longo que ORO - outro inconveniente.

Interessante conhecer sua técnica para selecionar uma faixa de escala, ou o que você é guiado por

joo escreveu >>

Haverá diferentes ferramentas ótimas para diferentes complexidades, como você aponta corretamente (chaves de fenda).

GA não é para NSs. Para a NS-th tem seus próprios métodos de treinamento (otimização). Pelo menos simplesmente porque você não pode usar CV como com ORO.

 
rip >> :

Correto, o algoritmo genético não usa a função de erro para ajustar os pesos.

Tanto quanto eu entendi, você poderia marcar o m5 pelo lucro máximo que pode estar no histórico e usar esta margem como uma função de adequação.

É exatamente assim que se parece a função pela qual se estima um indivíduo.

>> assim :)

 public double evaluate( IChromosome a_subject) {
        this. NNWeights=new double[ a_subject. size()]; //создаем вектор весов для нейросети
        for (int i=0; i<this. NNWeights. length; i++)
        {
            DoubleGene g= ( DoubleGene) a_subject. getGene( i);
            this. NNWeights[ i]= g. doubleValue(); //заполняем вектор весов для нейросети
        }
        net. SetWeights(this. NNWeights); //устанавливаем веса нейросети
        Trade trade =new Trade();
        for ( int i=0; i<this. csv. CSVInputs. length; i++)
        {
            trade. TradeCurrentSignal( net. ComputeForOneNeuronOutLayer(this. csv. CSVInputs[ i]),this. csv. CSVPrice[ i]);
        }
        
      return 1000000+ trade. Profit; //целевая функция должна быть >0
    }
 
rip >> :

É uma questão de erro de amostragem de teste. Ou seja, você tira no próximo mês após a amostra de treinamento. Você o marca de acordo com seu algoritmo. Você alimenta as saídas para a rede treinada. Você compara os resultados. Esse é exatamente o gráfico desses erros que nos interessam.


Você também pode obter o gráfico de erro da amostra de treinamento e estimar o processo de aprendizagem de sua rede (ou o desenvolvimento de gerações no algoritmo genético).

Ao treinar, eu aprendo até que a função alvo aumente ou até que eu me aborreça (a tempo). eu cuido do treinamento indiretamente - a amostra de treinamento é muito maior que os pesos na rede neural. então, eu descarrego para .mq4 ( aqui, pode haver um erro... Estou testando ... tudo funciona corretamente) e veja com o testador de estratégia MT4 o que ele resulta.

"comparando o resultado" - esta é a parte do seu pensamento que eu não entendo... Não entendo esta parte de seu pensamento. De que adianta re-treinar intencionalmente a rede e comparar seu resultado com o resultado da rede treinada durante os períodos anteriores?

 
rip >> :

Mostrar o resultado quando você compara todos os conjuntos que você alimenta com as entradas :) Penso que tudo estará altamente correlacionado. Todos os indicadores apresentados utilizam os mesmos dados de entrada para o cálculo.

Não estou comparando todos os conjuntos.... Mesmo passando por 200 conjuntos de entradas, na verdade há mais, é longo e faz pouco sentido, pois você pode perder alguma coisa.

 
iliarr >> :

Ao treinar, eu aprendo até que a função alvo aumente ou até que eu me aborreça (a tempo). eu cuido do treinamento indiretamente - a amostra de treinamento é muito maior que os pesos na rede neural. então, eu descarrego para .mq4 ( aqui, talvez, há um erro... eu testo) e uso o testador de estratégia MT4 para ver qual é o resultado.

"Não entendo esta parte do seu pensamento... Não entendo esta parte de seu pensamento. O que eu quero fazer é reciclar a rede propositadamente e comparar seu resultado com o resultado da rede treinada durante os períodos anteriores.


Por que se reciclar?! Há uma amostra na qual você está treinando a rede. Agora simule seu funcionamento, alimente a rede com uma amostra com a qual não esteja familiarizada e compare o resultado obtido da rede com o esperado para a amostra de teste.

 
rip >> :

Por que se reciclar?! Há uma amostra na qual você está treinando a rede. Agora simule seu funcionamento, alimente a rede com uma amostra com a qual não esteja familiarizada e compare o resultado obtido da rede com o esperado para a amostra de teste.

O que você está sugerindo determinará as capacidades preditivas da rede treinada, não a qualidade do treinamento... e as capacidades preditivas de uma rede depende não só da qualidade do treinamento, mas também da estrutura da rede, como a rede interpreta o que produz e que informações ela alimenta.

 
iliarr >> :

Mas no Forex, o resultado do que você sugere determina as capacidades preditivas da rede treinada, não a qualidade do treinamento... enquanto as capacidades preditivas de uma rede dependem não apenas da qualidade do treinamento, mas também da estrutura da rede, de como você interpreta sua saída e das informações que você alimenta na rede.

Ahem... O que isso tem a ver com a capacidade de previsão? Você tem uma rede, você tem sua rede com uma interpretação assumida de suas respostas.

Com base em seu código, a classe Trade() simula o processo de negociação de uma forma ou de outra. Abrir uma posição, manter uma posição, fechar uma posição.

>> Com base nisso, você decide o quanto é adequado para você o indivíduo em questão. Então você inicialmente estabeleceu algum tipo de regra

de interpretar os resultados.

 
iliarr >> :

não posso comparar todos os conjuntos.... Experimentar até mesmo 200 conjuntos de entradas, na verdade há mais, é longo e faz pouco sentido, pois você pode perder alguma coisa.

Hm ... A idéia de uma amostra de treinamento:(Próximo preditor de preço usando a Rede Neural )


ntr - de conjuntos de treinamento

lb - última barra


// Preencher as matrizes de entrada com dados; neste exemplo nout=1
for(i=ntr-1;i>=0;i--)
{
outTarget[i]=(Open[lb+ntr-1-i]/Open[lb+ntr-i]-1.0);
int fd2=0;
int fd1=1;
for(j=nin-1;j>=0;j--)
{
int fd=fd1+fd2; // usar Fibonacci: 1,2,3,5,8,13,21,34,55,89,144...
fd2=fd1;
fd1=fd;
inpTrain[i*nin+j]=Open[lb+ntr-i]/Open[lb+ntr-i+fd]-1.0;
}
}

 
rip >> :

Hm ... A idéia de uma amostra de treinamento:(Próximo preditor de preço usando a Rede Neural )


ntr - de conjuntos de treinamento

lb - última barra


// Preencher as matrizes de entrada com dados; neste exemplo nout=1
for(i=ntr-1;i>=0;i--)
{
outTarget[i]=(Open[lb+ntr-1-i]/Open[lb+ntr-i]-1.0);
int fd2=0;
int fd1=1;
for(j=nin-1;j>=0;j--)
{
int fd=fd1+fd2; // usar Fibonacci: 1,2,3,5,8,13,21,34,55,89,144...
fd2=fd1;
fd1=fd;
inpTrain[i*nin+j]=Open[lb+ntr-i]/Open[lb+ntr-i+fd]-1.0;
}
}

Obrigado. Vou dar uma olhada.

 

IlyaA писал(а) >>

O público precisa ver uma dependência gráfica do erro de aprendizagem em relação ao tempo (número de épocas).

->

iliarr escreveu(a) >>
devemos estar falando de coisas diferentes... Não estou ensinando com um professor (há um erro de aprendizagem nesta forma de ensinar)... Estou ensinando ao máximo a função alvo e não sei qual é o valor máximo possível da função alvo.

->

rip escreveu >>

Estamos falando de erro de amostragem de teste. Isto é, você toma o próximo mês após a amostra de treinamento. Você o marca, de acordo com seu algoritmo. Você alimenta as saídas para a rede treinada. Você compara os resultados. Esse é o gráfico de erros que nos interessa.

Você também pode obter um gráfico de erro da amostra de treinamento e estimar como sua rede está aprendendo (ou o desenvolvimento de gerações no algoritmo de gênero está acontecendo).

Parece que o rip e a IlyaA não parecem entender que o iliarr está usando um método de ensino sem um professor. De que tipo de erro de aprendizagem estamos falando quando a função alvo é o lucro? Ou ambos acham que, tendo treinado a rede sobre a história, você deveria executá-la sobre um histórico de testes e comparar o lucro obtido? O lucro será diferente, menos ou mais, mas diferente. O histórico dos testes é diferente. Não confundir com aproximação, por favor, onde o critério de qualidade da aproximação é o desvio padrão da função original e da função obtida.


StatBars escreveu :>>

ORO quando um neurônio fica saturado praticamente pára de "treiná-lo", enquanto a GA pode facilmente saturar demais um neurônio e continuar a aumentar ainda mais o peso do neurônio.

->

StatBars escreveu >>

No que diz respeito à seleção de faixa, é muito discutível. GA é muito longo, muito mais longo que ORO - outro inconveniente.

->

StatBars escreveu(a) >>

GA não é para NSs. Para os NSs, há seus próprios métodos de aprendizagem (otimização). Se pelo menos porque você não pode usar CV como com ORO.

Eu não entendo por que uma atitude tão inquestionável?

Aqui estão alguns links que surgiram em uma busca que diz o contrário:

http://alglib.sources.ru/dataanalysis/neuralnetworks.php

http://network-journal.mpei.ac.ru/cgi-bin/main.pl?l=ru&n=13&pa=10&ar=3

http://masters.donntu.edu.ua/2004/fvti/solomka/library/article2.htm

http://www.neuropro.ru/memo314.shtml


Eu não disse e não afirmo que a GA é a única solução de otimização correta para todos os problemas. É simplesmente mais versátil do que qualquer outra solução, e muitas vezes mais rápida, facilmente adaptável a quase qualquer tarefa. Outra questão, legítima, é qual é o número mínimo de corridas de uma função de aptidão física necessária para encontrar a solução ideal. É disto que deveríamos estar falando, não da velocidade dos algoritmos de otimização propriamente ditos. E aqui a GA irá superar a maioria dos outros algoritmos.

Posso abrir uma linha separada, se alguém estiver interessado, onde posso postar interessantes funções de teste para algoritmos de otimização e os resultados de vários algoritmos. Penso que será muito útil não apenas para aqueles que lidam com a NN, mas para qualquer um que queira obter um resultado ótimo de seus esforços de muitas maneiras.

StatBars escreveu :>>

Interessante ouvir sua técnica para selecionar uma gama de pesos, ou o que você é guiado por

Em Maple ou Mathca eu olho para a gama de pesos em que a função de ativação funciona. Se o escopo de alguma função é [-1;1], de que adianta "pesquisar", por exemplo, em tal faixa de (-100;100) variáveis?