samedi 4 décembre 2021

K-means on Python

I have code of k-means algorithm, but i don't know how to make my claster centers move. I have task, in which i need to randomly generate the numbers and the centers. In the cycle begin to move the centers (recalculate their coordinates) and they will simultaneously shift a small distance relative to their previous ones positions. This is the condition for stopping the cycle. MY CODE:

import numpy as np
import matplotlib.pyplot as plt

DIM = 2    # размерность массива точек
N = 2000    # количество точек
num_cluster = 2    # количество кластеров
iterations = 100    # итерации

x = np.random.randn(N, DIM)     # заполняем массив точками
y = np.zeros(N)     # обнуляем точки по y

for t in range(iterations):
    if t == 0:  # цикл центров
        index = np.random.choice(range(N), num_cluster, replace=False)  # выбираем центры кластеров
        mean = x[index]
    else:
        for k in range(num_cluster):
            mean[k] = np.mean(x[y == k], axis=0)  # подходят ли точки к кластеру
    for i in range(N):  # цикл приближения точек к цетру
        dist = np.sum((mean - x[i])**2, axis=1)     # расстояние от точек к центру
        pred = np.argmin(dist)      # выбираем найменшую дистанцию
        y[i] = pred     # выбираем точку с найменшей дистанцией

for k in range(num_cluster):    # цикл вывода кластера
    fig = plt.scatter(x[y == k, 0], x[y == k, 1])
    plt.scatter(x[index][0], x[index][1], c='r', marker="^")    # помечаем центры кластеров
plt.show()



Aucun commentaire:

Enregistrer un commentaire