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

 
Mihail Marchukajtes:

Um erro não é apenas um erro. Um pequeno erro pode ter um grande impacto.

E NS não está a ser pedido para capturar dados repetitivos. Está a ser-lhe pedido que identifique padrões ocultos para obter o resultado certo na ausência de dados repetitivos. Compreender a generalização. Quando temos um domínio finito de dados, mas só temos 50% desses dados. A rede aprende e identifica um padrão que pode construir o resto dos dados que não viu. É como reconstruir imagens de vídeo antigas com pixels em falta que a rede se reconstrói a si própria.

Então é uma abordagem estatística! Por exemplo, eu tenho 20 fotos de triângulos diferentes. No dia 21, falta ao triângulo a hipotenusa. Eu posso facilmente determinar que é um triângulo não desenhado, com base nas estatísticas coletadas - (há um triângulo em cada foto). Ou seja, um erro no desenho do triângulo não é crítico, porque eu já tenho as estatísticas como um todo. Este princípio não funciona com a NS?
 
Tag Konow:
Bem, isso é uma abordagem estatística! Por exemplo, eu tenho 20 fotos de triângulos diferentes. No dia 21, falta ao triângulo a hipotenusa. Posso facilmente determinar que este é um triângulo não desenhado com base nas estatísticas recolhidas - cada foto tem um triângulo dentro dela. Ou seja, um erro no desenho do triângulo não é crítico para mim, porque eu já tenho estatísticas em geral. Este princípio não funciona com a NS?
Bem, mais ou menos, se você não considerar que em 21 fotos você tem apenas um canto desenhado e o triângulo está fora de questão lá...
 
Mihail Marchukajtes:
Bem, grosso modo, a menos que se conte que nas 21 fotos você tem apenas um canto desenhado e não se fala de um triângulo lá...
É assim que funciona uma previsão baseada em estatísticas. Prevejo que seja um triângulo não desenhado, que se tornará oco na próxima foto.
 
Eu digo-te isto. Tudo vem com experiência, e no MoD há dois tipos de experiência, teórica e prática, e eles são muito diferentes, acredite-me. Quanto mais se pratica, mais se começa a entender a filosofia do campo. É isso, ir em busca de batatas em auto-isolamento parece uma busca :-)(
 

Para compreender a essência e a base teórica das redes neurais, o conhecimento da teoria de Kolmogorov, Arnold e Hecht-Nielson é essencial.

Para a prática, este conhecimento não é particularmente necessário, mas uma compreensão geral do mesmo não faria mal.

 
elibrarius:

Eu dei-lhe um link para ver as divisões a partir dos dados JOT. É aí que o modelo completo é carregado para um arquivo. Então as divisões são lidas a partir dele.

Certamente que árvores assimétricas já podem ser descarregadas?


elibrarius:

Ao impulsionar, por definição, todas as árvores são importantes. Cada árvore sucessiva aperfeiçoa todas as anteriores. Se você jogar fora uma árvore no meio, então tudo o que se seguirá funcionará com dados errados - eles devem ser requalificados, sem levar em conta a árvore jogada fora. Neste caso, a primeira árvore replicará de muito perto a árvore descartada.

Não, isso não é exactamente verdade. Quando o modelo está pronto, há uma pilha de folhas de árvore sentadas nele, dando uma probabilidade próxima de 0,5 - o que é um lixo na essência.


elibrarius:

Sim. As folhas individuais no descaroçamento estão incompletas, porque são aumentadas por respostas de folhas de outras árvores de refinação. E apenas as respostas cumulativas de, por exemplo, 100 árvores dão a resposta correcta.

Tentar obter algo confiável de uma única folha do modelo de reforço é impossível.
No boosting, todas as 100 respostas de 100 árvores são somadas, cada uma dando por exemplo 0,01 no total = 1. O valor de 1 folha = 0,01 - o que você quer ganhar com isso? Não há nada nele. Somente a soma de 100 folhas dará a resposta correta.
Na verdade, ali a 1ª árvore é forte e dá por exemplo 0,7, o resto aproxima a soma de 1. Se apenas as folhas da primeira árvore são consideradas separadamente, mas acho que são mais fracas do que qualquer árvore da floresta aleatória, devido à sua profundidade mais rasa.
A floresta aleatória tem uma média, por exemplo, cada folha de 100 árvores = 1, a média também = 1. Nela as raposas estão completas, mas com desvios aleatórios. Mas uma multidão de 100 respostas, dá a média como uma resposta razoavelmente precisa.

É possível obter informações úteis a partir de uma única árvore, mas isto é raro.

Mesmo a primeira árvore não será a melhor.

O reforço é rápido, mas você tem que selecionar cuidadosamente os modelos, e isso requer uma amostra grande, o que é um problema.

 
Aleksey Nikolayev:

Para compreender a essência e a base teórica das redes neurais, o conhecimento da teoria de Kolmogorov, Arnold e Hecht-Nielson é essencial.

Para a prática, este conhecimento não é particularmente necessário, mas uma compreensão geral do mesmo não faria mal.

Spc.

A falta de uma teoria rigorosa relacionada com estes modelos de redes neurais não impede que se investiguem as possibilidades da sua aplicação a problemas práticos.

 
Aleksey Vyazmikin:

Certamente que árvores assimétricas já podem ser descarregadas?

Tentei um exemplo, adicionando grow_policy='Lossguide'.
Aqui está um pedaço de modelo contendo fendas:

'split': {'border': 16.049999237060547, 'float_feature_index': 1, 'split_index': 0, 'split_type': 'FloatFeature'}}, 'right': {'left': {'value': 0.05454545454545454, 'weight': 153}, 'right': {'value': 0.8265895953757225, 'weight': 161}, 'split': {'border': 5.999999046325684, 'ctr_target_border_idx': 0, 'split_index': 4, 'split_type': 'OnlineCtr'}}, 
'split': {'cat_feature_index': 1, 'split_index': 1, 'split_type': 'OneHotFeature', 'value': -845129958}}, {'left': {'left': {'value': -0.43103007753084105, 'weight': 444}, 'right': {'value': -0.10906568919445614, 'weight': 133}, 'split': {'border': 6.999999046325684, 'ctr_target_border_idx': 0, 'split_index': 2, 'split_type': 'OnlineCtr'}}, 'right': {'left': {'value': 0.02835585997337218, 'weight': 163}, 'right': {'value': 0.5713236394502054, 'weight': 151},
'split': {'border': 5.999999046325684, 'ctr_target_border_idx': 0, 'split_index': 3, 'split_type': 'OnlineCtr'}}, 
'split': {'cat_feature_index': 1, 'split_index': 1, 'split_type': 'OneHotFeature', 'value': -845129958}

Também há divisões com a profundidade. Mas isso é em Python, ainda não vi uma maneira de descarregar o modelo em R. Mas acho que é possível salvar modelo em R em formato interno, abri-lo em Python e descarrega-lo para o JSON. E a partir daí tudo o que você precisa para usar

 
Colegas. O tema é interessante, mas não percebo a diferença entre a aprendizagem da máquina e a simples optimização de parâmetros num testador ? Afinal, o objetivo será aproximadamente o mesmo - tomar a decisão de entrar (sair) do mercado quando os parâmetros de entrada (saída) coincidirem. Os dois métodos param de funcionar quando o mercado muda fortemente. Eles precisam de ser re-treinados e optimizados. Em resumo e sem filosofia.
 
Yan Barmin:
Colegas. O tema é interessante, mas não entendo a diferença entre a aprendizagem da máquina e a otimização de parâmetros simples em um testador? Porque o propósito será aproximadamente o mesmo - tomar a decisão de entrar (sair) no mercado quando os parâmetros de entrada (saída) coincidirem. Os dois métodos param de funcionar quando o mercado muda fortemente. Eles precisam de ser re-treinados e optimizados. Em resumo e sem filosofia.

A diferença está na flexibilidade da ferramenta. A rede neural pode adaptar-se a qualquer série. Olha para o polinómio abaixo. A largura dos coeficientes, bem como o seu número, pode ser absolutamente diferente.

double getBinaryClassificator1(double v0, double v1, double v2, double v3, double v4, double v5, double v6, double v7, double v8, double v9, double v10) {
   double x0 = 2.0 * (v0 + 2.6721302849319) / 5.70376880500565 - 1.0;
   double x1 = 2.0 * (v1 + 0.862195874260524) / 4.318953971518134 - 1.0;
   double x2 = 2.0 * (v2 + 0.636958350251177) / 2.893126110958697 - 1.0;
   double x3 = 2.0 * (v3 + 1.28131145039971) / 4.47439455086403 - 1.0;
   double x4 = 2.0 * (v4 + 1.40655622673661) / 3.84454848827483 - 1.0;
   double x5 = 2.0 * (v5 + 1.05792133319783) / 4.0361119526354905 - 1.0;
   double x6 = 2.0 * (v6 + 0.960632890559664) / 2.810809591513934 - 1.0;
   double x7 = 2.0 * (v7 + 2.50474545671368) / 4.50657217846072 - 1.0;
   double x8 = 2.0 * (v8 + 3.37124943164126) / 5.00153555828254 - 1.0;
   double x9 = 2.0 * (v9 + 1.01434366581359) / 3.81959911946484 - 1.0;
   double x10 = 2.0 * (v10 + 0.997401251919643) / 2.959840023725593 - 1.0;
   double decision = 0.0455519244734931 * sigmoid(x0 + x5 + x8)
  + 0.01733841684822077 * sigmoid(x5 + x7 + x8)
  + 0.21269063180827888 * sigmoid(x0 + x5 + x7 + x8)
  + 0.02875816993464052 * sigmoid(x0 + x8 + x9)
  -0.025853304284676835 * sigmoid(x0 + x4 + x8 + x9)
  + 0.021169208424110384 * sigmoid(x0 + x7 + x10)
  + 0.07184095860566449 * sigmoid(x0 + x8 + x10)
  + 0.03769063180827887 * sigmoid(1.0 + x0 + x3 + x5 + x8)
  -0.03179012345679012 * sigmoid(1.0 + x3 + x6 + x9)
  + 0.02750544662309368 * sigmoid(1.0 + x0 + x5 + x7 + x9)
  + 0.1463507625272331 * sigmoid(1.0 + x1 + x2 + x8 + x9)
  + 0.012799564270152506 * sigmoid(1.0 + x0 + x2 + x10)
  + 0.1864560639070443 * sigmoid(1.0 + x0 + x1 + x5 + x8 + x10)
  + 0.07494553376906318 * sigmoid(1.0 + x0 + x2 + x5 + x8 + x10)
  + 0.014669571532316631 * sigmoid(1.0 + x2 + x5 + x6 + x8 + x10)
  + 0.05266884531590414 * sigmoid(1.0 + x0 + x1 + x7 + x8 + x10)
  + 0.04566085693536674 * sigmoid(1.0 + x0 + x1 + x2 + x8 + x9 + x10)
  + 0.061546840958605666 * sigmoid(1.0 + x0 + x2 + x4 + x8 + x9 + x10);
   return decision;
}

Agora imagine o número de variantes, nenhum Expert Advisor multi-parâmetros pode se orgulhar de tal flexibilidade. Também se diz que eles são capazes de generalização, mas isso não é certo :-)

Razão: