K significa cluster no R: tutorial passo a passo com exemplo

Publicados: 2020-02-17

Como cientista de dados, você fará muitos agrupamentos. Existem muitos tipos de algoritmos de clustering disponíveis e você deve ser bem versado no uso de todos eles. Neste artigo, discutiremos um algoritmo de agrupamento popular, K-means, e veremos como ele é usado em R.

Você descobrirá a teoria básica por trás do agrupamento K-means em R e como ele é usado. Também discutimos um exemplo prático mais adiante no artigo. Certifique-se de marcar este artigo para referência futura. Leia mais sobre análise de cluster em mineração de dados.

Antes de começarmos a discutir K significa clustering em R, devemos dar uma olhada nos tipos de algoritmos de clustering que estão presentes para que você possa entender melhor como esse algoritmo lida com eles.

Leia: Principais bibliotecas R em ciência de dados

Índice

Tipos de agrupamento

Quando você agrupa vários objetos de tal forma que os objetos mais semelhantes entre si fiquem em um cluster próximo, isso é chamado de clustering. A distância entre os objetos pode ser relevante para sua semelhança. A similaridade mostra a força do relacionamento entre dois objetos distintos na ciência de dados. Clustering é uma técnica popular de mineração de dados. O clustering encontra suas aplicações em vários setores e áreas, incluindo análise de imagens, aprendizado de máquina, compactação de dados, reconhecimento de padrões e muitos outros.

Clustering é de dois tipos – Hard e Soft. Vamos discutir cada um deles brevemente.

  • Em um cluster rígido, um ponto de dados pertenceria totalmente a um cluster ou não pertenceria a ele. Não há meio-termo.
  • Em um soft cluster, um objeto de dados pode estar relacionado a mais de um cluster ao mesmo tempo devido a alguma probabilidade.

Aprenda o curso de ciência de dados online das melhores universidades do mundo. Ganhe Programas PG Executivos, Programas de Certificado Avançado ou Programas de Mestrado para acelerar sua carreira.

Tipos de algoritmos de agrupamento

Assim como existem diferentes tipos de clusters, também existem diferentes tipos de algoritmos de clustering. Você pode diferenciar algoritmos com base em seu modelo de cluster. Isso significa que você pode distingui-los com base em como eles formam clusters. Se começarmos a falar sobre todos os tipos de algoritmos de agrupamento, este guia se tornará muito longo e longe do ponto principal. Portanto, discutiremos apenas alguns tipos proeminentes de algoritmos de agrupamento. Existem algoritmos de agrupamento baseados em conectividade, baseados em centroides, baseados em densidade e baseados em distribuição.

Conceito Básico de K-Means

O conceito básico de K-means é bastante simples. O K-means está relacionado à definição dos clusters para que a variação total dentro do cluster seja a menor possível. Há uma variedade de algoritmos de k-médias. O algoritmo k-means mais comum é o algoritmo Hartigan-Wong, que afirma que a variação intra-cluster total é igual à soma das distâncias quadradas das distâncias euclidianas entre centroides e seus itens:

W( C k )= x i C k ( x i k ) 2

Aqui x i refere-se a um ponto de dados que pertence ao cluster C k e k refere-se ao valor médio dos pontos de dados presentes no cluster Ck.

O valor de x i deve ser tal que a soma do quadrado da distância entre x i e k seja o mínimo.

O que é o algoritmo K-means?

Para usar o algoritmo, primeiro teremos que indicar o número de clusters, K, que estarão presentes em nosso resultado. O algoritmo primeiro seleciona K objetos aleatoriamente para atuar como centros iniciais do cluster. Chamamos esses objetos de centroides ou meios do cluster. Em seguida, atribuímos os objetos restantes aos seus centróides mais próximos. A distância euclidiana entre os centróides do cluster e os objetos determina o quão próximos eles estão.

Depois de atribuirmos os objetos aos seus respectivos centroides, o algoritmo calcula o valor médio dos clusters. Após essa re-computação, verificamos novamente as observações para ver se elas podem estar mais próximas de um cluster diferente. Em seguida, reatribuímos os objetos aos centróides de acordo. Continuamos repetindo essas etapas até que a atribuição de clusters seja interrompida. Isso significa que paramos de repetir as iterações quando os clusters formados em uma iteração são os mesmos da iteração anterior.

Como usar o cluster K-Means (exemplo)

Agora que você sabe o que é o algoritmo K-means em R e como ele funciona, vamos discutir um exemplo para melhor esclarecimento. Neste exemplo, agruparemos os clientes de uma organização usando o banco de dados de clientes atacadistas. Os dados para este problema estão disponíveis no repositório de aprendizado de máquina da Berkley UCI. Você pode conferir aqui .

Primeiro, vamos ler os dados. E, em seguida, obter um resumo dele. Depois de ler os dados e ver seu resumo, você verá que existem algumas diferenças gritantes entre os principais consumidores em diferentes categorias. Você encontrará alguns valores discrepantes, que não podem ser removidos facilmente com normalização (ou dimensionamento). Com esses dados, uma empresa gostaria de ver o que seus clientes intermediários compram na maioria das vezes. Isso porque uma empresa teria uma ideia decente do que seus principais clientes compram.

Para criar um cluster de clientes de nível médio, devemos primeiro nos livrar da camada superior de clientes de cada categoria. Então, vamos remover os 5 principais e criar um novo conjunto. Veja como faremos isso:

top.n.custs <- function (data,cols,n=5) { #Requer algum quadro de dados e o N superior para remover

idx.to.remove <-integer(0) #Inicializa um vetor para manter os clientes sendo removidos

for (c in cols){ # Para cada coluna nos dados que passamos para esta função

col.order <-order(data[,c],decreasing=T) #Classifica a coluna “c” em ordem decrescente (maior no topo)

#Order retorna o índice classificado (por exemplo, linha 15, 3, 7, 1, …) em vez dos valores reais classificados.

idx <-head(col.order, n) #Pega o primeiro n da coluna ordenada C para

idx.to.remove <-union(idx.to.remove,idx) #Combina e desduplica os ids de linha que precisam ser removidos

}

return(idx.to.remove) #Retorna os índices dos clientes a serem removidos

}

top.custs <-top.n.custs(data,cols=3:8,n=5)

length(top.custs) #Quantos clientes são necessários para serem removidos?

data[top.custs,] #Examinar os clientes disponíveis

data.rm.top<-data[-c(top.custs),] #Remover os Clientes necessários

Com este novo arquivo, podemos começar a trabalhar em nossa análise de cluster. Para realizar a análise de cluster, usaremos o seguinte código:

set.seed(76964057) #Defina a semente para reprodutibilidade

k <-kmeans(data.rm.top[,-c(1,2)], centers=5) #Cria 5 clusters, remove as colunas 1 e 2

k$centers #Display&nbsp;centros de cluster

table(k$cluster) #Dê a contagem de pontos de dados em cada cluster

Ao executar este código no banco de dados fornecido, você obterá estes resultados:

  • O primeiro cluster teria detergentes de alta qualidade, mas a baixa quantidade de alimentos frescos
  • O terceiro cluster teria mais produtos frescos

Você precisará usar insidess e betweenss para uma interpretação detalhada dos resultados. k$withinss é igual à soma do quadrado da distância entre cada objeto de dados do centro do cluster. Quanto menor o intervalo, melhor seria o resultado. Se a medida inss for alta em seus dados, significa que há muitos valores discrepantes presentes e você precisa realizar a limpeza de dados. k$betweenss é a soma do quadrado da distância entre os diferentes centros dos clusters. A distância entre os centros do cluster deve ser a maior possível.

Leia: 6 estruturas de dados mais usadas em R

Você deve ter ajuda de tentativa e erro para obter os resultados mais precisos. Para fazer isso, você precisará experimentar vários valores para K. Quando o gráfico de seus resultados não mostra incremento no interior de seus clusters, esse ponto seria o valor mais adequado para K. Você pode encontrar o valor de K através do seguinte código:

rng<-2:20 #K de 2 a 20

tenta <-100 #Executa o algoritmo K Means 100 vezes

avg.totw.ss <-integer(length(rng)) #Configura um vetor vazio para armazenar todos os pontos

for(v in rng){ # Para cada valor da variável de intervalo

v.totw.ss <-integer(tries) #Configura um vetor vazio para conter as 100 tentativas

for(i em 1:tenta){

k.temp <-kmeans(data.rm.top,centers=v) #Run kmeans

v.totw.ss[i] <-k.temp$tot.withinss#Armazena o valor total

}

avg.totw.ss[v-1] <-mean(v.totw.ss) # Média dos 100 valores totais

}

plot(rng,avg.totw.ss,type=”b”, main=”Total dentro de SS por vários K”,

ylab=”Total médio dentro da soma dos quadrados”,

xlab=”Valor de K”)

É isso. Agora você pode usar o gráfico obtido desse código para obter o melhor valor para K e usá-lo para obter os resultados necessários. Use este exemplo para testar seu conhecimento sobre clustering K-means em R. Aqui está todo o código que usamos no exemplo:

data <-read.csv(“Dados de clientes atacadistas.csv”,header=T)

resumo (dados)

top.n.custs <- function (data,cols,n=5) { #Requer algum quadro de dados e o N superior para remover

idx.to.remove <-integer(0) #Inicializa um vetor para manter os clientes sendo removidos

for (c in cols){ # Para cada coluna nos dados que passamos para esta função

col.order <-order(data[,c],decreasing=T) #Classifica a coluna “c” em ordem decrescente (maior no topo)

#Order retorna o índice classificado (por exemplo, linha 15, 3, 7, 1, …) em vez dos valores reais classificados.

idx <-head(col.order, n) #Pega o primeiro n da coluna ordenada C para

idx.to.remove <-union(idx.to.remove,idx) #Combina e desduplica os ids de linha que precisam ser removidos

}

return(idx.to.remove) #Retorna os índices dos clientes a serem removidos

}

top.custs <-top.n.custs(data,cols=3:8,n=5)

length(top.custs) #Quantos clientes serão removidos?

data[top.custs,] #Examinar os clientes

data.rm.top <-data[-c(top.custs),] #Remover os Clientes

set.seed(76964057) #Defina a semente para reprodutibilidade

k <-kmeans(data.rm.top[,-c(1,2)], centers=5) #Cria 5 clusters, remove as colunas 1 e 2

k$centers #Display cluster centers

table(k$cluster) #Dê uma contagem de pontos de dados em cada cluster

rng<-2:20 #K de 2 a 20

tentativas<-100 #Executa o algoritmo K Means 100 vezes

avg.totw.ss<-integer(length(rng)) #Configura um vetor vazio para armazenar todos os pontos

for(v in rng){ # Para cada valor da variável de intervalo

v.totw.ss<-integer(tries) #Configura um vetor vazio para conter as 100 tentativas

for(i em 1:tenta){

k.temp<-kmeans(data.rm.top,centers=v) #Run kmeans

v.totw.ss[i]<-k.temp$tot.withinss#Armazena o valor total

}

avg.totw.ss[v-1]<-mean(v.totw.ss) #Media o total de 100 inss

}

plot(rng,avg.totw.ss,type=”b”, main=”Total dentro de SS por vários K”,

ylab=”Total médio dentro da soma dos quadrados”,

xlab=”Valor de K”)

Conclusão

Esperamos que você tenha gostado deste guia. Tentamos mantê-lo conciso e abrangente. Se você tiver alguma dúvida sobre o algoritmo K-means, sinta-se à vontade para nos perguntar. Adoraríamos responder às suas perguntas.

Se você está curioso para aprender sobre ciência de dados, confira o Programa PG Executivo em Ciência de Dados do IIIT-B & upGrad, que é criado para profissionais que trabalham e oferece mais de 10 estudos de caso e projetos, workshops práticos práticos, orientação com especialistas do setor, 1 -on-1 com mentores do setor, mais de 400 horas de aprendizado e assistência de trabalho com as principais empresas.

Quais são algumas das desvantagens de usar K-means?

Outliers podem puxar centroides, ou outliers podem receber seu próprio cluster em vez de serem desconsiderados. Como o K-means é estocástico, ele não pode garantir que a solução de agrupamento ótima global seja encontrada. Na realidade, discrepâncias e dados ruidosos podem tornar o algoritmo altamente sensível. Antes de agrupar, considere eliminar ou cortar valores discrepantes. Ao agrupar dados com tamanhos e densidades variáveis, o K-means apresenta dificuldades. Você deve generalizar o K-means para agrupar esses dados. Mesmo que eles claramente pertençam ao mesmo cluster, o algoritmo k-means não permite que pontos de dados distantes compartilhem o mesmo cluster.

Qual é o método do cotovelo no K-means?

O método k-means depende muito de encontrar o número apropriado de clusters. A abordagem do cotovelo é um método amplamente utilizado para determinar o melhor valor de K. A técnica do cotovelo realiza agrupamento K-means no conjunto de dados para um intervalo de valores K no gráfico e, em seguida, calcula uma pontuação média para todos os agrupamentos para cada valor de K. A pontuação de distorção, que é a soma das distâncias quadradas de cada ponto ao seu centro atribuído, é calculado por padrão. Outros modelos orientados a dados, como o número de componentes principais para caracterizar um conjunto de dados, podem utilizar a mesma técnica para determinar o número de parâmetros.

Como podemos encontrar outliers no K-means?

Outliers no agrupamento K-Means podem ser descobertos usando uma técnica baseada em distância e uma técnica baseada em cluster. Outliers são descobertos usando dendrogramas no caso de agrupamento hierárquico. O objetivo do projeto é descobrir e eliminar outliers para tornar o agrupamento mais preciso. Os dados são particionados em grupos K, alocando-os para os centros de cluster mais próximos na abordagem de identificação de outliers baseada em K-means. Podemos então calcular a distância ou dissimilaridade entre cada item e seu centro de cluster e escolher os outliers com as maiores distâncias. Como valores extremos podem impactar rapidamente uma média, o método de agrupamento K-means é sensível a valores discrepantes.