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

 
Renat Fatkhullin:

1) Infelizmente, você formulou a pergunta de forma incompleta e obteve uma resposta não examinada e breve e educada "não importa".

Você queria uma resposta "tão de acordo/convenção", formulando-a na própria pergunta. Mas Duncan escapou com "o que está certo" da primeira vez e repetiu-o da segunda vez.

2) Você não obteve confirmação de precisão em R e não obteve uma resposta sobre o porquê de o resultado ser diferente em outros pacotes. Parsing a pergunta "por que a resposta é diferente em outros pacotes" é mais importante e é capaz de revelar o tópico.


3) A nossa posição:

выражение для dgamma

(x)= 1/(s^a Gamma(a)) x^(a-1) e^-(x/s)

for x ≥ 0, a > 0 and s > 0


в точке 0 является неопределенным.

R acredita que você pode incluir este ponto no cálculo, mas tome os valores limite mesmo que sejam infinitos como no caso de dgamma(0,0.5,1).

No entanto, se calcularmos as probabilidades dadas o infinito no ponto zero, todos os integrais do dgamma tornam-se formalmente infinitos e por esta lógica o pgamma deve ser igual ao infinito para todos os valores de x.

No entanto, isto contradiz os resultados do pgamma, onde todos os valores acabam por ser finitos. Estão corretas, como se no ponto x=0 a densidade fosse suposta ser 0.

1) Sim, eu não recebi uma resposta detalhada. Embora eu tenha resumido... Não estou a impor a minha opinião, também estou cansado de discutir, para ser honesto. Vou chamar a vossa atenção para o facto de que as palavras desta pessoa foram quase textualmente a nossa mensagem original. Como determinar a densidade no ponto extremo não é importante, o principal é calcular os integrais corretamente:

Declaramos que, estritamente falando, a densidade da distribuição gama no ponto zero é indefinida. E tomando o limite à direita, a densidade é igual a um.

À luz disto, pensamos que a afirmação "erros de cálculo em R" não é correcta. Mais precisamente, é uma questão de convenção: o que deve ser considerado igual à expressão zero ao poder do zero. Equalizar a densidade da distribuição gama a zero no ponto zero não parece ser nenhuma prática condicional.

2) Nem sequer se falou em precisão da minha parte. A densidade no ponto zero não tem a ver com precisão; tem a ver com a forma como a deriva em resultado da função - não convergência (NaN) ou iguala-a ao limite ou a zero. O ponto principal é que não importa para o cálculo do integral.

3) Releio o texto corrigido do artigo. E estou contente por teres decidido não considerar o comportamento do dgamma como um erro.

Mas isto :

todos os integrais do dgamma tornam-se formalmente infinitos e por esta lógica o pgamma deve ser igual ao infinito para todos os valores de x.

Estranho, Renat.

pgamma em princípio não pode ser infinito, uma vez que o ingegral é delimitado de cima por um valor de 1.

Toma a distribuição normal. É definido em [-inf,+inf]. Integral da função de distribuição = 1 ao longo deste intervalo. Mas de alguma forma acontece que a soma (integração) da densidade em saport infinitamente grande não resulta em soma infinita. Embora a densidade em todo o keepport != 0 em qualquer região.

E para dgmamma o ponto x ==0 com a sua densidade == inf (e a propósito, não consideraste o caso em que a densidade tende a 1 neste ponto e que conclusões sobre a integração tiras daí...) com que frequência é que isso acontece? Eu diria que não. A probabilidade de realização de uma variável aleatória em qualquer ponto == 0 em qualquer distribuição contínua... Todos os estaticistas sabem disso. A densidade é considerada como uma aproximação da probabilidade a uma região infinitesimal em torno de x.

Deste facto resulta que por muito grande que seja a densidade no ponto extremo, o seu efeito sobre o ingral total = 0. Pense sobre isso...

Acho que estás a pensar demais. ) Mas eu não vou discutir e descobrir. Talvez um dia eu mesmo me aperceba e responda em vez do Duncan. )

Obrigado.

 

R é um sistema incrível que me abriu pessoalmente os olhos para o quão longe estávamos no MetaTrader/MQL das necessidades reais de "fazer cálculos complexos simples e agora mesmo".

Nós (desenvolvedores C++) temos a abordagem "você mesmo pode fazer tudo e nós lhe damos a base de baixo nível e a velocidade dos cálculos" em nosso sangue. Somos fanáticos por desempenho e somos bons nisso - MQL5 é ótimo em 64 bits.

Quando comecei a trabalhar em R eu mesmo percebi que precisava do maior número possível de funções poderosas numa só linha e de ser capaz de fazer investigação em geral.

Então, demos uma volta brusca e começámos a actualizar o MetaTrader 5:

  • incluiu as bibliotecas matemáticas Alglib e Fuzzy, previamente reescritas, na entrega padrão, cobertas com testes unitários
  • desenvolveu um análogo de funções estatísticas de R, realizou testes e os cobriu com testes. o trabalho ainda está em andamento e a biblioteca está se expandindo
  • desenvolveu a primeira versão beta da biblioteca de gráficos como um análogo de gráficos em R. adicionou funções de linha única para uma saída rápida
  • começou a alterar as interfaces nas janelas de saída do terminal para permitir o tratamento de dados tabulares, alterou o sentido de saída, adicionou o desligamento de colunas desnecessárias, alterou a fonte para mono espaçamento na janela de saída do Expert Advisor
  • uma poderosa função ArrayPrint para impressão automática de matrizes, incluindo estruturas, foi adicionada.
  • adicionadas as funções FileLoad e FileSave para salvar/leitura rápida de arrays em um disco.


Claro que estamos no início do caminho, mas o vetor certo do esforço já está claro.

 

Sete passos na integração certamente não é suficiente. Aqui estão 1.000:

> pgamma(0.8, 0.5, 1)
[1] 0.7940968

#а теперь велосипедное интегрирование:
> integration_steps <- seq(0, 0.8, length.out=1001)
> integration_result <- 0
> for(i in 2:length(integration_steps)){
+ integration_result <- integration_result + dgamma(integration_steps[i], 0.5, 1) * (integration_steps[i] - integration_steps[i-1])
+ }
> integration_result
[1] 0.7709089
#погрешность ~0.02, но тут способ уже проще некуда, и так сойдёт :) . Бесконечность при x=0 не мешает.
 
Alexey Burnakov:

1) Sim, eu não recebi uma resposta detalhada. Embora eu estivesse a resumir... Não estou a impor a minha opinião, também estou cansado de discutir, para ser honesto. Vou chamar a vossa atenção para o facto de que as palavras desta pessoa foram quase textualmente a nossa mensagem original.

Foi uma resposta educada sem detalhes ou verificações. E a resposta não coincidiu com a Wolfram Alpha e Matlab, o que é um problema.

Não há necessidade de evitar - a questão de fundo foi claramente afirmada.

 
Dr. Trader:


#погрешность ~0.02, но тут способ уже велосипедней некуда, и так сойдёт :) . Бесконечность при x=0 не мешает.

Integrar a função 1/x, de 0 a 1, incluindo os pontos de contorno e comparar com o resultado dos cálculos analíticos.

Wolfram diz que a integral não vai convergir por causa da singularidade em x=0.

 
Quantum:

Integrar a função 1/x, de 0 a 1, incluindo os pontos de limite e comparar com o resultado dos cálculos analíticos.

Com o mesmo código - 7.485471. R chegou a 76.3342 e disse que não iria mais longe, e isso não é um resultado preciso e incorreto. Wolfram simplesmente disse imediatamente que o resultado não bate certo e não respondeu nada.
A resposta certa, não sei, quanto?

Não me diga que como o integral de 1/x não pode ser encontrado, o integral de dgamma(x) também não pode ser encontrado. As duas funções tendem ao infinito a x -> 0+ , mas tendem a velocidades diferentes, e essa velocidade influencia se a integral pode ser encontrada ou não.

 

Existe uma função -log(x). Tende ao infinito a x->0. Você pode fazê-lo sem menos, depois tende para baixo, não me sinto confortável com isso.

E tem um integral de 0 a 1. O infinito não interfere.


 
Renat Fatkhullin:

R é um sistema incrível que me abriu pessoalmente os olhos para o quão longe estávamos no MetaTrader/MQL da real necessidade de "fazer cálculos complexos de forma simples e direta agora".

...

Então, demos uma volta brusca e começamos a actualizar o MetaTrader 5:

  • incluiu as bibliotecas de matemática Alglib e Fuzzy, previamente reescritas, como testes unitários padrão e cobertos
  • desenvolveu um análogo de funções estatísticas de R, realizou testes e os cobriu com testes. o trabalho ainda está em andamento e a biblioteca está se expandindo
  • desenvolveu a primeira versão beta da biblioteca de gráficos como um análogo de gráficos em R. adicionou funções de linha única para uma saída rápida
  • começou a mudar as interfaces nas janelas de saída do terminal para poder operar com dados tabulares. mudou a direção de saída, acrescentou a desativação de colunas desnecessárias, substituiu a fonte por uma monoespaçada na janela de saída do Expert Advisor
  • uma poderosa função ArrayPrint para impressão automática de matrizes, incluindo estruturas, foi adicionada.
  • adicionadas as funções FileLoad e FileSave para carregamento/descarregamento rápido de matrizes em disco.


Claro que estamos no início da viagem, mas o vetor certo do esforço já está claro.

R, assim como muitas outras linguagens de programação, é tão mais conveniente para a aprendizagem da máquina em comparação com o MQL, pois tem um conjunto de recursos integrados para processamento de dados de array. O problema é que uma amostra para aprendizagem da máquina é, na maioria das vezes, uma matriz de dados bidimensional, por isso precisa de uma funcionalidade para trabalhar com arrays:

  1. Inserção de linhas e colunas como matrizes de menor dimensão em outra matriz
  2. Substituição de linhas e colunas em um array como matrizes de tamanho menor
  3. Eliminação de linhas e colunas de um array (por exemplo, para remover preditores sem importância ou exemplos com "outliers" óbvios de uma seleção)
  4. Divisão das matrizes em partes, o que resulta em duas ou mais matrizes que são partes da matriz original (necessárias para dividir uma amostra em partes de treinamento e partes de teste, ou em mais partes, por exemplo, para Walling Forward).
  5. Baralhamento aleatório de linhas e colunas em um array com distribuição igual (é necessário que esses ou outros exemplos da amostra entrem em partes diferentes, de preferência distribuídas uniformemente nessas partes).
  6. Várias funções para processamento de dados por linha ou coluna (por exemplo, cálculo da média aritmética por linha ou por coluna, variância ou encontrar valor máximo ou mínimo em uma linha para posterior normalização).
  7. E por aí fora e assim por diante.

Até que a MQL tenha implementado a funcionalidade acima mencionada necessária para o manuseio de amostras em arrays, a maioria dos desenvolvedores de algoritmos de aprendizagem de máquinas preferirá outras linguagens de programação que já tenham tudo isso disponível. Ou usarão o MLP (algoritmo dos anos 60) não pretensioso da biblioteca AlgLib onde, se bem me lembro, por conveniência, as matrizes bidimensionais são representadas como unidimensionais.

Naturalmente, as funções para densidades de distribuições aleatórias também são funcionalidades necessárias. Mas tais funções nem sempre são necessárias em tarefas de aprendizagem de máquinas, e em algumas tarefas não são utilizadas de todo. Mas operações com amostras, como com arrays multidimensionais, é algo que a implementação de algoritmos de aprendizagem de máquinas não pode dispensar para nenhuma tarefa, a menos, claro, que seja uma tarefa de treinamento de uma grade para aprender os dados normalizados conhecidos a partir da CWR trivial.

 
Renat Fatkhullin:

R é um sistema incrível, que pessoalmente me abriu os olhos para o quão longe estávamos no MetaTrader/MQL das necessidades reais de "fazer cálculos complexos simples e agora mesmo".

Nós (desenvolvedores C++) temos a abordagem "você mesmo pode fazer tudo e nós lhe damos a base de baixo nível e a velocidade dos cálculos" em nosso sangue. Somos fanáticos por desempenho e somos bons nisso - MQL5 é ótimo em 64 bits.

Quando comecei a trabalhar em R eu mesmo percebi que precisava do maior número possível de funções poderosas numa só linha e de ser capaz de fazer investigação em geral.

Então, demos uma volta brusca e começámos a actualizar o MetaTrader 5:

  • incluiu as bibliotecas matemáticas Alglib e Fuzzy, previamente reescritas, no fornecimento padrão, coberto com testes unitários
  • desenvolveu um análogo de funções estatísticas de R, realizou testes e os cobriu com testes. o trabalho ainda está em andamento e a biblioteca está se expandindo
  • desenvolveu a primeira versão beta da biblioteca de gráficos como um análogo de gráficos em R. adicionou funções de linha única para uma saída rápida
  • Começamos a mudar as interfaces nas janelas de saída dos terminais para poder operar com dados tabulares. Mudamos o sentido da saída, acrescentamos a desativação de colunas desnecessárias, mudamos a fonte para monoespaçada na janela de saída do Expert Advisor
  • uma poderosa função ArrayPrint para impressão automática de matrizes, incluindo estruturas, foi adicionada.
  • adicionou FileLoad e FileSave para gravar/ler rapidamente arrays em disco.


É claro que estamos no início do caminho, mas o vetor certo dos esforços já está claro.

Esta é uma avaliação equilibrada e surpreendentemente objectiva do R.

A parte construtiva da discussão não foi desperdiçada. Você ouve os comentários e sugestões dos usuários do R. Nós também estamos interessados em melhorar a plataforma.

Claro que você está no início, mas em qualquer caso, as vacinas R reforçarão o MCL.

Boa sorte no seu trabalho duro.

 

Quanto às convenções de que o Burnakov estava a falar.

Considere três casos muito diferentes.

1. Divisão por uma constante igual a zero.

Em R temos o resultado

> 1/0
[1] Inf

É um resultado correcto?

Para o intérprete, este resultado deve ser considerado correcto, porque não podemos terminar o trabalho de R

Para o compilador, este resultado é correcto. Quando ocorre uma situação excepcional, a execução do programa é interrompida e o controle é dado para lidar com essa situação excepcional, caso contrário, ela irá falhar.

Note como é diferente!

2. Divisão por uma variável, igual a zero.

> a<-0
> 1/a
[1] Inf

Estritamente falando, esta variante difere da anterior.

A função 1/a é contínua em toda parte, exceto a=0. Neste ponto o limite à esquerda = -Inf, e o limite à direita = +Inf.

R não entende isso, mas você pode aceitar, já que a diferença entre menos infinito e mais infinito faz sentido em matemática, não em código de programa.


3. Divisão de duas quantidades infinitesimais em sua aspiração a zero

> sin(a)/a
[1] NaN

O significado de NaN não tem nenhuma explicação para mim. Mas é bastante claro, dado o ponto 2, que R não entende os limites como tal.

Estes são erros de R como sistema de programação? Eu não sei. Muito provavelmente a documentação R deveria ter informado sobre tais nuances, mas então como implementá-la com desenvolvimento descentralizado, neste momento, cerca de 130.000 funções? Precisamos de o fazer?

O que se segue, no sentido da discussão que surgiu?

As decisões são tomadas em terra.

1. Pegamos no R e transferimos o código para a MKL. Ao mesmo tempo, temos de perceber que as variantes acima mencionadas podem ter diferentes interpretações em diferentes funções de R

2. declarar acordos, que valores serão aceitos nos casos que mencionei (a lista pode estar incompleta). Verificamos o código R minuciosamente e se não corresponder às nossas definições, portamo-lo de R para MCL com correcções de acordo com os nossos acordos. Neste caso, devido ao desenvolvimento centralizado, implementamos consistentemente as convenções adotadas e, neste sentido, temos um sistema melhor.

Razão: