Método K-Means Elbow e Análise de Silhuetas com Yellowbrick e Scikit-Learn PlatoBlockchain Data Intelligence. Pesquisa Vertical. Ai.

Método K-Means Elbow e Análise de Silhueta com Yellowbrick e Scikit-Learn

Introdução

K-Means é um dos algoritmos de agrupamento mais populares. Por ter pontos centrais em um cluster, ele agrupa outros pontos com base em sua distância até aquele ponto central.

Uma desvantagem do K-Means é ter que escolher o número de clusters, K, antes de executar o algoritmo que agrupa os pontos.

Se você gostaria de ler um guia detalhado para K-Means Clustering, dê uma olhada em “K-Means Clustering com Scikit-Learn”.

Método de cotovelo e análise de silhueta

As técnicas mais utilizadas para a escolha do número de Ks são as Método do cotovelo e os votos de Análise de silhueta.

Para facilitar a escolha de Ks, o Tijolo amarelo library encerra o código com loops for e um gráfico que normalmente escreveríamos em 4 linhas de código.

Para instalar o Yellowbrick diretamente de um notebook Jupyter, execute:

! pip install yellowbrick

Vamos ver como funciona para um conjunto de dados familiar que já faz parte do Scikit-learn, o íris conjunto de dados.

O primeiro passo é importar o conjunto de dados, KMeans e yellowbrick bibliotecas e carregue os dados:

from sklearn.datasets import load_iris
from sklearn.cluster import KMeans
from yellowbrick.cluster import KElbowVisualizer, SilhouetteVisualizer

iris = load_iris()

Observe aqui, importamos o KElbowVisualizer e SilhouetteVisualizer da yellowbrick.cluster, esses são os módulos que usaremos para visualizar os resultados do Elbow e Silhouette!

Depois de carregar o conjunto de dados, no data chave do grupo (um tipo de dado que é uma extensão de um dicionário) são os valores dos pontos que queremos agrupar. Se você quiser saber o que os números representam, dê uma olhada em iris['feature_names'].

Sabe-se que o conjunto de dados Iris contém três tipos de íris: 'versicolor', 'virginica' e 'setosa'. Você também pode inspecionar as classes em iris['target_names'] verificar.

Então, temos 4 features para agrupar e elas devem ser separadas em 3 agrupamentos diferentes de acordo com o que já sabemos. Vamos ver se nossos resultados com o Método do Cotovelo e Análise da Silhueta corroboram isso.

Primeiro, vamos selecionar os valores do recurso:

print(iris['feature_names']) 
print(iris['target_names']) 

X = iris['data']

Então, podemos criar um KMeans modelo, um KElbowVisualizer() instância que receberá esse modelo junto com o número de ks para o qual uma métrica será calculada, neste caso de (2 - 11) Ks.

Depois disso, ajustamos o visualizador com os dados usando fit() e exibir o gráfico com show(). Se uma métrica não for especificada, o visualizador usará o distorção métrica, que calcula a soma das distâncias quadradas de cada ponto ao seu centro atribuído:

model = KMeans(random_state=42)

elb_visualizer = KElbowVisualizer(model, k=(2,11))
elb_visualizer.fit(X)    
elb_visualizer.show()  

Agora, já temos um Cotovelo de pontuação de distorção para cluster do KMeans plote com uma linha vertical marcando qual seria o melhor número de ks, neste caso, 4.

Parece que o Método Elbow com uma métrica de distorção não era a melhor escolha se não conhecêssemos o número real de clusters. A Silhouette também indicará que existem 4 clusters? Para responder isso, basta repetir o último código com um modelo com 4 clusters e um objeto visualizador diferente:

model_4clust = KMeans(n_clusters = 4, random_state=42)

sil_visualizer = SilhouetteVisualizer(model_4clust)
sil_visualizer.fit(X)    
sil_visualizer.show()

pontuação de silhueta para k significa cluster usando o método do cotovelo

O código exibe um Gráfico de silhueta do cluster KMeans para 150 amostras em 4 centros. Para analisar esses clusters, precisamos olhar para o valor do coeficiente de silhueta (ou score), seu melhor valor é mais próximo de 1. O valor médio que temos é 0.5, marcado pela linha vertical, e não tão bom.

Também precisamos olhar para a distribuição entre os agrupamentos – um bom gráfico tem tamanhos semelhantes de áreas agrupadas ou pontos bem distribuídos. Neste gráfico, existem 3 clusters menores (número 3, 2, 1) e um cluster maior (número 0), o que não é o resultado que esperávamos.

Confira nosso guia prático e prático para aprender Git, com práticas recomendadas, padrões aceitos pelo setor e folha de dicas incluída. Pare de pesquisar comandos Git no Google e realmente aprender -lo!

Vamos repetir o mesmo gráfico para 3 clusters para ver o que acontece:

model_3clust = KMeans(n_clusters = 3, random_state=42)

sil_visualizer = SilhouetteVisualizer(model_3clust)
sil_visualizer.fit(X)    
sil_visualizer.show()

silhueta para clusters kmeans

Ao alterar o número de clusters, a pontuação da silhueta ficou 0.05 maiores e os clusters são mais equilibrados. Se não soubéssemos o número real de clusters, experimentando e combinando as duas técnicas, teríamos escolhido 3 em vez de 2 como o número de Ks.

Este é um exemplo de como combinar e comparar diferentes métricas, visualizar dados e experimentar diferentes valores de clusters é importante para conduzir o resultado na direção certa. E também, como ter uma biblioteca que facilite essa análise pode ajudar nesse processo!

Carimbo de hora:

Mais de Abuso de pilha