我正在实现一个k-均值聚类算法。到目前为止,它使用欧几里德距离。将欧几里德距离转换为马氏距离无法正确聚类。你知道吗
出于某种原因,马氏距离有时是负数。结果发现协方差矩阵的特征值为负,这显然不利于协方差矩阵。你知道吗
以下是我正在使用的函数:
#takes in data point x, centroid m, covariance matrix sigma
def mahalanobis(x, m, sigma):
return np.dot(np.dot(np.transpose(x - m), np.linalg.inv(sigma)), x - m)
#takes in centroid m and data (iris in 2d, dimensions: 2x150)
def covar_matrix(m, data):
d, n = data.shape
R = np.zeros((d,d))
for i in range(n):
R += np.dot(data[:,i:i+1] , np.transpose(data[:,i:i+1]))
R /= n
return R - np.dot(m, np.transpose(m))
#autocorrelation_matrix - centroid*centroid'
我是如何实现算法的:
设置k
随机选择k个质心
计算每个质心的坐标矩阵(
计算每个数据点到每个质心的mahalanobis(),并添加到最近的簇中
*用此点计算covar_矩阵()
我期望一个正马氏距离和一个正定协方差矩阵(我希望后者能修正前者)。你知道吗
目前没有回答
相关问题 更多 >
编程相关推荐