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

 
elibrarius:

Pergunta para especialistas de R.

Como pode uma matriz com valores absolutos ser convertida em uma matriz de classe softmax?

apply(matr, 1, function (rowvec) { result <- rep(0, length(rowvec)); result[which.max(rowvec)] <- 1; result } )

E transpor conforme necessário, dependendo da dimensionalidade da matriz.

 
Maxim Dmitrievsky:

Ah, bem, ainda não há bibliotecas... Não posso escrevê-las eu mesmo )


acho que vou escrevê-los e pedir-lhes para me emprestarem um neuronete, se funcionar, vou pagá-los com % :)

A propósito, eles estão um pouco mais próximos do original, pelo menos acrescentaram mediadores, mas ainda não é IA, pois novas sinapses não se formam e não se reconstróem sozinhas, tanto quanto eu entendo.

 
Maxim Dmitrievsky:

Estou pensando em escrever a eles, pedindo emprestado uma rede neural, e se funcionar, eu os pagarei de volta com juros :)

Eu acho que se não houver progresso nas soluções com MLPs simples, não haverá nenhum com NSs complexas. Além disso, mesmo que você substitua o MLP por um NS mais complexo, está longe de ser certo que o resultado irá melhorar de alguma forma. Porque uma ferramenta diferente requer um tratamento diferente, uma formulação diferente do problema.

Por enquanto vou me ater a simples MLP e a antigos algoritmos de aprendizagem baseados em BP, e verei se a real necessidade surge.

 
anónimo:

e transpor conforme necessário, dependendo da dimensionalidade da matriz

Uau, muito mais curto! Obrigado!

Eu mudei um pouco, estou criando uma nova matriz copiando da antiga, para que os nomes das colunas e linhas permaneçam. Isso é mais universal, para o caso de eu precisar de as usar mais. E eu reverto imediatamente a matriz. Como eu entendo, aplique(x,1,f) sempre! inverte a matriz, pois ela processa os dados linha por linha e os combina em colunas.

get_softmax <- function(m){
    t(apply(m, 1, function (row) {r <- row;  r [1:length(row)] <-0 ; r[which.max(row)] <- 1;  r } ))
}

 
Yuriy Asaulenko:

Eu acho que se não houver mudança nas soluções com MLPs simples, não haverá nenhuma com NSs complexas. Além disso, mesmo que você substitua o MLP por um NS mais complexo, está longe de ser certo que o resultado irá melhorar de alguma forma. Porque uma ferramenta diferente requer um tratamento diferente, uma formulação diferente do problema.

Por enquanto vou me ater a simples MLP e antigos, BP, algoritmos de treinamento, e veremos se a real necessidade surge.


Eu só gosto quando tudo é contado rápido, você pode tentar muitas estratégias.

Se eu tivesse um analógico mais produtivo mudaria para ele... Mas agora é 90% de mineração de dados e 10% de seleção de modelos.

 
Maxim Dmitrievsky:

Eu só gosto quando tudo é contado rapidamente, você pode passar por muitas estratégias.

Se eu tivesse um analógico mais produtivo mudaria para ele... até agora 90% do tempo é apenas datamining e 10% de seleção de modelos.

Quanto ao desempenho, o tempo de resposta de um MLP treinado de 6 camadas (~60 neurónios) é de 0,005s. É o suficiente para quase tudo.

Quanto ao tempo de aprendizagem, que é longo, não é uma preocupação, pois leva muito mais tempo apenas para pensar em cada experiência seguinte - uma semana, ou até mais.

Bem, re-treinamento a cada poucos meses, digamos que passamos alguns dias - eu não acho que isso seja um problema. Redobrar o sistema na lógica leva muito mais tempo. Sim, e apenas o treinamento padrão não funciona - você precisa de uma longa dança de pandeiro entre as épocas. Enquanto o treinamento padrão (sem dança) dá bons resultados, mas apenas em uma amostra de treinamento).

 

Outro problema com o R.

Em um computador está tudo bem, no outro há alguns requisitos acrescidos para a correção do código.

Por exemplo

darch.unitFunction = linearUnit - causou a queda do Rterm.exe

transformado em

darch.unitFunction ="linearUnit" (unidade linear)

este ponto começou a passar antes do próximo erro.

Também teve que mudar de biblioteca(darch) para requerer(darch)

Agora é a própria aprendizagem que é uma chatice.

R_NN <- darch(
darch = NULL,
x = MatrixLearnX ,
y = MatrixLearnY ,
paramsList = params
)

Eu tentei muitas variantes, o Rterm.exe sempre falha.

O R tem algum tipo de controle de nível de erro? Talvez no segundo PC eu tenha um nível de erro para resolver quando parar em cada aviso?

Em ambos os computadores eu instalei R com as configurações padrão, instalei todos os pacotes.
Como posso consertá-lo?

 

Se a biblioteca darch não estiver instalada, a library(darch) causará um erro e a execução do código irá parar, e o(darch) irá apenas empenar e o código continuará a funcionar, mas como a biblioteca não está instalada, suas funções não podem ser chamadas.

O próximo passo é correr
install.packages("darch", dependências=TRUE) para instalar automaticamente a biblioteca

 
Yuriy Asaulenko:

Quanto ao desempenho, o tempo de resposta de um MLP treinado de 6 camadas (~60 neurónios) é de 0,005s. É bastante suficiente para quase tudo.

Quanto ao tempo de aprendizagem, que é longo, não incomoda nada, pois leva muito mais tempo para pensar em cada próxima experiência sozinho - uma semana, ou até mais.

Bem, re-treinamento a cada poucos meses, digamos que passamos alguns dias - eu não acho que isso seja um problema. Redobrar o sistema na lógica leva muito mais tempo. Sim, e apenas o treinamento padrão não funciona - você precisa de uma longa dança de pandeiro entre as épocas. E o treinamento padrão (sem dançar) dá ótimos resultados - mas apenas em uma amostra de treinamento).


Estou fazendo isso um pouco errado - uso ativamente o otimizador exatamente para estratégias de busca, ou seja, experimentar chips, combinações de blocos TS, algo mais... Porque às vezes até falho em levar em conta alguma bagatela, que é exatamente o que perdi no sistema. E para passar mesmo uma centena de opções requer uma velocidade de aprendizagem considerável (e 100 opções é muito pequena) ... Bem, cada um tem a sua própria abordagem, não estou a dizer que a minha é melhor. Claro, você pode dizer que NS é um otimizador em si, mas há sempre alguns hiperparâmetros, que podem ser escolhidos na fase inicial

 
Maxim Dmitrievsky:

Estou usando ativamente o otimizador para pesquisar estratégias, ou seja, para pesquisar através de chips, combinações de blocos TS, algo mais... porque às vezes há até mesmo algo pequeno que eu não considerava, e que estava faltando no sistema. E para passar mesmo uma centena de opções requer uma velocidade de aprendizagem considerável (e 100 opções é muito pequena) ... Bem, cada um tem a sua própria abordagem, não estou a dizer que a minha é melhor. É claro que você pode dizer que NS é um otimizador em si, mas há sempre um número de hiperparâmetros que você pode pegar na fase inicial.

Por isso, em breve terá de ter uma quinta mineira para estratégias de mineração.