def _inertia(self, data):
""" Sum of distances of all data points from their cluster centers """
distances = np.zeros((data.shape[0], self.n_clusters))
covar_matrices = self.covariances(self.labels_, cluster_centers=self.cluster_centers_, data=data)
self._inv_covar_matrices = self._matrix_inverses(covar_matrices)
for k in range(self.n_clusters):
k_dist = cdist(data, np.array([self.cluster_centers_[k]]), metric=self.metric,
VI=self._inv_covar_matrices[k])
k_dist = k_dist.reshape((data.shape[0],))
distances[:, k] = k_dist
distances = distances.min(axis=1)
assert distances.shape[0] == data.shape[0]
return distances.sum()
评论列表
文章目录