Unsupervised Machine Learning: Clustering

Método hierarquico aglomerativo.

Método não hierarquico K-means.

Tanto o Método Hierárquico Aglomerativo quanto o Método Não Hierárquico K-means são técnicas de análise de agrupamentos (clusterização) projetadas para funcionar com variáveis quantitativas (numéricas/contínuas)

Método hierarquico aglomerativo.

O método hierárquico aglomerativo é uma técnica de aprendizado não supervisionado que agrupa dados “de baixo para cima”.

Método muito utilizado em analise exploratória e a quantidade de cluster é definida ao longo da analise.

Método não hierarquico K-means.

Deve se definir antes quantos grupos de cluster serão encontrados.

Método que se baseia na minimização.

Método hierarquico aglomerativo. (distância)

O quanto os grupos são diferentes entre si.

ANTES de iniciar:

  1. Verificar se as suas variáveis possuem unidade de medidas/ amplitudes muito distintas, muito grandes.
  2. Se for, deve-se utilizar a padronização em todas varáveis. Como? Ex. Z-score, passando a ter médias 0 e desvio padrão 1.

deve-se fazer o passo 1 e 2, pois impactam muito nos resultados da clusterização, onde variáveis com grandes amplitydes/distancia acabam dominando na clusterização.

Depois escolher entre:

Medida de dissimilaridade: se eu quero que os grupos sejam mais homogêneos internamente e heterogêneo entre si, tenho que decidir qual medida diga quais são as observações parecidas e quais são diferentes.

Método de encadeamento.

Qual o padrão de agrupamento.

Exemplo calculo:

Decidir a medida de distancia (dissimilaridade): QUANTO Maior a distância mais diferentes são entre 2 pontos.

Exemplo: Para calcular a distância, normalmente utiliza-se uma das medidas: euclidiana, euclidiana quadrática ou distância de Manhattan, distância de Chebychev, distância de Canberra (proporção), ou até a correlação de Pearson entre as observações.

Exemplo, conforme a tabela abaixo, que já estão na mesma escala de 0 a 10, ou seja, não precisa normalizar.

Seguem as distâncias:

Distância Euclidiana Quadrática:

d2(x,y)=i=1p(xiyi)2d^2(x,y) = \sum_{i=1}^{p} (x_i – y_i)^2
d2(x,y)=(x1y1)2+(x2y2)2++(xpyp)2d^2(x,y) = (x_1 – y_1)^2 + (x_2 – y_2)^2 + \cdots + (x_p – y_p)^2
d2(Ana,Bruno)=i=1p(xiyi)2 d^2(Ana, Bruno) = \sum_{i=1}^{p}(x_i – y_i)^2
d2(Ana,Bruno)=(8,56,0)2+(8,05,5)2+(7,56,5)2d^2(Ana, Bruno) = (8{,}5 – 6{,}0)^2 + (8{,}0 – 5{,}5)^2 + (7{,}5 – 6{,}5)^2
d2(Ana,Bruno)=(2,5)2+(2,5)2+(1,0)2d^2(Ana, Bruno) = (2{,}5)^2 + (2{,}5)^2 + (1{,}0)^2
d2(Ana,Bruno)=6,25+6,25+1,00 d^2(Ana, Bruno) = 6{,}25 + 6{,}25 + 1{,}00
d2(Ana,Bruno)=13,50d^2(Ana, Bruno) = 13{,}50

Ou seja, distância euclidiana quadrática entre Ana e Bruno é 13,50.

Escolho a metrica de distância/dissimilaridade, muito utilizada a euclidiana e vou unindo os pares com menores distâncias, criando os clusters.

Agora entra o método de encadeamento.

Ligação Simples (Single Linkage)/(vizinho mais próximo): Define a distância entre dois clusters como a menor distância entre qualquer ponto do primeiro cluster e qualquer ponto do segundo cluster.

Ligação Completa (Complete Linkage): Define a distância entre dois clusters como a maior distância entre qualquer ponto do primeiro cluster e qualquer ponto do segundo cluster.

Ligação Média (Average Linkage): Calcula a distância entre dois clusters como a média das distâncias entre todos os pares de pontos (um de cada cluster).

O método de Ward é uma técnica de análise de agrupamento hierárquico (clustering) que minimiza a variância dentro dos clusters. Ele agrupa observações maximizando a homogeneidade interna, ideal para variáveis quantitativas e para criar grupos de tamanhos similares. O processo aglomerativo une, a cada etapa, os dois grupos que resultam no menor aumento da soma dos quadrados.

Por fim, vai unindo todas as observações, no exemplo acima todas as pessoas, até o fim, criando um Dendograma:

Estabelecer um corte, quantas barras verticais cortou ?

veja que verifico logo abaixo da minha linha de corte, quantas | barras tem logo abaixo, no caso são 3 | barras, exemplificada com X em vermelho.

Em Python posso criar uma variável categórica com o valor do cluster a qual aquela observação pertence:

cluster_euclidi_min = AgglomerativeClustering(n_clusters = 3, metric = 'euclidean', linkage = 'single')
indica_cluster = cluster_euclidi_min.fit_predict(df)
df['cluster'] = indica_cluster
df['cluster'] = df['cluster'].astype('category')

Deixe um comentário