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

 
Yuri, fui capaz de treinar um modelo vmr, mas não consigo prever novos dados sobre ele, podes dizer-me o que está errado? Eu seleciono o menu Load model, seleciono o arquivo train.vmr do atachment, depois clico em Use model. Vejo o texto "Introduza os dados e prima "OK" no registo. Mas é isso, não importa quais dados eu introduza, ainda vejo um botão Ok cinza inativo e não consigo obter uma resposta. Os arquivos train.csv e test.csv também estão em atache, eles são os que você postou anteriormente.
Arquivos anexados:
train.zip  38 kb
 
Dr. Trader:
Yuri, fui capaz de treinar um modelo vmr, mas não consigo prever novos dados sobre ele, podes por favor dizer-me o que está errado? Eu seleciono o menu Load model, seleciono o arquivo train.vmr do atachment, depois clico em Use model. Vejo o texto "Introduza os dados e prima "OK" no registo. Mas é isso, não importa quais dados eu introduza, ainda vejo um botão Ok cinza inativo e não consigo obter uma resposta. Os arquivos train.csv e test.csv também estão em atache, estes são os que você postou anteriormente.

Deve ter entrado algo não-numérico? Isso aciona um manipulador de exceções e desativa o botão OK. Nesse caso, você precisa reiniciar o jPrediction.

Vou analisar isto num futuro próximo para, pelo menos, dar algum tipo de mensagem de aviso quando um utilizador tiver introduzido dados não numéricos.

P/S Eu já o consertei.

Por exemplo, vamos inserir o símbolo "z" em vez do número. Isto resultará em uma mensagem de erro:

Para ativar o botão OK agora, selecione o item de menu Arquivo>Utilizar modelo:


Fiz o upload da versão corrigida para o meu site

 

Eu descobri, o erro estava no formato de dados errado. Eu formatei os dados como você fez no pdf - adicionei uma segunda linha com uma explicação, a primeira coluna com índices, e excluí o nome da coluna do preditor. Tudo funciona. O modelo é treinado em ambos os casos, tanto nos dados originais como nos dados formatados. Mas a previsão só funciona se os dados especialmente formatados forem alimentados para treinamento.

Mas infelizmente o seu modelo falhou o teste com os seus próprios dados. Você postou anteriormente arquivos train.csv e test.csv e teve um bom desempenho de previsão. Eu verifiquei, o erro de previsão é de 50%, nenhum bom desempenho.

Passos para o teste:

1) Formate o arquivo train.csv como acima. Depois divida fisicamente o ficheiro em dois - train_part1.csv e train_part2.csv. O segundo arquivo contém as últimas 20 linhas do train.csv. O primeiro ficheiro contém tudo o resto excepto as últimas 20 linhas, para que os dados nos dois ficheiros não se sobreponham.

2) Treine o modelo no train_part1.csv, entre no modo de previsão. Alimentar alternadamente linhas a partir do train_part2.csv para previsão. Só tive a resposta certa 9 em 20 vezes, sem milagres.

Não entendo porque é que se o próprio modelo divide o ficheiro de treino original em duas partes para treino e validação, então faz um teste fora de amostra e acaba com uma precisão de previsão de 100? E se você dividir fisicamente o arquivo de treinamento, e fizer o teste de amostra manualmente, então a previsão não é melhor do que atirar uma moeda ao ar? Se eu alimentar qualquer amostra da amostra de treinamento para a previsão, então a previsão funciona corretamente, ou seja, a função de previsão parece estar bem. Isto é tudo muito mau e errado, você tem alguns erros graves no seu código.

Arquivos anexados:
vmr_test.zip  44 kb
 
SanSanych Fomenko:

Só uma familiaridade muito superficial com R permitiria falar de "nags".

Claro, nós colocamos R e vemos um intérprete de cordas de caracteres. Se você for mais fundo, você pode ver o bytecode, mas ele não resolve nenhum dos problemas do intérprete em termos de eficiência. Não há sequer nada para discutir... chato.

Mas se você mergulhar um pouco nos pacotes R, você verá rapidamente que o que você vê no código R está se referindo a outro código. E se você começar a investigar, você verá que para algoritmos computacionalmente intensivos R sempre usa pacotes de terceiros, que foram escolhidos pelo princípio da máxima eficiência. Estas são geralmente bibliotecas C ou Fortran.

Ou, por exemplo, operações matriciais. Considerando que R não tem noção de escalar e tudo começa com vetores e a aritmética matricial é completamente natural para R, a questão de usar uma biblioteca apropriada que NÃO está escrita em R é uma questão de princípio. É utilizada a Biblioteca do Kernel Intel Math.

Para acrescentar a isto, cálculos paralelos não só a todos os núcleos do próprio computador, mas também aos computadores vizinhos, é uma operação comum em R.

Então, o que é "irritante" e o que não é, é uma grande questão.

PS.

Não tens de portar nada para o R, só tens de aprender a matemática. R tem tudo o que você precisa e muito mais do que isso.

Eu concordo com o SanSanych. Tudo o que você precisa para qualquer uma de suas idéias já está lá no R/.

O comentário arrogante de Reshetov não é surpreendente. É uma tal visão do mundo.

Não há necessidade de mudar de ideias. Não faz sentido.

 
Dr. Trader:

Não entendo porque é que se o próprio modelo divide o ficheiro de treino original em duas partes para treino e validação, então faz um teste fora de amostra e acaba com uma precisão de previsão de 100? E se você dividir fisicamente o arquivo de treinamento e fizer o teste de amostra manualmente, então a previsão não é melhor do que atirar uma moeda ao ar? Se eu alimentar qualquer amostra da amostra de treinamento para a previsão, então a previsão funciona corretamente, ou seja, a função de previsão parece estar bem. Isto é tudo muito mau e errado, você tem alguns erros graves no seu código.

Você está certo, há um erro no código. Eu vou corrigi-lo.
 
Vladimir Perervenko:

Eu apoio o SanSanych. Tudo o que você precisa para qualquer uma de suas idéias já está no R/.

Vou argumentar aqui, se me permitem, o que quer dizer "chato" é velocidade e concordo absolutamente com o Yuri...

Você pode encontrar uma solução pronta para R para quase qualquer problema, mas às vezes você está preso com a velocidade

Eu me lembro, eu estava fazendo uma busca muito difícil por muitos parâmetros através da função de correlação, a princípio eu usei a função R embutida (a propósito, ela é escrita em C++), mas como ela estava sobrecarregada com métodos diferentes, o cálculo de uma rodada do meu ciclo levou cerca de 3,9 minutos ou 230 segundos, esse tempo não era aceitável, o segundo passo era escrever minha própria função em R sem tudo mais, minha função funcionava com 30 segundos, mas não estava me satisfazendo, porque R era minha primeira e única linguagem, eu pedi ao meu amigo para escrever para mim uma função corr então vamos comparar

O fungo de correlação padrão em R é 230 seg.

função de correlação R autoescrita - 30 seg.

função escrita em C++ - 0,33 seg

Então sim Yuri está certo, R é uma caneca num contexto onde ele quis dizer isso, mas esse problema pode ser resolvido, e quanto a conveniência e velocidade de escrita de código, acho que R está longe de todas as línguas, pois eu não tenho que escrever nada, tudo está pronto, é por isso que eu gosto de R ...

 
mytarmailS:

Vou argumentar aqui, se me permite, o incómodo é em termos de velocidade e concordo absolutamente com o Yuri...

É provável que você encontre uma solução pronta para quase qualquer problema, mas às vezes você está preso com a velocidade.

Eu me lembro, eu estava fazendo uma busca muito difícil por muitos parâmetros através da função de correlação, a princípio eu usei a função R embutida (a propósito, ela é escrita em C++), mas como ela estava sobrecarregada com métodos diferentes, o cálculo de uma rodada do meu ciclo levou cerca de 3,9 minutos ou 230 segundos, esse tempo não era aceitável, o segundo passo era escrever minha própria função em R sem tudo mais, minha função funcionava com 30 segundos, mas não estava me satisfazendo, porque R era minha primeira e única linguagem, eu pedi ao meu amigo para escrever para mim uma função corr então vamos comparar

A função de correlação padrão em R é 230 seg.

função de correlação R autoescrita - 30 seg.

função escrita em C++ - 0,33 seg

Então sim Yuri está certo, R é um chato num contexto onde ele quer dizer isso, mas este problema está resolvido, e quanto à conveniência e rapidez de codificação, acho que R está longe de todas as línguas, pois quase não tenho que escrever nada, tudo está pronto, é por isso que eu gosto de R ...

Então o que é que isto tem a ver com o R?

Mais uma vez, R tem tudo o que você precisa para implementar suas idéias, incluindo a velocidade.

Outra coisa é que nem todos e nem tudo sabe como usá-los.

Mas isto não é um problema de linguagem.

A propósito, a comodidade e simplicidade das funções em linha na Srr é surpreendente.

Boa sorte.

 
mytarmailS:

Vou argumentar aqui, se me permite, o incómodo é em termos de velocidade e concordo absolutamente com o Yuri...

É provável que você encontre uma solução pronta para quase qualquer problema para R, mas às vezes você está preso com a velocidade.

Eu me lembro, eu estava fazendo uma busca muito difícil por muitos parâmetros através da função de correlação, a princípio eu usei a função R embutida (a propósito, ela é escrita em C++), mas como ela estava sobrecarregada com métodos diferentes, o cálculo de uma rodada do meu ciclo levou cerca de 3,9 minutos ou 230 segundos, esse tempo não era aceitável, o segundo passo era escrever minha própria função em R sem tudo mais, minha função funcionava com 30 segundos, mas não estava me satisfazendo, porque R era minha primeira e única linguagem, eu pedi ao meu amigo para escrever para mim uma função corr então vamos comparar

A função de correlação padrão em R é 230 seg.

função de correlação R autoescrita - 30 seg.

função escrita em C++ - 0,33 seg

Então sim Yuri está certo, R é uma caneca num contexto onde ele quer dizer, mas este problema está resolvido, e quanto à conveniência e rapidez de codificação, acho que R está longe de todas as línguas, pois quase não tenho que escrever nada, tudo está pronto, é por isso que eu gosto de R ...

Não vamos substituir perguntas gerais por um exemplo em particular.

Se estamos falando em geral da eficiência do código no SISTEMA de programação R, eu escrevi sobre os princípios básicos da eficiência. Ao contrário da maioria dos sistemas de programação, os algoritmos computacionalmente intensivos em R são usados indiretamente e são usados da forma mais eficiente na programação em geral, dentro de algumas funções de conteúdo, embora haja a possibilidade de usá-los diretamente, por exemplo, otimização ou AG.

O exemplo mais claro de tal eficiência são as operações matriciais que pertencem às operações computacionalmente mais capacitivas. Um programador pode não estar ciente de que a biblioteca está sendo utilizada porque uma operação matricial é apenas uma simples linha de código.

Além disso, o que eu não escrevi no meu post sobre eficiência é sobre o que você escreveu. É a capacidade de escrever um pedaço de código snr, enfatizando que a estrutura do R é tal que esta inserção será uma adição orgânica ao código principal. E o exemplo que você deu é muito típico do R.

 
OK, sugiro encerrar o tema da eficiência R, porque já estamos começando a repetir o óbvio, e o significado é "óleo, céu é azul, grama é verde".
 

Olá!

Encontrei um pacote com rede neural recorrente https://cran.r-project.org/web/packages/rnn/rnn.pdf, foi interessante verificá-lo nos meus dados (talvez outra pessoa estivesse interessada ;) ) Mas encontrei algo que nunca tinha encontrado antes, pois a rede recorrente é alimentada com os dados de uma forma especial na forma de um array 3D, apesar de haver um exemplo, ainda não consigo entender como funciona

como o código deve ficar na variável "X" se eu não tiver 2 preditores mas 100, aqui está um pedaço do exemplo:

#  create training numbers
X1 = sample(0:127, 7000, replace=TRUE)
X2 = sample(0:127, 7000, replace=TRUE)
#  create training response numbers
Y <- X1 + X2
#  convert to binary
X1 <- int2bin(X1)
X2 <- int2bin(X2)
Y <- int2bin(Y)
#  Create 3 d array: dim 1: samples; dim 2: time; dim 3: variables.
X <- array( c(X1,X2), dim=c(dim(X1),2) )