如何根据度量计算两个向量之间的距离?
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)
我想知道如何为这些度量定义距离函数?
编辑:目的是根据经验获得值开始下降的点,但数字并未显示这一点...
您将两个列向量传递给 pdist2
,因此我们可以将上述等式实现为接受向量输入的匿名函数...
fCanberraDist = @(p,q) sum( abs(p - q) ./ ( abs(p) + abs(q) ) );
现在您有了函数句柄,您可以使用以下内容:
% ... previous code
d = pdist2( a(:,i), a(:,j), fCanberraDist );
% ... further code
请注意,您目前没有对结果执行任何操作,我假设这只是为了示例代码。
您可以用类似的方式定义任何其他自定义距离度量,作为匿名函数或完全独立的函数(在其自己的 .m 文件中或在本地定义)。
我想计算矩阵中除自身以外的每一列与其他列之间的平均距离。
我写了这段代码:
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)
我想知道如何为这些度量定义距离函数?
编辑:目的是根据经验获得值开始下降的点,但数字并未显示这一点...
您将两个列向量传递给 pdist2
,因此我们可以将上述等式实现为接受向量输入的匿名函数...
fCanberraDist = @(p,q) sum( abs(p - q) ./ ( abs(p) + abs(q) ) );
现在您有了函数句柄,您可以使用以下内容:
% ... previous code
d = pdist2( a(:,i), a(:,j), fCanberraDist );
% ... further code
请注意,您目前没有对结果执行任何操作,我假设这只是为了示例代码。
您可以用类似的方式定义任何其他自定义距离度量,作为匿名函数或完全独立的函数(在其自己的 .m 文件中或在本地定义)。