Discussão do artigo "Cross-validation and basics of causal inference in CatBoost models, export to ONNX format"

 

Novo artigo Validação cruzada e noções básicas de inferência causal em modelos CatBoost, exportação para o formato ONNX foi publicado:

Este artigo propõe um método autoral para a criação de robôs usando aprendizado de máquina.

Assim como nossas conclusões muitas vezes são errôneas e precisam ser verificadas, os resultados das previsões dos modelos de aprendizado de máquina também precisam ser revalidados. Se o processo de revalidação for ciclizado em si mesmo, resulta em autocontrole. O autocontrole de um modelo de aprendizado de máquina envolve verificar se suas previsões têm erros muitas vezes em situações diferentes, mas semelhantes. Se o modelo erra pouco em média, significa que não está sobreajustado; se erra frequentemente, algo está errado com ele.

Se treinamos o modelo uma vez com dados selecionados, ele não pode exercer autocontrole. Se treinamos o modelo várias vezes com subamostras aleatórias e depois verificamos a qualidade das previsões em cada uma e somamos todos os erros, obtemos uma imagem relativamente confiável dos casos em que ele realmente erra frequentemente e dos casos que geralmente acerta. Esses casos podem ser divididos em dois grupos, separados um do outro. Isso é análogo à validação walk-forward ou à validação cruzada, mas com elementos adicionais. Somente dessa forma é possível alcançar o autocontrole e obter um modelo mais robusto.

Por isso, é necessário realizar a validação cruzada no conjunto de dados de treinamento, comparar as previsões do modelo com as etiquetas de treinamento e média dos resultados em todos os folds. Os exemplos que foram previstos incorretamente, em média, devem ser removidos do conjunto final de treinamento como errôneos. Também é necessário treinar um segundo modelo com todos os dados, modelo esse que distingue casos bem previstos dos mal previstos, permitindo cobrir mais completamente todos os resultados possíveis. 


Autor: Maxim Dmitrievsky

 
Если модель в среднем мало ошибается, значит она не переобучена, если же ошибается часто, значит с ней что-то не так.
No entanto, essa proposta tem um grande problema! Se os modelos forem classificados de acordo com a taxa de erro e os melhores forem retirados deles, isso será novamente um treinamento excessivo.
 
Поэтому необходимо провести кросс-валидацию на тренировочном датасете, сравнить предсказания модели с обучающими метками и усреднить результаты по всем фолдам. Те примеры, которые в среднем были предсказаны неверно, следует удалить из финальной обучающей выборки как ошибочные. Еще следует обучить вторую модель уже на всех данных, которая отличает хорошо предсказуемые случаи от плохо предсказуемых, позволяя наиболее полно охватить все возможные исходы. 
O primeiro modelo negocia, o segundo modelo classifica (e prevê) locais de negociação fracos. Certo?
[Excluído]  
fxsaber #:
O primeiro modelo negocia, o segundo modelo classifica (e prevê) locais de negociação fracos. Certo?
Sim
[Excluído]  
fxsaber #:
No entanto, essa proposta tem um grande problema! Se os modelos forem classificados de acordo com a taxa de erro e os melhores forem retirados deles, isso será novamente um treinamento excessivo.
Bem, sempre deve haver uma escolha :)
O principal é que todos os modelos +- passam no OOS.
Esse é um dos dezenas de algoritmos, o mais fácil de entender. Porque, com base no feedback de artigos anteriores, parece que os leitores simplesmente não entendem o que está acontecendo. Então, qual é o objetivo de escrever.
[Excluído]  
Discussão interessante especificamente sobre métodos estatísticos no MoD, se houver alguém que tenha algo a dizer/acrescentar a ela.
 

1) Gostaria de ver o desempenho do modelo na terceira amostra, que não era um traço nem um teste e não estava envolvida de forma alguma na criação e seleção do modelo.

2) A detecção de ruído e a rotulagem ou meta-rotulagem foram descritas por Vladimir em seu artigo de 2017, no qual ele usou o pacote NoiseFiltersR para essa finalidade.

Глубокие нейросети (Часть III). Выбор примеров и уменьшение размерности
Глубокие нейросети (Часть III). Выбор примеров и уменьшение размерности
  • www.mql5.com
Эта статья продолжает серию публикаций о глубоких нейросетях. Рассматривается выбор примеров (удаление шумовых), уменьшение размерности входных данных и разделение набора на train/val/test в процессе подготовки данных для обучения.
[Excluído]  
mytarmailS #:

1) Gostaria de ver o desempenho do modelo na terceira amostra, que não era um treinamento t nem um teste e não estava envolvida de forma alguma na criação e seleção do modelo.

2) A detecção de ruído e a rotulagem ou meta-rotulagem foram descritas por Vladimir em seu artigo de 2017, no qual ele usou o pacote NoiseFiltersR para essa finalidade.

O bot está anexado ao artigo

Ele descreve algumas das dezenas ou centenas de métodos semelhantes, não há desejo de se aprofundar em cada um deles, especialmente sem verificar os resultados. Estou mais interessado em projetos próprios e em testá-los imediatamente, e agora a conversão para ONNX permite que isso seja feito ainda mais rapidamente. A abordagem principal é fácil de adicionar/reescrever sem alterar o restante do código, o que também é muito legal. Esse exemplo de localização de bugs via cv tem uma falha que não permite falar totalmente sobre inferência causal, portanto, esta é uma introdução. Tentarei explicá-la em outro momento.

O artigo já é útil porque é uma solução pronta para fazer experimentos com o MO. As funções são otimizadas e funcionam rapidamente.
 
Ótimo, adoro seus artigos. Aprendi com eles. Também fiz um material, agora em teste, sobre a exportação do modelo de floresta aleatória no ONNX. Vou tentar o seu modelo também. Espero publicá-lo, sou iniciante.)
[Excluído]  
Yevgeniy Koshtenko floresta aleatória no ONNX. Vou tentar o seu modelo também. Espero publicar, sou iniciante =).

Mais MOs são bem-vindos :) Também sou um amador.

 
Não é possível inverter a ordem dessa forma:
.
   int k = ArraySize(Periods) - 1;
   for(int i = 0; i < ArraySize(Periods); i++) {
      f[i] = features[i];
      k--;
   }
Deveria ser
f[k] = features[i];
. Por que inverter a ordem?