def compute_cmus_scov(self, data, labels):
""" Compute class means and shared covariance
(weighted within-class covariance) """
self.label_map, class_sizes = np.unique(labels, return_counts=True)
dim = data.shape[1]
cmus = np.zeros(shape=(len(class_sizes), dim))
acc = np.zeros(shape=(dim, dim))
scov = np.zeros_like(acc)
gl_mu = np.mean(data, axis=0).reshape(-1, 1)
gl_cov = np.cov(data.T, bias=True)
for i, k in enumerate(self.label_map):
data_k = data[np.where(labels == k)[0], :]
mu_k = np.mean(data_k, axis=0).reshape(-1, 1)
cmus[i, :] = mu_k[:, 0]
acc += (gl_mu - mu_k).dot((gl_mu - mu_k).T) * data_k.shape[0]
acc /= data.shape[0]
scov = gl_cov - acc
return cmus, scov, class_sizes
评论列表
文章目录