Я использую следующий фрагмент кода Python для своих данных (матрица 1500x2) и пытаюсь реализовать алгоритм KMeans с нуля: -
def closestCentroids(arr, centroids):
idx = np.zeros(arr.shape[0]);
for i in range(0, arr.shape[0]):
idx[i] = 0
for j in range(0, centroids.shape[0]):
if(np.linalg.norm(arr[i]-centroids[j]) < np.linalg.norm(arr[i]-centroids[idx[i]])):
idx[i] = j
return idx
def computeCentroids(arr, idx, k = 3):
centroids = np.zeros((k, arr.shape[1]))
for i in range(0, k):
idx_k = (idx==i).sum()
centroids[i] = (arr[np.where(idx == i)].sum(axis=0))/idx_k
return centroids
def kMeans(arr, k = 3):
centroids = arr[np.random.randint(arr.shape[0], size = k), :]
idx = np.zeros(arr.shape[0])
for i in range(0, 50):
idx = closestCentroids(arr, centroids)
centroids = computeCentroids(arr, idx, k=3)
return centroids
Ошибка возникает в строке if(np.linalg.norm(arr[i]-centroids[j]) < np.linalg.norm(arr[i]-centroids[idx[i]])):
, когда ясравнивая евкдову дистанцию точек.Я не знаю, где я иду не так.