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:
Aplicações: Utilizada em diversas áreas, como aprendizado de máquina, análise de dados espaciais e geometria.
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.
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.
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.
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:
Cluster with All Searches and Personality
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:
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.