马氏距离分量Wis的计算

2024-09-30 09:26:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我有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组件的距离?你知道吗

或者,计算马氏距离最快的方法是什么?你知道吗


Tags: 数据函数in距离for度量过程np
1条回答
网友
1楼 · 发布于 2024-09-30 09:26:07

首先,为了更容易理解,这是马氏距离公式:

Mahalanobis

因此,要根据每个元素的类别计算其马氏距离,我们可以:

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语句来计算所有距离。例如,类0

[mahalanobis(i,0) for i in range(0,len(X_train[np.where(y_train==0)[0]]))]

相关问题 更多 >

    热门问题