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

 
Forester #:
Senhores! Vocês não estão misturando o tópico? Seria bom limpar 2-3 páginas do offtopic.
O artigo de Alexey foi publicado há uma hora, leia-o.
Acho que já discutimos sua quantificação em tempo hábil, de todos os lados. Só posso acrescentar ao que disse antes que estou feliz por ele ter conseguido pelo menos US$ 200.
 
Aleksey Nikolayev #:
Acho que já discutimos sua quantificação em seu tempo por todos os lados. Só posso acrescentar ao que disse anteriormente que estou feliz por ele ter recebido pelo menos US$ 200.

Seu galho? Hoje você expressou um monte de fabricações filosóficas e outras fabricações fora do tópico (flud), e o que você chama de "não respeitar seus próprios princípios"?
Além disso, o que Kant e Diógenes, e talvez Aristóteles e Pitágoras, chamariam uma pessoa que se sente bem ao humilhar, insultar e menosprezar as virtudes e realizações de outra pessoa?
 
Aleksey Nikolayev #:
Acho que já discutimos sua quantificação em seu tempo por todos os lados. Só posso acrescentar ao que disse anteriormente que estou feliz por ele ter recebido pelo menos US$ 200.

Obrigado, é bom ficar feliz com minha renda - isso é raro!

O artigo é introdutório - você está certo, tudo o que escrevi lá - eu acho, e muito claro.

A segunda parte é moderada, é um pouco mais interessante. No entanto, no momento, desisti de descrever meu próprio método e criei uma versão simplificada, que teve um pequeno efeito nos testes. Ela será descrita na segunda parte.

Entretanto, esse é o caso quando as novas ideias não ocupam mais do que 5% do texto.

Volte para ler e comentar, se desejar.

 
Andrey Dik #:

h ttps:// www.mql5.com/ru/forum/309270
Seu tópico? Hoje você fez um monte de reflexões filosóficas e outras fora do tópico (flud), e o que você chama de "não respeitar seus próprios princípios"?
Além disso, o que Kant e Diógenes, e talvez Aristóteles e Pitágoras, chamariam uma pessoa que se sente bem ao humilhar, insultar e menosprezar as virtudes e realizações de outra pessoa?

Não sei a qual Diógenes você se refere, mas no sentido de trollagem, somos todos crianças em comparação com Diógenes de Sinope ou Diógenes de Laertes.

Se você observar as datas do meu tópico, meu registro no recurso e o de hoje, tudo ficará mais claro. Dois anos após o registro, ainda havia esperança de um diálogo construtivo e útil no fórum e, seis anos e meio depois, quase não há mais esperança. Só por diversão.

 
Aleksey Vyazmikin #:

Aqui está, obrigado, é bom ficar feliz com minha renda - uma ocorrência rara!

O artigo é introdutório - você está certo, tudo o que escrevi lá - acho que está claro o suficiente.

A segunda parte está sob moderação, é um pouco mais interessante. No entanto, no momento, desisti de descrever meu próprio método e criei uma versão simplificada, que produziu um pequeno efeito nos testes. Ela será descrita na segunda parte.

Entretanto, esse é o caso quando as novas ideias não ocupam mais do que 5% do texto.

Volte para ler e comentar, se desejar.

Obrigado pelo convite. Naturalmente, li a primeira parte e lerei a segunda também. Se houver alguma reflexão sobre o texto, eu a compartilharei.
 
Forester #:

Por que aleatoriamente?
Percorra todos os pontos de uma classe e meça a distância até todos os pontos da outra classe, tomando a distância mínima.
Quando tudo for obtido, classifique e exclua até a distância necessária, um par de cada vez. Se o ponto excluído foi usado em outro par, encontre um novo ponto com uma nova distância mínima, classifique novamente e continue.
Talvez você consiga pensar em uma maneira melhor. Talvez sem classificação - apenas exclua até a distância necessária.

Acho que não estou entendendo direito:

  1. Criamos uma matriz de distâncias - comprimento e largura do mesmo tamanho que o número de exemplos na amostra.
  2. Criamos uma nova matriz, digamos binária, em que as unidades são os pontos que atendem ao critério "distância mínima".
  3. Pelo que entendi, aqui precisamos contar o número de pontos na ilha condicional (somar as unidades nas linhas) e, se houver mais pontos do que na ilha vizinha e os pontos estiverem divididos entre elas, atribuir esses pontos à pilha (cluster) em que há mais pontos desse tipo. Determine que tal ponto pertence ao conjunto #n de pontos e zere esses pontos na matriz a partir da etapa dois.
  4. Continue zerando até que não haja mais pontos.

Será que entendi corretamente o protótipo do algoritmo?

Estou retornando ao tópico com tanto atraso porque estou um pouco fascinado pela ideia de que as folhas nos modelos CatBoost e em outros conjuntos de árvores podem estar fortemente correlacionadas na ativação, o que distorce sua confiança durante o treinamento, levando a uma superestimação do valor da folha para o modelo como um todo.

 
Aleksey Vyazmikin #:

Acho que sou um pouco lento na assimilação:

  1. Criamos uma matriz de distâncias - comprimento e largura do mesmo tamanho que o número de exemplos na amostra.
  2. Criamos uma nova matriz, digamos binária, em que as unidades são os pontos que atendem ao critério de "distância mínima".
  3. Pelo que entendi, aqui precisamos contar o número de pontos na ilha condicional (somar as unidades nas linhas) e, se houver mais pontos do que na ilha vizinha e os pontos estiverem divididos entre elas, atribuir esses pontos à pilha(cluster) em que há mais pontos desse tipo. Determine que tal ponto pertence ao conjunto #n de pontos e zere esses pontos na matriz a partir da etapa dois.
  4. Continue zerando até que não haja mais pontos restantes.

Será que entendi corretamente o protótipo do algoritmo?

Estou retornando ao tópico com tanto atraso porque estou um pouco fascinado pela ideia de que as folhas nos modelos CatBoost e em outros conjuntos de árvores podem estar fortemente correlacionadas na ativação, o que distorce sua confiança durante o treinamento, levando a uma superestimação do valor da folha para o modelo como um todo.

O agrupamento não tem nada a ver com isso. Ele está apenas removendo os pontos mais próximos com classes diferentes que se contradizem, ou seja, o ruído. Depois, você pode treiná-lo por clustering ou por árvore, como quiser.

1) Você também pode usar uma matriz, mas não necessariamente, mas encontre imediatamente para cada ponto da classe 0 o ponto mais próximo da classe 1, ou seja, obtemos imediatamente o ponto 2.
3) não conte nada e não se refira a clusters, apenas remova os pares de pontos mais próximos. Com a distância menor que o limite, o limite nesse exemplo seria 0,6. Em outros problemas, provavelmente teremos de selecioná-lo.
Se um ponto excluído de 1 classe tiver sido emparelhado com outro ponto de 0 classe, ele ficará sem par e terá de encontrar um novo ponto mais próximo de 1 classe (novamente, faça um cálculo ou use uma matriz, como você sugeriu no ponto 1, se a memória for suficiente, acho que uma matriz de 1 milhão por 1 milhão não caberá em nenhuma memória, talvez até 100 mil).
4) não até que ele permaneça, mas até a distância limite. Se ela for muito grande, restarão apenas os pontos de 1 das classes, que inicialmente eram mais.

Mas, como escrevi antes, não acho que essa remoção de ruído seja uma boa ideia (consulte https://www.mql5.com/ru/forum/86386/page3324#comment_50171043). Não é que você não possa remover esse ruído ao fazer previsões. A própria árvore marcará as folhas ruidosas atribuindo a elas uma probabilidade de cerca de 50% e tomará, por exemplo, as folhas não ruidosas com uma probabilidade de uma das classes >80% (ou quantas você achar necessário).

Машинное обучение в трейдинге: теория, модели, практика и алготорговля - На рыночных данных сигналы пропадают, потому что на новых данных сигналы выходят за узкий допустимый диапазон.
Машинное обучение в трейдинге: теория, модели, практика и алготорговля - На рыночных данных сигналы пропадают, потому что на новых данных сигналы выходят за узкий допустимый диапазон.
  • 2023.10.26
  • www.mql5.com
если в работу использовать листья с высокой чистотой классов и не делить листья до 1 примера в листе. остальные как то достигли чистоты листьев например 70 - вроде неплохо. Препочитаю дерево и лист с честными 53 чистоты одного из классов
 
Forester #:
Os clusters não têm nada a ver com isso. Trata-se apenas de remover os pontos mais próximos com classes diferentes que se contradizem, ou seja, ruído. Em seguida, você pode usar o agrupamento ou a árvore, o que quiser treinar.
.

1) Você também pode usar uma matriz, mas não necessariamente, mas encontre imediatamente em cada ponto da classe 0 o ponto mais próximo da classe 1, ou seja, obtemos imediatamente o ponto 2.
3) não conte nada e não se refira a clusters, apenas remova os pares de pontos mais próximos. Com a distância menor que o limite, o limite nesse exemplo seria 0,6. Em outros problemas, provavelmente teremos de selecioná-lo.
Se um ponto excluído de 1 classe tiver sido emparelhado com outro ponto de 0 classe, ele ficará sem par e terá de encontrar um novo ponto mais próximo de 1 classe (novamente, faça um cálculo ou use uma matriz, como você sugeriu no ponto 1, se a memória for suficiente, acho que uma matriz de 1 milhão por 1 milhão não caberá em nenhuma memória, talvez até 100 mil).
4) não até que ele permaneça, mas até a distância limite. Se ela for muito grande, restarão apenas os pontos de uma das classes, que inicialmente eram mais.

Mas, como escrevi antes, não acho que essa remoção de ruído seja uma boa ideia (consulte https://www.mql5.com/ru/forum/86386/page3324#comment_50171043). Não é que você não possa remover esse ruído ao fazer previsões. A própria árvore marcará as folhas ruidosas atribuindo a elas uma probabilidade de cerca de 50% e tomará, por exemplo, as folhas não ruidosas com uma probabilidade de uma das classes >80% (ou quantas você achar necessário).

Ainda não consigo entender isso. Bem, tudo isso acontece em um espaço, na métrica de um preditor, mas como levar em conta os outros?

Quanto ao que fazer na previsão, eu estava pensando em usar dois modelos: um que detecta o que foi descartado ou confirma que os dados estão na região de "aglomeração" e outro que já trabalha com o que resta.

 
Aleksey Vyazmikin #:

Ainda não consigo entender isso. Bem, tudo acontece em um espaço - na métrica de um preditor, mas como levar em conta os outros?

Quanto ao que fazer na previsão, eu estava pensando em usar dois modelos: um detecta o que foi eliminado ou confirma que os dados estão na área de "aglomeração", e o outro já trabalha com o que resta.

https://www.mql5.com/ru/articles/9138

Ninguém está se importando há um ano

Escrevi uma dúzia ou vinte algoritmos como esse, alguns estão bem estabelecidos. O que está no artigo não é o melhor em termos de estabilidade dos resultados, a primeira panqueca.

Portanto, não há nada a ser discutido, porque ainda não há nada melhor.


Метамодели в машинном обучении и трейдинге: Оригинальный тайминг торговых приказов
Метамодели в машинном обучении и трейдинге: Оригинальный тайминг торговых приказов
  • www.mql5.com
Метамодели в машинном обучении: Автоматическое создание торговых систем практически без участия человека — Модель сама принимает решение как торговать и когда торговать.
 
Sou novo no ML. Estou trabalhando em vários modelos. E, na última semana, surgiu um problema. Nenhum dos modelos é salvo no ONNX((((. Quem já se deparou com esse problema?
WARNING:tf2onnx.tf_loader:Could not search for non-variable resources. Concrete function internal representation may have changed.
ERROR:tf2onnx.tf_utils:pass1 convert failed for name: "model_3/lstm_4/PartitionedCall/while"
op: "StatelessWhile"
input: "model_3/lstm_4/PartitionedCall/while/loop_counter"
input: "model_3/lstm_4/PartitionedCall/while/maximum_iterations"
input: "model_3/lstm_4/PartitionedCall/time"
input: "model_3/lstm_4/PartitionedCall/TensorArrayV2_1"
input: "model_3/lstm_4/zeros"
input: "model_3/lstm_4/zeros_1"
input: "model_3/lstm_4/PartitionedCall/strided_slice"
input: "model_3/lstm_4/PartitionedCall/TensorArrayUnstack/TensorListFromTensor"
input: "Func/model_3/lstm_4/PartitionedCall/input/_3"
input: "Func/model_3/lstm_4/PartitionedCall/input/_4"
input: "Func/model_3/lstm_4/PartitionedCall/input/_5"
attr {
  key: "T"
  value {
    list {
      type: DT_INT32
      type: DT_INT32
      type: DT_INT32
      type: DT_VARIANT
      type: DT_FLOAT
      type: DT_FLOAT
      type: DT_INT32
      type: DT_VARIANT
      type: DT_FLOAT
      type: DT_FLOAT
      type: DT_FLOAT
    }
  }
}
attr {
  key: "_lower_using_switch_merge"
  value {
    b: false
  }
}
attr {
  key: "_num_original_outputs"
  value {
    i: 11
  }
}
attr {
  key: "_read_only_resource_inputs"
  value {
    list {
    }
  }
}
attr {
  key: "body"
  value {
    func {
      name: "while_body_149241"
    }
  }
}
attr {
  key: "cond"
  value {
    func {
      name: "while_cond_149240"
    }
  }
}
attr {
  key: "output_shapes"
  value {
    list {
      shape {
      }
      shape {
      }
      shape {
      }
      shape {
      }
      shape {
        dim {
          size: -1
        }
        dim {
          size: 128
        }
      }
      shape {
        dim {
          size: -1
        }
        dim {
          size: 128
        }
      }
      shape {
      }
      shape {
      }
      shape {
        dim {
          size: 1
        }
        dim {
          size: 512
        }
      }
      shape {
        dim {
          size: 128
        }
        dim {
          size: 512
        }
      }
      shape {
        dim {
          size: 512
        }
      }
    }
  }
}
attr {
  key: "parallel_iterations"
  value {
    i: 32
  }
}
, ex=Could not infer attribute `_read_only_resource_inputs` type from empty iterator
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-7-50 ef5b7ad3f4> in <cell line: 87>()
     85 
     86 # Преобразовать Keras-модель в ONNX формат
---> 87 onnx_model = tf2onnx.convert.from_keras(model)
     88 
     89 # Сохранить модель в формате ONNX

8 frames
/usr/local/lib/python3.10/dist-packages/onnx/helper.py in make_attribute(key, value, doc_string, attr_type)
    874         value = list(value)
    875         if len(value) == 0 and attr_type is None:
--> 876             raise ValueError(
    877                 f"Could not infer attribute `{key}` type from empty iterator"
    878             )

ValueError: Could not infer attribute `_read_only_resource_inputs` type from empty iterator
Razão: