Um dos algoritmos de agrupamento mais comuns na aprendizagem automática é conhecido como agrupamento k-means .

O agrupamento K-means é uma técnica em que cada observação de um conjunto de dados é colocada numa das seguintes categorias K aglomerados.

O objetivo final é ter K clusters em que as observações dentro de cada cluster são bastante semelhantes entre si, enquanto as observações em diferentes clusters são bastante diferentes entre si.

Ao efetuar o agrupamento k-means, o primeiro passo é escolher um valor para K - o número de clusters em que gostaríamos de colocar as observações.

Uma das formas mais comuns de escolher um valor para K é conhecido como o método do cotovelo que consiste em criar um gráfico com o número de clusters no eixo x e o total da soma dos quadrados no eixo y e, em seguida, identificar onde aparece um "cotovelo" ou uma curva no gráfico.

O ponto no eixo x onde ocorre o "cotovelo" indica-nos o número ótimo de clusters a utilizar no algoritmo de agrupamento k-means.

O exemplo seguinte mostra como utilizar o método elbow em Python.

Passo 1: Importar os módulos necessários

Em primeiro lugar, vamos importar todos os módulos de que necessitamos para efetuar o agrupamento k-means:

 import pandas as pd import numpy as np import matplotlib. pyplot as plt from sklearn. cluster import KMeans from sklearn. preprocessing import StandardScaler 

Passo 2: Criar o DataFrame

Em seguida, vamos criar um DataFrame que contém três variáveis para 20 jogadores de basquetebol diferentes:

 #criar DataFrame df = pd. DataFrame ({' points ': [18, np.nan, 19, 14, 14, 11, 20, 28, 30, 31, 35, 33, 29, 25, 25, 27, 29, 30, 19, 23], ' assists ': [3, 3, 4, 5, 4, 7, 8, 7, 6, 9, 12, 14, np.nan, 9, 4, 3, 4, 12, 15, 11], ' rebounds ': [15, 14, 14, 10, 8, 14, 13, 9, 5, 4, 11, 6, 5, 5, 3, 8, 12, 7, 6, 5]}) #drop rows with NA values in any columns df = df. dropna () #criar DataFrame escalado ondecada variável tem uma média de 0 e um desvio padrão de 1 scaled_df = StandardScaler(). fit_transform (df) 

Passo 3: Utilizar o método do cotovelo para encontrar o número ótimo de clusters

Suponhamos que gostaríamos de utilizar o agrupamento k-means para agrupar os jogadores que são semelhantes com base nestas três métricas.

Para efetuar o k-means clustering em Python, podemos utilizar a função KMeans do pacote sklearn módulo.

O argumento mais importante desta função é n_aglomerados que especifica o número de clusters em que as observações devem ser colocadas.

Para determinar o número ótimo de clusters, criaremos um gráfico que apresenta o número de clusters juntamente com a SSE (soma dos erros quadrados) do modelo.

Em seguida, procuramos um "cotovelo" onde a soma dos quadrados começa a "curvar-se" ou a nivelar-se. Este ponto representa o número ótimo de clusters.

O código a seguir mostra como criar esse tipo de gráfico que exibe o número de clusters no eixo x e o SSE no eixo y:

 #inicializar os parâmetros do kmeans kmeans_kwargs = { " init ": " random ", " n_init ": 10, " random_state ": 1, } #criar lista para guardar os valores SSE para cada k sse = [] for k in range(1, 11): kmeans = KMeans(n_clusters=k, ** kmeans_kwargs) kmeans. fit (scaled_df) sse. append (kmeans.inertia_) #visualizar resultados plt. plot (range(1, 11), sse) plt. xticks (range(1, 11)) plt. xlabel (" Number of Clusters ")plt. ylabel (" SSE ") plt. show () 

Neste gráfico, parece que existe um cotovelo ou "curva" em k = 3 cachos .

Assim, utilizaremos 3 clusters ao ajustar o nosso modelo de agrupamento k-means na etapa seguinte.

Etapa 4: Efetuar o agrupamento K-Means com o método Optimal K

O código seguinte mostra como efetuar o agrupamento k-means no conjunto de dados utilizando o valor ótimo para k de 3:

 #instanciar a classe k-means, utilizando o número ótimo de clusters kmeans = KMeans(init=" random ", n_clusters= 3 , n_init= 10 , random_state= 1 ) #ajustar o algoritmo k-means aos dados kmeans. fit (scaled_df) #ver as atribuições de clusters para cada observação kmeans. labels_ array([1, 1, 1, 1, 1, 1, 2, 2, 0, 0, 0, 0, 0, 2, 2, 2, 0, 0, 0, 0]) 

A matriz resultante mostra as atribuições de clusters para cada observação no DataFrame.

Para tornar estes resultados mais fáceis de interpretar, podemos acrescentar uma coluna ao DataFrame que mostra a atribuição de cada jogador a um cluster:

 #append cluster assingments to original DataFrame df[' cluster '] = kmeans. labels_ #view updated DataFrame print (df) points assists rebounds cluster 0 18.0 3.0 15 1 2 19.0 4.0 14 1 3 14.0 5.0 10 1 4 14.0 4.0 8 1 5 11.0 7.0 14 1 6 20.0 8.0 13 1 7 28.0 7.0 9 2 8 30.0 6.0 5 2 9 31.0 9.0 4 0 10 35.0 12.0 11 0 11 33.0 14.0 6 0 13 25.0 9.0 5 0 14 25.0 4.0 3 2 15 27.0 3.0 8 2 16 29.0 4.0 12 2 17 30.012.0 7 0 18 19.0 15.0 6 0 19 23.0 11.0 5 0 

O agrupamento contém o número do grupo (0, 1 ou 2) a que cada jogador foi atribuído.

Os jogadores que pertencem ao mesmo agrupamento têm valores mais ou menos semelhantes para o pontos , assistências e ressaltos colunas.

Nota : Pode encontrar a documentação completa para o KMeans função de sklearn aqui.