Vamos entender o K-Means usando o pequeno exemplo usando os 4 objetos, e cada objeto tem 2 atributos.
ObjectsName | Attribute_x | Atributo_y |
---|---|---|
M1 | 1 | 1 |
M2 | 2 | 1 |
M3 | 4 | 3 |
M4 | 5 | 4 |
K-means para resolver um exemplo numérico:
Para resolver o problema numérico acima através do K-Means, temos que seguir as seguintes etapas:
O algoritmo K-Means é muito simples. Primeiro, temos que escolher qualquer número aleatório de k e depois escolher os centróides ou o centro dos clusters. Para escolher os centróides, podemos escolher qualquer número aleatório de objetos para a inicialização (depende do valor de k).
O algoritmo K-means etapas básicas são as seguintes:
Portanto, todo objeto tem dois pontos como X e Y, e eles representam no espaço do gráfico como seguinte:
Então, inicialmente escolhemos o valor de k = 2 como aleatório para resolver nosso problema acima.
Etapa 1: Inicialmente, escolhemos os dois primeiros objetos (1, 1) e (2, 1) como nossos centróides. O gráfico abaixo está mostrando o mesmo. Chamamos esses centróides C1 (1, 1) e C2 (2,1). Aqui, podemos dizer que C1 é Group_1 e C2 é Group_2.
Etapa 2: Agora, calcularemos cada dados do objeto para os centróides usando a fórmula de distância euclidiana.
Para calcular a distância, usamos a seguinte fórmula.
Calculamos a distância dos objetos aos centróides, como mostrado na imagem abaixo.
Portanto, calculamos cada distância do ponto de dados do objeto através do método de distância acima, finalmente recebemos a matriz de distância, conforme dado abaixo:
Dm_0 =
0 | 1 | 3.61 | 5 | C1 = (1,1) cluster1 | grupo 1 |
1 | 0 | 2.83 | 4.24 | C2 = (2,1) cluster2 | grupo_2 |
A | B | C | D | |
---|---|---|---|---|
1 | 2 | 4 | 5 | X |
1 | 1 | 3 | 4 | Y |
Agora, calculamos o valor da distância de cada objeto para cada centróide. Por exemplo, os pontos do objeto (1,1) têm um valor de distância para C1 é 0 e C2 é 1.
Como, a partir da matriz de distância acima, descobrimos que o objeto (1, 1) tem uma distância para cluster1 (c1) é 0 e para cluster2 (c2) é 1. Então o objeto um está próximo do próprio cluster1.
Da mesma forma, se verificarmos o objeto (4, 3), a distância ao cluster1 é 3.61 e para cluster2 é 2.83. Portanto, o objeto (4, 3) mudará para o cluster2.
Da mesma forma, se você verificar o objeto (2, 1), a distância para cluster1 é 1 e para cluster2 é 0. Então, esse objeto mudará para o cluster2.
Agora, de acordo com o valor da distância deles, agrupamos os pontos (agrupamento de objetos).
G_0 =
A | B | C | D | |
---|---|---|---|---|
1 | 0 | 0 | 0 | grupo 1 |
0 | 1 | 1 | 1 | grupo_2 |
Agora, de acordo com o valor da distância deles, agrupamos os pontos (agrupamento de objetos).
E, finalmente, o gráfico ficará abaixo depois de fazer o agrupamento (g_0).
Iteração_1: Agora, calcularemos novos centróides à medida que os grupos iniciais mudaram devido à fórmula de distância, como mostrado no G_0. Portanto, o grupo_1 tem apenas um objeto, portanto seu valor ainda é C1 (1,1), mas o grupo_2 possui 3 objetos, então seu novo valor centróide é
Então, novo C1 (1,1) e C2 (3.66, 2.66)
Agora, novamente temos que calcular toda a distância para novos centróides como calculamos antes.
Dm_1 =
0 | 1 | 3.61 | 5 | C1 = (1,1) cluster1 | grupo 1 |
3.14 | 2.36 | 0.47 | 1.89 | C2 = (3.66,2.66) cluster2 | grupo_2 |
A | B | C | D | |
---|---|---|---|---|
1 | 2 | 4 | 5 | X |
1 | 1 | 3 | 4 | Y |
Iteração_1 (clustering de objeto): Agora, em nome da nova matriz de distância (DM_1) Cálculo, nós a agrupamos de acordo com isso. Então, mudamos o objeto M2 de Group_2 para Group_1 como regra de distância mínima para centróides, e o restante do objeto será o mesmo. Portanto, o novo agrupamento será o mais abaixo.
G_1 =
A | B | C | D | |
---|---|---|---|---|
1 | 1 | 0 | 0 | grupo 1 |
0 | 0 | 1 | 1 | grupo_2 |
Agora, temos que calcular os novos centróides novamente, pois ambos os objetos têm dois valores.
Então, novos centróides serão
Então, depois de obtermos os novos centróides, o agrupamento ficará abaixo:
C1 = (1.5, 1)
C2 = (4.5, 3.5)
Iteração_2: Repetimos a etapa em que calculamos a nova distância de cada objeto para novos centróides calculados. Então, após o cálculo, obteremos a seguinte matriz de distância para iteração_2.
Dm_2 =
0.5 | 0.5 | 3.20 | 4.61 | C1 = (1.5, 1) cluster1 | grupo 1 |
4.30 | 3.54 | 0.71 | 0.71 | C2 = (4.5, 3.5) cluster2 | grupo_2 |
A B C D
A | B | C | D | |
---|---|---|---|---|
1 | 2 | 4 | 5 | X |
1 | 1 | 3 | 4 | Y |
Novamente, fazemos as atribuições de agrupamento com base na distância mínima, como fizemos antes. Então, depois de fazer isso, recebemos a matriz de cluster que é a mesma que G_1.
G_2 =
A | B | C | D | |
---|---|---|---|---|
1 | 1 | 0 | 0 | grupo 1 |
0 | 0 | 1 | 1 | grupo_2 |
Como aqui, G_2 == g_1, Portanto, nenhuma iteração adicional é necessária e podemos parar por aqui.
Implementação de K-Means usando Python:
Agora, vamos implementar o algoritmo K-Means em Python. Para implementar o K-Means, vamos usar o famoso conjunto de dados da íris, que é de código aberto. Este conjunto de dados tem três classes diferentes. Este conjunto de dados tem basicamente quatro recursos: Comprimento sépico, largura sépica, comprimento da pétala e largura da pétala. A última coluna dirá o nome da classe dessa linha como setosa.
O conjunto de dados parece o abaixo:
Para a implementação do Python K-Means, precisamos importar as bibliotecas necessárias. Então, importamos pandas, Numpy, Matplotlib e também Kmeans da Sklearn.CLUTSER Como dado abaixo:
Estamos lendo a íris.conjunto de dados CSV usando o método read_csv panda e exibirá os 10 principais resultados usando o método da cabeça.
Agora, estamos lendo apenas os recursos do conjunto de dados que precisamos treinar o modelo. Por isso, estamos lendo todos os quatro recursos dos conjuntos de dados (comprimento do sépal, largura da sépala, comprimento da pétala, largura da pétala). Para isso, passamos os quatro valores de índice [0, 1, 2, 3] na função ILOC do quadro de dados do Panda (DF), como mostrado abaixo:
Agora, escolhemos o número de clusters aleatoriamente (k = 5). Criamos o objeto da classe K-means e depois ajustamos nosso conjunto de dados X ao TEMPO para treinamento e previsão, como mostrado abaixo:
Agora, vamos visualizar nosso modelo com o valor aleatório de k = 5. Podemos ver claramente cinco grupos, mas parece que não é preciso, como mostrado abaixo.
Então, nosso próximo passo é descobrir que o número de clusters foi preciso ou não. E para isso, usamos o método do cotovelo. O método do cotovelo é usado para descobrir o número ideal do cluster para um conjunto de dados específico. Este método será usado para descobrir se o valor de k = 5 estava correto ou não, pois não estamos ficando cluster claro. Então, depois disso, vamos ao gráfico a seguir, que mostra o valor de k = 5 não está correto porque o valor ideal cai entre 3 ou 4.
Agora, vamos executar o código acima novamente com o número de clusters k = 4 como mostrado abaixo:
Agora, vamos visualizar o K = 4 novo cluster de construção. A tela abaixo mostra que agora o agrupamento é feito através do K-Means.
Conclusão
Então, estudamos o algoritmo K-Means no código numérico e python. Também vimos como podemos descobrir o número de clusters para um determinado conjunto de dados. Às vezes, o método do cotovelo não pode fornecer o número correto de clusters; portanto, nesse caso, existem vários métodos que podemos escolher.
O código deste blog, juntamente com o conjunto de dados, está disponível no seguinte link https: // github.com/shekharpandey89/k-means