【问题标题】:Custom distance (histogram intersection) function in Matlab knnclassifyMatlab knnclassify中的自定义距离(直方图交点)函数
【发布时间】:2014-06-08 08:05:27
【问题描述】:

是否可以在 Matlab 的“knnclassify”函数中实现自定义距离测量? 特别是,我有兴趣根据两个向量之间的距离对示例进行分类,使其等于直方图交集(向量被认为是直方图)。对于两个 N 维向量 w1 和 w2,距离为:

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

【问题讨论】:

  • 有一个类knnclassify。您是否想知道如何使用该类来解决您的问题,您是否想创建自己的类/函数或多或少具有相同的效果,或者您要的是什么?
  • 我想在 knnclassify 函数中使用不同的距离度量。我希望编辑后的帖子更清晰。
  • @cerebrou:我已经编辑了我的答案。这应该会有所帮助

标签: matlab


【解决方案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 的原始源代码了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-02-14
    • 1970-01-01
    • 2014-12-08
    • 1970-01-01
    • 1970-01-01
    • 2020-02-25
    • 2016-08-31
    • 1970-01-01
    相关资源
    最近更新 更多