Clustering k-means em r: exemplo passo a passo


Clustering é uma técnica de aprendizado de máquina que tenta encontrar grupos de observações dentro de um conjunto de dados.

O objetivo é encontrar clusters tais que as observações dentro de cada cluster sejam bastante semelhantes entre si, enquanto as observações em diferentes clusters sejam bastante diferentes umas das outras.

Clustering é uma forma de aprendizagem não supervisionada porque estamos simplesmente tentando encontrar uma estrutura dentro de um conjunto de dados, em vez de prever o valor de uma variável de resposta .

O clustering é frequentemente usado em marketing quando as empresas têm acesso a informações como:

  • Renda familiar
  • Tamanho da família
  • Profissão de chefe de família
  • Distância até a área urbana mais próxima

Quando esta informação está disponível, o agrupamento pode ser utilizado para identificar agregados familiares que são semelhantes e podem ter maior probabilidade de comprar determinados produtos ou responder melhor a um determinado tipo de publicidade.

Uma das formas mais comuns de agrupamento é conhecida como agrupamento k-means .

O que é agrupamento K-Means?

O agrupamento K-means é uma técnica na qual colocamos cada observação de um conjunto de dados em um dos K clusters.

O objetivo final é ter K clusters nos quais as observações dentro de cada cluster sejam bastante semelhantes entre si, enquanto as observações em diferentes clusters sejam bastante diferentes umas das outras.

Na prática, usamos as seguintes etapas para realizar o agrupamento K-means:

1. Escolha um valor para K.

  • Primeiro, precisamos decidir quantos clusters queremos identificar nos dados. Muitas vezes precisamos simplesmente testar vários valores diferentes para K e analisar os resultados para ver qual número de clusters parece fazer mais sentido para um determinado problema.

2. Atribua aleatoriamente cada observação a um cluster inicial, de 1 a K.

3. Execute o procedimento a seguir até que as atribuições do cluster parem de mudar.

  • Para cada um dos K clusters, calcule o centro de gravidade do cluster. Este é simplesmente o vetor de características p- médias para as observações do k-ésimo cluster.
  • Atribua cada observação ao cluster com o centróide mais próximo. Aqui, o mais próximo é definido usando a distância euclidiana .

Clustering K-Means em R

O tutorial a seguir fornece um exemplo passo a passo de como realizar clustering k-means em R.

Passo 1: Carregue os pacotes necessários

Primeiro, carregaremos dois pacotes contendo várias funções úteis para clustering k-means em R.

 library (factoextra)
library (cluster)

Etapa 2: carregar e preparar dados

Para este exemplo, usaremos o conjunto de dados USArrests incorporado em R, que contém o número de prisões por 100.000 pessoas em cada estado dos EUA em 1973 por assassinato , agressão e estupro , bem como a porcentagem da população de cada estado vivendo em áreas urbanas. áreas. , UrbanPop .

O código a seguir mostra como fazer o seguinte:

  • Carregar conjunto de dados USArrests
  • Remova todas as linhas com valores ausentes
  • Dimensione cada variável no conjunto de dados para ter uma média de 0 e um desvio padrão de 1
 #load data
df <-USArrests

#remove rows with missing values
df <- na. omitted (df)

#scale each variable to have a mean of 0 and sd of 1
df <- scale(df)

#view first six rows of dataset
head(df)

               Murder Assault UrbanPop Rape
Alabama 1.24256408 0.7828393 -0.5209066 -0.003416473
Alaska 0.50786248 1.1068225 -1.2117642 2.484202941
Arizona 0.07163341 1.4788032 0.9989801 1.042878388
Arkansas 0.23234938 0.2308680 -1.0735927 -0.184916602
California 0.27826823 1.2628144 1.7589234 2.067820292
Colorado 0.02571456 0.3988593 0.8608085 1.864967207

Etapa 3: Encontre o número ideal de clusters

Para realizar o agrupamento k-means em R, podemos usar a função integrada kmeans() , que usa a seguinte sintaxe:

kmeans (dados, centros, nstart)

Ouro:

  • dados: nome do conjunto de dados.
  • centros: O número de clusters, denotados k .
  • nstart: o número de configurações iniciais. Como é possível que diferentes clusters iniciais levem a resultados diferentes, recomenda-se usar diversas configurações iniciais diferentes. O algoritmo k-means encontrará as configurações iniciais que levam à menor variação dentro do cluster.

Como não sabemos antecipadamente quantos clusters são ideais, criaremos dois gráficos diferentes que podem nos ajudar a decidir:

1. Número de clusters em relação ao total na soma dos quadrados

Primeiro, usaremos a função fviz_nbclust() para criar um gráfico do número de clusters versus o total na soma dos quadrados:

 fviz_nbclust(df, kmeans, method = “ wss ”) 

Número ideal de clusters em cluster k-means

Normalmente, quando criamos esse tipo de gráfico, procuramos um “joelho” onde a soma dos quadrados começa a “dobrar” ou se nivelar. Geralmente, esse é o número ideal de clusters.

Para este gráfico, parece que há uma pequena torção ou “curvatura” em k = 4 clusters.

2. Número de clusters versus estatísticas de lacunas

Outra forma de determinar o número ideal de clusters é usar uma métrica chamada estatística de desvio , que compara a variação total intra-cluster para diferentes valores de k com seus valores esperados para uma distribuição sem cluster.

Podemos calcular a estatística de lacuna para cada número de clusters usando a função clusGap() do pacote de cluster , bem como representar graficamente os clusters em relação às estatísticas de lacuna usando a função fviz_gap_stat() :

 #calculate gap statistic based on number of clusters
gap_stat <- clusGap(df,
                    FUN = kmeans,
                    nstart = 25,
                    K.max = 10,
                    B = 50)

#plot number of clusters vs. gap statistic
fviz_gap_stat(gap_stat) 

Estatística de desvio para número ideal de clusters

No gráfico, podemos ver que a estatística de gap é mais alta em k = 4 clusters, o que corresponde ao método do cotovelo que usamos anteriormente.

Etapa 4: realizar clustering K-Means com K ideal

Finalmente, podemos realizar agrupamento k-means no conjunto de dados usando o valor ideal para k de 4:

 #make this example reproducible
set.seed(1)

#perform k-means clustering with k = 4 clusters
km <- kmeans(df, centers = 4, nstart = 25)

#view results
km

K-means clustering with 4 clusters of sizes 16, 13, 13, 8

Cluster means:
      Murder Assault UrbanPop Rape
1 -0.4894375 -0.3826001 0.5758298 -0.26165379
2 -0.9615407 -1.1066010 -0.9301069 -0.96676331
3 0.6950701 1.0394414 0.7226370 1.27693964
4 1.4118898 0.8743346 -0.8145211 0.01927104

Vector clustering:
       Alabama Alaska Arizona Arkansas California Colorado 
             4 3 3 4 3 3 
   Connecticut Delaware Florida Georgia Hawaii Idaho 
             1 1 3 4 1 2 
      Illinois Indiana Iowa Kansas Kentucky Louisiana 
             3 1 2 1 2 4 
         Maine Maryland Massachusetts Michigan Minnesota Mississippi 
             2 3 1 3 2 4 
      Missouri Montana Nebraska Nevada New Hampshire New Jersey 
             3 2 2 3 2 1 
    New Mexico New York North Carolina North Dakota Ohio Oklahoma 
             3 3 4 2 1 1 
        Oregon Pennsylvania Rhode Island South Carolina South Dakota Tennessee 
             1 1 1 4 2 4 
         Texas Utah Vermont Virginia Washington West Virginia 
             3 1 2 1 1 2 
     Wisconsin Wyoming 
             2 1 

Within cluster sum of squares by cluster:
[1] 16.212213 11.952463 19.922437 8.316061
 (between_SS / total_SS = 71.2%)

Available components:

[1] "cluster" "centers" "totss" "withinss" "tot.withinss" "betweenss"   
[7] "size" "iter" "ifault"         

Pelos resultados podemos ver que:

  • 16 estados foram atribuídos ao primeiro cluster
  • 13 estados foram atribuídos ao segundo cluster
  • 13 estados foram atribuídos ao terceiro cluster
  • 8 estados foram atribuídos ao quarto cluster

Podemos visualizar os clusters em um gráfico de dispersão que exibe os dois primeiros componentes principais nos eixos usando a função fivz_cluster() :

 #plot results of final k-means model
fviz_cluster(km, data = df)

Gráfico de agrupamento K-médias em R

Também podemos usar a função Aggregate() para encontrar a média das variáveis em cada cluster:

 #find means of each cluster
aggregate(USArrests, by= list (cluster=km$cluster), mean)

cluster Murder Assault UrbanPop Rape
				
1 3.60000 78.53846 52.07692 12.17692
2 10.81538 257.38462 76.00000 33.19231
3 5.65625 138.87500 73.87500 18.78125
4 13.93750 243.62500 53.75000 21.41250

Interpretamos esta saída da seguinte forma:

  • O número médio de assassinatos por 100.000 cidadãos entre os estados do Grupo 1 é de 3,6 .
  • O número médio de agressões por 100.000 cidadãos entre os estados do Grupo 1 é de 78,5 .
  • A porcentagem média de residentes que vivem em área urbana entre os estados do Grupo 1 é de 52,1% .
  • O número médio de violações por 100.000 cidadãos entre os estados do Grupo 1 é de 12,2 .

E assim por diante.

Também podemos adicionar as atribuições de cluster de cada estado ao conjunto de dados original:

 #add cluster assignment to original data
final_data <- cbind(USArrests, cluster = km$cluster)

#view final data
head(final_data)

	Murder Assault UrbanPop Rape cluster
				
Alabama 13.2 236 58 21.2 4
Alaska 10.0 263 48 44.5 2
Arizona 8.1 294 80 31.0 2
Arkansas 8.8 190 50 19.5 4
California 9.0 276 91 40.6 2
Colorado 7.9 204 78 38.7 2

Vantagens e desvantagens do agrupamento K-Means

O clustering K-means oferece as seguintes vantagens:

  • É um algoritmo rápido.
  • Ele pode lidar bem com grandes conjuntos de dados.

No entanto, tem as seguintes desvantagens potenciais:

  • Isso exige que especifiquemos o número de clusters antes de executar o algoritmo.
  • É sensível a valores discrepantes.

Duas alternativas para o agrupamento k-means são o agrupamento k-means e o agrupamento hierárquico.


Você pode encontrar o código R completo usado neste exemplo aqui .

Add a Comment

O seu endereço de email não será publicado. Campos obrigatórios marcados com *