Neste blog, você entenderá o que é clustering K-means e como ele pode ser implementado nos dados criminais coletados em vários estados dos EUA. Os dados contêm crimes cometidos como: agressão, assassinato e estupro em prisões por 100.000 residentes em cada um dos 50 estados dos EUA em 1973. Além de analisar os dados, você também aprenderá sobre:
- Encontrar o número ideal de clusters.
- Minimizando distorção
- Criação e análise da curva do cotovelo.
- Compreendendo o mecanismo do algoritmo k-means.
Vamos começar com a análise. Os dados se parecem com:
Clique na imagem para baixar este conjunto de dados
Precisa deste conjunto de dados? Clique na imagem acima para fazer o download.
Primeiro, vamos preparar os dados para a análise. Para fazer isso, devemos remover quaisquer valores NA que possam estar presentes nos dados e converter os dados em uma matriz.
> crime0 crime str (crime) num [1:50, 1: 4] 13,2 10 8,1 8,8 9 7,9 3,3 5,9 15,4 17,4 ... - attr (*, 'dimnames') = Lista de 2 .. $: chr [1 : 50] 'Alabama' 'Alasca' 'Arizona' 'Arkansas' ... $: chr [1: 4] 'Assassinato' 'Assalto' 'UrbanPop' 'Estupro'
Vamos considerar o número de clusters como 5. A função Kmeans () pega os dados de entrada e o número de clusters nos quais os dados devem ser agrupados. A sintaxe é: kmeans (dados, k) onde k é o número de centros do cluster.
> classe cl (cl) [1] 'kmeans'
Analisando o Clustering:
> str (cl) Lista de 9 $ cluster: Int denominado [1:50] 5 3 3 5 3 5 4 5 3 5 ... ..- attr (*, 'nomes') = chr [1:50] ' Alabama '' Alaska '' Arizona '' Arkansas '... $ centers: num [1: 5, 1: 4] 2,95 6,11 12,14 5,59 11,3 ... ..- attr (*,' dimnames ') = Lista de 2 .. .. $: chr [1: 5] '1' '2' '3' '4' ... .. .. $: chr [1: 4] 'Assassinato' 'Assalto' 'UrbanPop' 'Estupro '$ totss: num 355808 $ withinss: num [1: 5] 4548 2286 16272 1480 3653 $ tot.withinss: num 28240 $ betweenss: num 327568 $ size: int [1: 5] 10 9 14 10 7 $ iter: int 3 $ ifault: int 0 - attr (*, 'class') = chr 'kmeans'
A função str () fornece a estrutura dos kmeans que inclui vários parâmetros como inss, betweenss, etc, analisando os quais você pode descobrir o desempenho dos kmeans.
betweenss: Entre a soma dos quadrados, ou seja, similaridade intracluster
dentro de si: dentro da soma do quadrado, ou seja, similaridade entre aglomerados
totwithinss: Soma de todas as entrelinhas de todos os clusters, ou seja, similaridade intra-cluster total
Um bom agrupamento terá um valor menor de dentro e maior valor de entre que depende do número de clusters ‘k’ escolhidos inicialmente. Vamos ver como podemos encontrar o valor ideal de 'k'.
Encontrando o valor ideal de 'k'
Um valor ideal de 'k' é o valor que nos dá um conjunto convergente de clusters com distorção mínima. Quanto maior a distorção, piores serão os clusters formados.
Distorção:
A distorção pode ser calculada em termos de 'dentro' de cada um dos clusters. Menor o valor de 'entranhas' de um determinado cluster, mais densamente povoado será, portanto, distorção mínima.
kmeans.wss.k<- function(crime, k){ km = kmeans(crime, k) return (km$tot.withinss) }
Esta função pega os dados e o valor de ke retorna o ‘km $ totwithinss’ para ele. ‘Km $ totwithinss’ é a soma total dos quadrados dentro do cluster, incluindo, assim, os limites de todos os 5 grupos criados, ou seja,soma (dentro)
. Quanto maior o valor de ‘km $ totwithinss’, maior será a distorção.
Para k = 5, inss é 24417,02
> kmeans.wss.k (crime, 5) [1] 24417.02
Vamos aumentar o valor de k de 5 para 10 e observar a diferença.
> kmeans.wss.k (crime, 10) [1] 11083.04
Pode-se ver que conforme o valor de K aumenta, a distorção diminui.
família de colunas cassandra vs tabela
Podemos retirar os diferentes valores de ‘km $ totwithinss’ e traçá-los em um gráfico para encontrar a relação entre a distorção e o valor de k. A seguinte função faz isso para nós:
> kmeans.dis maxk = 10> dis = kmeans.dis (crime, maxk)> plot (1: maxk, dis, type = 'b', xlab = 'Número de clusters', + ylab = 'Distorção', + col = 'azul')
Ta Da !!! Portanto, temos a famosa curva do cotovelo conosco.
Curva do cotovelo:
Este é o gráfico entre 'k', o número de clusters e o 'totwithinss' (ou distorção) para cada valor de k. Você pode ver que quando o número de aglomerados é menor, há uma diminuição gradual na distorção, mas à medida que continuamos aumentando o valor de k, a taxa de redução dos valores de distorção se torna constante.
Este valor de k além do qual a taxa de distorção se torna constante é o valor ideal. Aqui k = 4.
Vamos aplicar alguma animação para entender como R nos deu os resultados agrupados.
> biblioteca (animação)> cl<- kmeans.ani(crime, 4)
Algoritmo de agrupamento Kmeans:
Vamos entender o algoritmo no qual funciona o agrupamento de k-means:
Passo 1. Se k = 4, selecionamos 4 pontos aleatórios e assumimos que são centros de cluster para os clusters a serem criados.
Passo 2. Pegamos um ponto de dados aleatório do espaço e descobrimos sua distância de todos os 4 centros dos clusters. Se o ponto de dados estiver mais próximo do centro do cluster verde, ele será colorido em verde e, da mesma forma, todos os pontos serão categorizados entre os 4 clusters.
Etapa 3. Agora calculamos o centróide de todos os pontos verdes e atribuímos esse ponto como o centro do cluster para aquele cluster.
Da mesma forma, calculamos os centróides para todos os 4 pontos coloridos (agrupados) e atribuímos os novos centróides como centros do agrupamento.
Passo 4. As etapas 2 e 3 são executadas iterativamente, a menos que os centros do cluster convirjam em um ponto e não se movam mais.
string de data java até o momento
Assim, chegamos aos centros dos clusters convergentes.
Pode-se observar que os dados estão divididos em 4 clusters. Os centros do cluster são:
> cl $ centers Assassinato Assalto UrbanPop Estupro Texas 4,740741 104,8519 62,96296 16,10 Louisiana 10,907143 219,9286 71,71429 25,95 Carolina do Sul 13,375000 284,5000 46,25000 25,05 Novo México 11,040000 298,0000 77,60000 32,68
Cluster-4 com ‘Novo México’ como o centro do cluster tem uma enorme taxa de criminalidade com a maior população também.
Acompanhamento do Cluster-3 e Cluster-2.
Cada estado é atribuído a um cluster, dependendo do qual podemos agora prever sua classificação de crimes. A saída é semelhante a:
Tem alguma questão para nós? Mencione isso na seção de comentários e entraremos em contato com você.
Postagens relacionadas: