是否可以在Matlab中实现自定义距离测量" knnclassify"功能? 特别地,我感兴趣的是根据两个矢量之间的距离将例子分类为等于直方图交叉(矢量被认为是直方图)。对于两个N维向量w1和w2,距离为:
dist(w1, w2)=sum_i_to_N min(w1(i), w2(i))
答案 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的原始资源。