image

Acesse bootcamps ilimitados e +650 cursos pra sempre

60
%OFF
Eduardo Silva
Eduardo Silva05/04/2024 22:36
Compartilhe

Agrupamento ou clustering de dados

  • #Python

A análise de agrupamento, também conhecida como clustering, é uma técnica exploratória em que conjuntos de dados são particionados em grupos (ou clusters) de observações que compartilham características semelhantes. O principal objetivo é identificar padrões ou estruturas intrínsecas nos dados, agrupando observações que são mais semelhantes entre si do que com observações de outros grupos. Aqui estão alguns aspectos importantes sobre a análise de agrupamento:

Objetivos Principais:

  • Identificação de Padrões Ocultos: A análise de agrupamento é usada para revelar estruturas e padrões subjacentes nos dados que podem não ser evidentes à primeira vista.
  • Classificação Não Supervisionada: Ao contrário da classificação supervisionada, onde os rótulos de classe são fornecidos, a análise de agrupamento é uma forma de classificação não supervisionada, onde os grupos são descobertos sem informações prévias sobre as categorias.

Métodos de Agrupamento:

  • Hierárquicos: Agrupa dados em uma hierarquia de clusters, geralmente representada em forma de dendrograma, mostrando como os clusters são aninhados uns nos outros.
  • Particionamento: Divide o conjunto de dados em clusters, onde cada observação pertence a um único cluster. Exemplos incluem o K-Means e o K-Medoids.
  • Baseados em Densidade: Identificam áreas densas de pontos no espaço, formando clusters. DBSCAN é um exemplo comum.
  • Baseados em Modelos: Modelam os dados usando distribuições probabilísticas para encontrar clusters. O algoritmo de mistura de Gaussianas é um exemplo.

Critérios de Avaliação:

  • Coeficiente de Silhueta: Mede a coesão dentro dos clusters e a separação entre clusters, variando de -1 a 1. Valores mais próximos de 1 indicam uma boa separação entre clusters.
  • Índice de Davies-Bouldin: Avalia a compactação e separação dos clusters. Um valor menor indica uma melhor configuração de clustering.
  • Índice Calinski-Harabasz: Avalia a dispersão entre clusters em relação à dispersão dentro dos clusters. Maiores valores indicam clusters mais densos e separados.

Aplicações Práticas:

  • Segmentação de Mercado: Agrupamento de clientes com base em padrões de compra para estratégias de marketing mais direcionadas.
  • Biologia: Agrupamento de amostras genéticas para identificar subgrupos em estudos genômicos.
  • Análise de Imagens: Agrupamento de pixels para segmentação de imagens.
  • Reconhecimento de Padrões: Identificação automática de padrões em grandes conjuntos de dados.

Desafios:

  • Escolha do Número de Clusters: Decidir o número ideal de clusters, muitas vezes realizado usando métodos como o método do cotovelo.
  • Sensibilidade aos Parâmetros: Alguns algoritmos de agrupamento são sensíveis a parâmetros, e a escolha inadequada pode afetar os resultados.
  • Interpretação Subjetiva: A interpretação dos clusters muitas vezes requer um entendimento do domínio do problema.

Vamos explorar alguns conceitos relacionados a distâncias entre pontos, distância em relação ao centróide, densidade de dados e modelos de distribuição:

Distância entre Pontos:

Definição: A distância entre dois pontos em um espaço euclidiano é a medida da extensão do segmento de reta que une esses pontos.

Fórmula: A distância euclidiana d entre dois pontos (x1,y1) e (x2,y2) em um plano bidimensional é dada por:

image

Aplicações: Utilizada em diversas áreas, como aprendizado de máquina, análise de dados espaciais e geometria.

image

Distância em Relação ao Centróide:

Definição: Em análise de agrupamento, a distância entre um ponto e o centróide de um cluster é frequentemente utilizada para atribuir observações aos clusters.

Fórmula: Pode variar dependendo da métrica escolhida, sendo a distância euclidiana uma escolha comum. Outras métricas incluem a distância de Mahalanobis e a distância de Manhattan.

Aplicações: No contexto de algoritmos de agrupamento como K-Means, onde os centróides são usados para definir clusters.

image

Densidade de Dados:

Definição: A densidade de dados refere-se à concentração de pontos em uma determinada região do espaço.

Estimação de Densidade: Pode ser estimada usando métodos como o KDE (Kernel Density Estimation), que suaviza a distribuição dos pontos para criar uma estimativa contínua da densidade.

Aplicações: Útil na identificação de regiões densas ou escassas em conjuntos de dados, especialmente em análise de agrupamento baseada em densidade.

image

Modelos de Distribuição:

Definição: Modelos de distribuição descrevem como os dados são distribuídos em um espaço de características.

Exemplos: Alguns modelos comuns incluem a distribuição normal (Gaussiana), a distribuição de Poisson, a distribuição exponencial, entre outras.

Estimação de Parâmetros: Os parâmetros do modelo são ajustados aos dados observados para representar a distribuição subjacente.

Aplicações: Análise estatística, geração de dados sintéticos, teste de hipóteses.

image

Esses conceitos são fundamentais em várias áreas da análise de dados. A distância entre pontos é crucial em muitas tarefas, a distância ao centróide é comum em algoritmos de agrupamento, a densidade de dados é explorada em métodos de agrupamento baseados em densidade, e os modelos de distribuição são amplamente utilizados em inferência estatística e modelagem de dados.

Exemplo na linguagem R

Este script em R aborda a análise de agrupamento (clustering), utilizando dados sobre pesquisas e personalidades.

Código:

 # CARREGAR DADOS ###########################################

# Ler CSV
states <- read.csv("C:\\Users\\eduar\\Desktop\\ClusterData.csv", header = T)
colnames(states)

# Salvar apenas dados numéricos
st <- states[, 3:27]
row.names(st) <- states[, 2]
colnames(st)

# Apenas dados de pesquisas sobre esportes
sports <- st[, 8:11]
head(sports)

# AGRUPAMENTO ##############################################

# Criar matriz de distâncias
d <- dist(st)

# Agrupamento hierárquico
c <- hclust(d)
c # Informações sobre o agrupamento

# Gerar dendrograma dos agrupamentos
plot(c, main = "Cluster with All Searches and Personality")

# Ou aninhar comandos em uma linha (para dados esportivos)
plot(hclust(dist(sports)), main = "Sports Searches")

# LIMPAR ###################################################

# Limpar espaço de trabalho
rm(list = ls()) 

# Limpar gráficos
dev.off()

# Limpar console
cat("\014")  # CTRL+L

Plots:

image

Cluster with All Searches and Personality

image

Sports Searches

Console:

> # Ler CSV
> states <- read.csv("C:\\Users\\eduar\\Desktop\\ClusterData.csv", header = T)
> colnames(states)
 [1] "State"             "state_code"        "data.science"     
 [4] "cluster.analysis"  "college"           "startup"          
 [7] "entrepreneur"      "ceo"               "mortgage"         
[10] "nba"               "nfl"               "mlb"              
[13] "fifa"              "modern.dance"      "prius"            
[16] "escalade"          "subaru"            "jello"            
[19] "bbq"               "royal.family"      "obfuscation"      
[22] "unicorn"           "Extraversion"      "Agreeableness"    
[25] "Conscientiousness" "Neuroticism"       "Openness"         
[28] "PsychRegions"      "region"            "division"         
> # Salvar apenas dados numéricos
> st <- states[, 3:27]
> row.names(st) <- states[, 2]
> colnames(st)
 [1] "data.science"      "cluster.analysis"  "college"          
 [4] "startup"           "entrepreneur"      "ceo"              
 [7] "mortgage"          "nba"               "nfl"              
[10] "mlb"               "fifa"              "modern.dance"     
[13] "prius"             "escalade"          "subaru"           
[16] "jello"             "bbq"               "royal.family"     
[19] "obfuscation"       "unicorn"           "Extraversion"     
[22] "Agreeableness"     "Conscientiousness" "Neuroticism"      
[25] "Openness"         
> # Apenas dados de pesquisas sobre esportes
> sports <- st[, 8:11]
> head(sports)
   nba   nfl   mlb  fifa
AL -0.74 -1.83 -1.30 -0.80
AZ  0.38  0.68  0.14  0.10
AR -0.71 -1.59 -1.24 -0.88
CA  1.46 -0.91  0.39  1.94
CO -0.80  1.17 -0.51 -0.33
CT  0.03 -0.64  1.25  1.58
> # Criar matriz de distâncias
> d <- dist(st)
> # Agrupamento hierárquico
> c <- hclust(d)
> c # Informações sobre o agrupamento

Call:
hclust(d = d)

Cluster method   : complete 
Distance         : euclidean 
Number of objects: 48 

> # Gerar dendrograma dos agrupamentos
> plot(c, main = "Cluster with All Searches and Personality")
> # Ou aninhar comandos em uma linha (para dados esportivos)
> plot(hclust(dist(sports)), main = "Sports Searches")

Exemplo na linguagem Python

Este script em ipynb aborda a análise de agrupamento (clustering), utilizando dados sobre pesquisas e personalidades.

Código:

# importar bibliotecas
import pandas as pd
import numpy as np
from matplotlib import pyplot as plt
from scipy.cluster.hierarchy import dendrogram, linkage
%matplotlib inline

# Ler CSV
states = pd.read_csv("C:\\Users\\eduar\\Desktop\\ClusterData.csv")
list(states.columns.values)

# Salvar apenas dados numéricos
st = states[states.columns[2:]]
st.index = states.iloc[:, 1]

# Cria matriz de ligação
Z = linkage(st, 'ward')

# Gerar dendrograma dos agrupamentos
plt.figure(figsize = (25, 10))
plt.title('Cluster with All Searches and Personality')
plt.ylabel('distance')
dendrogram(
  Z,
  labels = st.index,
  leaf_rotation = 0.,
  leaf_font_size = 18.,
)
plt.show()

Resultado obtido:

image

Lembrando que, se você tem interesse em aprofundar seus conhecimentos neste assunto, recomendo explorar sites especializados, assistir vídeos explicativos, ler artigos detalhados e participar de cursos específicos. Não é possível abordar todos os conceitos, pois a ciência de dados é um campo vasto, mas estou compartilhando minhas anotações como ponto de partida.

Compartilhe
Comentários (1)
Carlos Lima
Carlos Lima - 06/04/2024 23:20

Ótimo post, inclusive o sklearn possibilita a aplicação de clusterring sem que tenha que ser feita do zero, como do K-means.