Matlab中的自定义距离(直方图交叉)函数knnclassify

时间:2014-06-08 08:05:28

标签: matlab

是否可以在Matlab中实现自定义距离测量" knnclassify"功能? 特别地,我感兴趣的是根据两个矢量之间的距离将例子分类为等于直方图交叉(矢量被认为是直方图)。对于两个N维向量w1和w2,距离为:

dist(w1, w2)=sum_i_to_N min(w1(i), w2(i))

1 个答案:

答案 0 :(得分:1)

通过检查knnclassify的来源,这取决于使用knnsearch。当您查看knnclassify来源时,将使用此功能的距离参数。通过查看knnsearch,您当然可以自己实现此功能。 knnsearch允许您指定自定义函数,只要它只能接收两个相同大小的向量。这些向量来自您应用knnclassify的数据集。因此,创建一个新功能,或者您可以使用以下任一方式匿名进行:

function [d] = histogramIntersection(w1, w2)
    d = sum(min([w1,w2],[],2));

...或者您可以匿名执行此操作:

f = @(w1,w2) sum(min([w1,w2],[],2));

但是,您要将其合并到knnclassify中需要做的是,您必须修改源并在switch语句中包含其他条件,以便您可以包括直方图交集作为选择。完成此操作后,您可以@f作为knnsearch调用的输入,或者在代码中腾出一些空间并定义上面的histogramIntersection方法,然后使用@histogramIntersection }作为knnclassify的输入。此输入应替换输入到knnclassify的字符串,该字符串指定您想要的距离度量类型。


tl;dr:您可以这样做,但如果您想这样做,则必须修改knnclassify来源。或者,您可以看到knnclassify正在做什么,然后只需拔出与您的情况相关的相关调用,并相应地放置自定义直方图交集方法,创建一个新文件并运行此文件。这样你就不需要搞乱MATLAB的原始资源。

相关问题