Discussão do artigo "Ciência de Dados e Aprendizado de Máquina (Parte 08): Agrupamento K-Means em MQL5"

 

Novo artigo Ciência de Dados e Aprendizado de Máquina (Parte 08): Agrupamento K-Means em MQL5 foi publicado:

A mineração de dados é crucial para um cientista de dados e um trader porque, muitas vezes, os dados não são tão diretos quanto pensamos, o olho humano não consegue entender o padrão subjacente menor e as relações no conjunto de dados, talvez o algoritmo K-means pode nos ajudar com isso. Vamos descobrir.

A análise de agrupamento é uma tarefa de agrupar um conjunto de objetos de forma que os objetos com os mesmos atributos sejam colocados dentro dos mesmos grupos (clusters).

Se você for ao shopping, encontrará itens semelhantes mantidos juntos, certo? Alguém fez o processo de agrupá-los. Quando o conjunto de dados não estiver agrupado, a análise de agrupamento fará exatamente isso, agrupará os valores de dados que são mais semelhantes (em certo sentido) entre si do que o restante dos grupos (clusters).

A própria análise de agrupamento não é um algoritmo específico. A tarefa geral pode ser resolvida por meio de vários algoritmos que diferem significativamente em termos de entendimento sobre o que constitui um cluster.

Img src: wikipedia

Autor: Omega J Msigwa

 

Antes de mais nada, gostaria de agradecer ao autor por compartilhar este artigo. Espero que o autor, além de explicar essas teorias, possa dar exemplos de como o agrupamento K-mean é usado em negociações reais. Se não houver um exemplo correspondente, este ou outros artigos do autor são praticamente indistinguíveis dos livros didáticos. O aprendizado de máquina é usado em muitos campos.

Seria bom se o autor pudesse ilustrar melhor essas teorias de aprendizado de máquina com exemplos de mecanismos de negociação do MT5. Mais uma vez, obrigado por compartilhar.

 
m_cols = Matrix.Cols();
      n = Matrix.Rows(); //número de elementos | Linhas da matriz
      
      InitialCentroids.Resize(m_clusters,m_cols);     
      vector cluster_comb_v = {};
      matrix cluster_comb_m = {};      
      vector rand_v = {};
      
      for (ulong i=0; i<m_clusters; i++) 
        {
          rand_v = Matrix.Row(i * m_clusters); 
          InitialCentroids.Row(rand_v,i);
        }     
     Print("Initial Centroids matrix\n",InitialCentroids);    

Olá, Omega J Msigwa, obrigado pelo seu artigo muito útil.

Estou perdendo alguma coisa ou no código acima você quer dizer DMatrix?

 
Mahdi Ebrahimzadeh #:

oi Omega J Msigwa, obrigado pelo seu artigo muito útil.

Estou perdendo alguma coisa ou no código acima você quer dizer DMatrix?

Quero dizer Matrix, conforme explicado no artigo, já que esse código é encontrado na função

void CKMeans::KMeansClustering(const matrix &Matrix, matrix &clustered_matrix,int iterations = 10)
 { 
      m_cols = Matrix.Cols();
      n = Matrix.Rows(); //número de elementos | Linhas da matriz
      
      InitialCentroids.Resize(m_clusters,m_cols);
      cluster_assign.Resize(n);
            
      clustered_matrix.Resize(m_clusters, m_clusters*n);
      clustered_matrix.Fill(NULL);
      
      vector cluster_comb_v = {};
      matrix cluster_comb_m = {};      
      vector rand_v = {};      
      for (ulong i=0; i<m_clusters; i++) 
        {
          rand_v = Matrix.Row(i * m_clusters); 
          InitialCentroids.Row(rand_v,i);
        }     
     Print("Initial Centroids matrix\n",InitialCentroids);    
.... rest of the code