Я решил, что sklearn kmeans использует воображаемые точки в качестве центроидов кластера.
Пока я не нашел возможности использовать реальные точки данных в качестве центроидов в sklearn.
В настоящее время я вычисляю точку данных, ближайшую к центроиду, но подумал, что может быть более простой способ.
Кстати, я не обязательно ограничиваюсь kmeans.
Поиск в Google по кластеризации с реальными центроидами данных также не дал результатов.
У кого-нибудь была такая же проблема раньше?
import numpy as np
from sklearn.cluster import KMeans
import math
def distance(a, b):
dist = math.sqrt((a[0] - b[0])**2 + (a[1] - b[1])**2)
return dist
x = np.random.rand(10)
y = np.random.rand(10)
xy = np.array((x,y)).T
kmeans = KMeans(n_clusters=2)
kmeans.fit(xy)
centroids = kmeans.cluster_centers_
print(np.where(xy == centroids[0])[0])
for c in centroids:
nearest = min(xy, key=lambda x: distance(x, c))
print('centroid', c)
print('nearest data point to centroid', nearest)