在MATLAB中计算给定实例向量的KNN时,如何对维度进行加权?

在MATLAB中计算给定实例向量的KNN时,如何对维度进行加权?,matlab,distance,knn,Matlab,Distance,Knn,假设我有一堆实例,我想找到与特定实例最近的K实例。此外,在计算距离时,我有一些权重来显示每个维度的强度。如何将这些权重与MATLAB中的KNN查找过程结合起来?有两种方法可以让您做到这一点。查看knnsearch文档,您可以使用seuclidean标志执行标准化欧几里德距离。通过除以S中的相应比例值来缩放两点之间的每个坐标差S是每个坐标的标准偏差。通过指定Scale参数,然后指定每个组件将为您缩放每个维度的向量,而不是每个维度中的标准偏差,可以手动指定这些比例 因此,坐标的贡献越大,标度应越大,

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

有两种方法可以让您做到这一点。查看
knnsearch
文档,您可以使用
seuclidean
标志执行标准化欧几里德距离。通过除以
S
中的相应比例值来缩放两点之间的每个坐标差<默认情况下,code>S是每个坐标的标准偏差。通过指定
Scale
参数,然后指定每个组件将为您缩放每个维度的向量,而不是每个维度中的标准偏差,可以手动指定这些比例

因此,坐标的贡献越大,标度应越大,因为您希望聚合坐标,并允许较大的距离具有较小的欧氏距离。这与衡量每个维度的优势基本相同

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

退房: