当我在MATLAB中计算给定实例向量的KNN时,我如何加权维度



假设我有一堆实例,我想找到离特定实例最近的K实例。此外,在计算距离时,我有一些权重来表示每个维度的强度。如何将这些权重与MATLAB中的KNN查找过程相结合?

有两种方法可以允许您这样做。查看knnsearch文档,您可以使用seuclidean标志执行标准化的欧几里得距离。两点之间的每个坐标差通过除以S中相应的刻度值进行缩放。S默认是每个坐标的标准偏差。您可以通过指定Scale参数手动指定这些尺度,然后指定一个矢量,其中每个组件将为您缩放每个维度,而不是每个维度的标准偏差。

因此,一个坐标的贡献越大,应该越大,因为您想要聚合坐标,并且允许较大的距离具有较小的欧几里得距离。这本质上与对每个维度的强度进行加权是一样的。

或者,您可以提供自己的函数来计算两个向量之间的距离。您可以事先在工作空间中定义这些权重,然后创建一个匿名函数包装器,在计算您想要的任何距离度量时访问这些权重。匿名函数只能取两个向量,对应于KNN中两个不同的坐标向量。因此,使用这个匿名函数来访问应该已经在工作区中定义的权重,然后从那里开始。

查看:http://www.mathworks.com/help/stats/knnsearch.html

最新更新