def _rss(self, data):
""" Residual Sum of Square distances of all data points from their cluster centers """
if self.metric == 'euclidean':
distances = cdist(data, self.cluster_centers_, metric='euclidean')
elif self.metric == 'mahalanobis':
#covar_matrix = self.covariance(labels=self.labels_, cluster_centers=self.cluster_centers_, data=data)
covar_matrices = self.covariances(self.labels_,
cluster_centers=self.cluster_centers_, data=data)[0]
self._inv_covar_matrices = self._matrix_inverses(covar_matrices)
distances = cdist(data, self.cluster_centers_, metric='mahalanobis', VI=self._inv_covar_matrices)
distances = distances.min(axis=1)
distances = distances ** 2
assert distances.shape[0] == data.shape[0]
return distances.sum()
评论列表
文章目录