明智地计算马氏距离分量
Computing Mahalanobis Distance Component Wise
我有 60000 个 784 维的向量。这个数据有10个类。
我必须评估一个函数,该函数取出一维并再次计算距离度量。此函数正在计算每个向量与其 类' 平均值的距离。在代码中:
def objectiveFunc(self, X, y, indices):
subX = np.array([X[:,i] for i in indices]).T
d = np.zeros((10,1))
for n in range(10):
C = subX[np.where(y == n)]
u = np.mean(C, axis = 0)
Sinv = pinv(covariance(C))
d[n] = np.mean(np.apply_along_axis(mahalanobis, axis = 1, arr=C, v=u, VI=Sinv))
其中在每次迭代期间将索引送入并删除一个索引。
如您所想,我在计算马氏距离的过程中计算了很多单独的分量。有没有办法让我存储所有 784 个分量距离?
或者,计算马氏距离的最快方法是什么?
首先,为了更容易理解,这是马氏距离公式:
因此,要根据每个元素的 class 计算每个元素的马哈拉诺比斯距离,我们可以这样做:
X_train=X_train.reshape(-1,784)
def mahalanobis(element,classe):
part=np.where(y_train==classe)[0]
ave=np.mean(X_train[part])
distance_example=np.sqrt(((np.mean(X_train[part[[element]]])-ave)**2)/np.var(X_train[part]))
return distance_example
mahalanobis(20,2)
# Out[91]: 0.13947337027828757
然后你可以创建一个for
语句来计算所有的距离。例如,class 0
:
[mahalanobis(i,0) for i in range(0,len(X_train[np.where(y_train==0)[0]]))]
我有 60000 个 784 维的向量。这个数据有10个类。
我必须评估一个函数,该函数取出一维并再次计算距离度量。此函数正在计算每个向量与其 类' 平均值的距离。在代码中:
def objectiveFunc(self, X, y, indices):
subX = np.array([X[:,i] for i in indices]).T
d = np.zeros((10,1))
for n in range(10):
C = subX[np.where(y == n)]
u = np.mean(C, axis = 0)
Sinv = pinv(covariance(C))
d[n] = np.mean(np.apply_along_axis(mahalanobis, axis = 1, arr=C, v=u, VI=Sinv))
其中在每次迭代期间将索引送入并删除一个索引。
如您所想,我在计算马氏距离的过程中计算了很多单独的分量。有没有办法让我存储所有 784 个分量距离?
或者,计算马氏距离的最快方法是什么?
首先,为了更容易理解,这是马氏距离公式:
因此,要根据每个元素的 class 计算每个元素的马哈拉诺比斯距离,我们可以这样做:
X_train=X_train.reshape(-1,784)
def mahalanobis(element,classe):
part=np.where(y_train==classe)[0]
ave=np.mean(X_train[part])
distance_example=np.sqrt(((np.mean(X_train[part[[element]]])-ave)**2)/np.var(X_train[part]))
return distance_example
mahalanobis(20,2)
# Out[91]: 0.13947337027828757
然后你可以创建一个for
语句来计算所有的距离。例如,class 0
:
[mahalanobis(i,0) for i in range(0,len(X_train[np.where(y_train==0)[0]]))]