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