如何根据度量计算两个向量之间的距离?

How to compute distance between two vectors based on measures?

我想计算矩阵中除自身以外的每一列与其他列之间的平均距离。

我写了这段代码:

For i=1:m
  For j=1:m-1
    If(i==j)
      d=0;
    Else
      d=pdist2(a(:,i),a(:,j),'jaccard');
      s=sum(d)/(m-1);
    End
  End
End

矩阵为nxm。

我知道 pdist2 函数支持一些距离度量,例如 jaccard、cosine、hamming、euclidean....

但是如果我想计算堪培拉或克拉克距离度量或类似的度量,我应该这样在 pdist2 中定义一个函数:

D=pdist2(x,y,@distfun) 

我想知道如何为这些度量定义距离函数?


编辑:目的是根据经验获得值开始下降的点,但数字并未显示这一点...

Canberra Distance定义为

您将两个列向量传递给 pdist2,因此我们可以将上述等式实现为接受向量输入的匿名函数...

fCanberraDist = @(p,q) sum( abs(p - q) ./ ( abs(p) + abs(q) ) );

现在您有了函数句柄,您可以使用以下内容:

% ... previous code
d = pdist2( a(:,i), a(:,j), fCanberraDist );
% ... further code

请注意,您目前没有对结果执行任何操作,我假设这只是为了示例代码。

您可以用类似的方式定义任何其他自定义距离度量,作为匿名函数或完全独立的函数(在其自己的 .m 文件中或在本地定义)。