knnsearch

找到k-使用输入数据的最近邻

描述

例子

Idx= knnsearch (XY在中查找最近的邻居X对于每个查询点Y并返回最近邻的索引Idx,一个列向量。Idx行数和Y

Idx= knnsearch (XY名称,值返回Idx使用一个或多个名称-值对参数指定附加选项。例如,可以指定要搜索的最近邻居的数量和在搜索中使用的距离度量。

例子

IdxD) = knnsearch (___另外返回矩阵D,使用前面语法中的任何输入参数。D包含每个观测值之间的距离Y和相应的最近的观察X

例子

全部折叠

找到病人在医院与病人最相似的数据集Y,根据年龄和体重。

加载医院数据集。

负载医院;X =[医院。年龄hospital.Weight);Y = [20 162;30 169;40 168;50 170;60 171];%的新病人

执行一个knnsearch之间的XY查找最近邻的索引。

Idx = knnsearch (X, Y);

找到病人X年龄和体重最接近Y

X (Idx:)
ans =5×225 171 25 171 39 164 49 170 50 172

找到10个最近的邻居X每个点Y,首先使用闵可夫斯基距离度量,然后使用切比切夫距离度量。

加载Fisher的虹膜数据集。

负载fisheririsX =量(:,3:4);原始花的测量值Y = [5 1.45;6 2;2.75 .75];%新花卉数据

执行一个knnsearch之间的X以及查询点Y使用Minkowski和Chebychev距离度量。

(马里兰州mIdx) = knnsearch (X, Y,“K”10“距离”闵可夫斯基的“P”5);[cIdx, cD] = knnsearch (X, Y,“K”10“距离”“chebychev”);

可视化两个最近邻的搜索结果。绘制训练数据。用标记x绘制查询点。用圆圈表示Minkowski最近的邻居。用五角形来表示切比切夫最近的邻居。

gscatter (X (: 1) X(:, 2),物种)线(Y (: 1), Y (:, 2),“标记”“x”“颜色”“k”...“Markersize”10“线宽”2,“线型”“没有”)线(X (mIdx, 1), X (mIdx, 2),“颜色”,(。5。5。5),“标记”“哦”...“线型”“没有”“Markersize”10)线(X (cIdx, 1), X (cIdx, 2),“颜色”,(。5。5。5),“标记”“p”...“线型”“没有”“Markersize”10)传说(“setosa”“多色的”“维吉尼亚”“查询点”...闵可夫斯基的“chebychev”“位置”“最佳”

输入参数

全部折叠

输入数据,指定为数字矩阵。行X对应观察值,列对应变量。

数据类型:|

查询点,指定为数字矩阵。行Y对应观察值,列对应变量。Y必须具有与相同的列数X

数据类型:|

名称-值对的观点

指定可选的逗号分隔的对名称,值参数。的名字参数名和价值为对应值。的名字必须出现在引号内。可以以任意顺序指定多个名称和值对参数名称1,值1,…,名称,值

例子:knnsearch(X,Y,'K',10,'IncludeTies',true,'Distance','cityblock')搜索10个最近的邻居,包括领带和使用城市街区距离。

要在中查找的最近邻居数X对于每一点Y,指定为逗号分隔的对,由“K”一个正整数。

例子:“K”,10

数据类型:|

标志,以包含与查询点有相同距离的所有最近的邻居,指定为逗号分隔对,由“IncludeTies”0)或真正的1).

如果“IncludeTies”,然后knnsearch在与查询点距离相同的观测值中选择索引值最小的观测值。

如果“IncludeTies”真正的,那么:

  • knnsearch包括所有距离等于的最近邻k输出参数中最小的距离。指定k,可以使用“K”名称-值对的论点。

  • IdxD——- - - - - -1单元阵列,每个单元至少包含一个k分别是指数和距离。每一个向量D包含按升序排列的距离。在每一行Idx包含与中距离相对应的最近邻居的指标D

例子:“IncludeTies”,真的

最近邻搜索方法,指定为逗号分隔对组成“NSMethod”其中一个值。

  • “kdtree”-创建和使用Kd树来寻找最近的邻居。“kdtree”中的列数是默认值吗X小于等于10,X不是稀疏的,距离度量为“欧几里得”“cityblock”“chebychev”,或闵可夫斯基的.否则,默认值为“详尽”

    的值“kdtree”仅当距离度量是上面提到的四个度量之一时有效。

  • “详尽”—采用穷举搜索算法,计算到中所有点的距离值X每个点Y

例子:“NSMethod”、“详尽”

距离度量knnsearch使用,指定为逗号分隔的对,由“距离”和表中的一个值或函数句柄。

价值 描述
“欧几里得” 欧氏距离。
“seuclidean” 标准化的欧氏距离。每一行之间的坐标差X以及查询矩阵Y是通过除以相应元素的标准偏差计算得出的X.要指定另一个缩放,请使用“规模”名称-值对的论点。
“cityblock” 城市街区的距离。
“chebychev” 切比切夫距离(最大坐标差)。
闵可夫斯基的 Minkowski距离。默认指数为2。若要指定其他指数,请使用“P”名称-值对的论点。
“mahalanobis” 马氏距离,用正定协方差矩阵计算。要改变协方差矩阵的值,请使用“浸”名称-值对的论点。
的余弦 1减去观测值之间夹角的余弦值(作为向量处理)。
“相关性” 一减去观察值之间的样本线性相关性(作为值的序列处理)。
“枪兵” 1减去观察值之间的样本斯皮尔曼等级相关性(作为值的序列处理)。
“汉明” 汉明距离,是坐标差的百分比。
“jaccard” 1减去雅卡尔系数,雅卡尔系数是不同的非零坐标的百分比。

您还可以使用(例如,@distfun).自定义距离函数必须:

  • 的形式函数D2 = distfun(ZI,ZJ)

  • 以作为参数:

    • 1 -n向量包含来自的单行X或从查询点Y

    • 一个2——- - - - - -n矩阵ZJ包含多行XY

  • 返回一个2-距离的by-1向量D2,他的j元素是观测值之间的距离ZJ (j,:)

有关更多信息,请参见距离度量

例子:“距离”、“chebychev”

闵可夫斯基距离度量的指数,指定为逗号分隔对,由“P”一个正标量。

此参数仅当“距离”闵可夫斯基的

例子:“P”3

数据类型:|

马氏距离度量的协方差矩阵,指定为逗号分隔对,由“浸”一个正定矩阵。

此参数仅当“距离”“mahalanobis”

例子:“浸”,眼睛(4)

数据类型:|

尺度参数值为标准化的欧几里得距离度量,指定为逗号分隔对组成“规模”和一个非负的数值向量。“规模”长度等于列数吗X.当knnsearch计算标准的欧几里得距离,每个坐标X是按对应的元素缩放的吗“规模”,就像每个查询点一样。此参数仅在以下情况下有效“距离”“seuclidean”

例子:“规模”,分位数(0.75 X)——分位数(0.25 X))

数据类型:|

的叶节点中的最大数据点数KD-tree,指定为逗号分隔的对,由“BucketSize”一个正整数。此参数仅在以下情况下有效NSMethod“kdtree”

例子:“BucketSize”,20

数据类型:|

标志根据距离对返回的索引进行排序,指定为逗号分隔的对,由“SortIndices”,要么真正的1)或0).

要获得更快的性能,您可以设置SortIndices当下列情况成立时:

在这种情况下,knnsearch返回最近邻的索引,没有特定的顺序。当SortIndices真正的,函数按距离升序排列最近邻指标。

SortIndices真正的默认情况下。当NSMethod“详尽”IncludeTies真正的,该函数总是对索引进行排序。

例子:“SortIndices”,假的

数据类型:逻辑

输出参数

全部折叠

最近邻的输入数据索引,作为数字矩阵或数字向量的单元格数组返回。

  • 如果没有指定IncludeTies默认情况下),那么Idx是一个——- - - - - -k数字矩阵,行数是多少Yk为搜索的最近邻居数。Idx (j,我)表明X (Idx (j,我),:)是其中之一k最近的观察X到查询点Y (j,:)

  • 如果您指定“IncludeTies”,真的,然后Idx是一个——- - - - - -1单元格数组这样的单元格jIdx {j})包含一个至少为的向量k最近观测的指数X到查询点Y (j,:)

如果SortIndices真正的,然后knnsearch按距离升序排列指标。

查询点的最近邻居的距离,以数字矩阵或数字向量单元格数组的形式返回。

  • 如果没有指定IncludeTies默认情况下),那么D是一个——- - - - - -k数字矩阵,行数是多少Yk为搜索的最近邻居数。D (j,我)是距离X (Idx (j,我),:)Y (j,:)关于距离度量。

  • 如果您指定“IncludeTies”,真的,然后D是一个——- - - - - -1单元格数组这样的单元格jD {j})包含一个至少为的向量k最近观测的距离X到查询点Y (j,:)

如果SortIndices真正的,然后knnsearch按升序排列距离。

提示

  • 一个固定的正整数kknnsearch找到kX离每个点最近的Y.找到所有的要点X在每个点的固定距离内Y,使用rangesearch

  • knnsearch不保存搜索对象。要创建搜索对象,请使用createns

算法

有关特定搜索算法的信息,请参见k近邻搜索和半径搜索

选择功能

如果你设置knnsearch函数的“NSMethod”将名称-值对参数设置为适当的值(“详尽”对于穷举搜索算法或“kdtree”对于一个Kd-树算法),然后将搜索结果等价于使用knnsearch对象的功能。不像knnsearch函数,knnsearch对象函数需要ExhaustiveSearcher或者一个KDTreeSearcher模型对象。

工具书类

[1] Friedman, J. H., J. Bentely和R. A. Finkel。"在对数预期时间内找到最佳匹配的算法"数学软件学报3,没有。3(1977): 209 - 226。

扩展功能

介绍了R2010a