主要内容

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之间的X而且Y找到最近邻居的索引。

Idx = knnsearch (X, Y);

找到医院的病人X年龄和体重都接近Y

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

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

载入费雪的虹膜数据集。

负载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绘制查询点。用圆圈表示闵可夫斯基最近邻。用五角形表示Chebychev最近的邻居。

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

图中包含一个axes对象。axis对象包含6个类型为line的对象。这些对象代表setosa, versicolor, virginica, query point, minkowski, chebychev。

输入参数

全部折叠

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

数据类型:|

查询点,指定为数值矩阵。行Y对应观察结果,列对应变量。Y列数必须与X

数据类型:|

名称-值参数

指定可选参数对为Name1 = Value1,…,以=家,在那里的名字参数名称和价值对应的值。名-值参数必须出现在其他参数之后,但对的顺序并不重要。

在R2021a之前,名称和值之间用逗号隔开,并括起来的名字在报价。

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

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

例子:“K”,10

数据类型:|

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

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

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

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

  • Idx而且D——- - - - - -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” 切比乔夫距离(最大坐标差)。
闵可夫斯基的 闵可夫斯基距离。缺省指数为2。要指定不同的指数,请使用“P”名称-值对的论点。
“mahalanobis” 马氏距离,用正定协方差矩阵计算。要更改协方差矩阵的值,请使用“浸”名称-值对的论点。
的余弦 1减去观测值之间夹角的余弦(作为向量处理)。
“相关” 1减去观察值之间的样本线性相关性(作为值序列处理)。
“枪兵” 1减去观察值之间的样本斯皮尔曼秩相关(作为值序列处理)。
“汉明” 汉明距离,也就是不同坐标的百分比。
“jaccard” 1减去雅卡德系数,也就是非零坐标的百分比。

还可以使用为自定义距离度量指定函数句柄@(例如,@distfun).自定义距离函数必须:

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

  • 以作为参数:

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

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

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

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

例子:“距离”、“chebychev”

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

这个论点只有在“距离”闵可夫斯基的

例子:“P”3

数据类型:|

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

这个论点只有在“距离”“mahalanobis”

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

数据类型:|

标度参数值的标准化欧氏距离度量,指定为逗号分隔的对,由“规模”和一个非负的数字向量。“规模”长度是否等于中的列数X.当knnsearch计算标准化欧氏距离,的每个坐标X的对应元素“规模”,每个查询点也是如此。这个论点只有在“距离”“seuclidean”

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

数据类型:|

的叶节点中的最大数据点数Kd-树,指定为逗号分隔的对,由“BucketSize”一个正整数。这个论点只有在NSMethod“kdtree”

例子:“BucketSize”,20

数据类型:|

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

为了更快的性能,您可以设置SortIndices当下列情况为真时:

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

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

例子:“SortIndices”,假的

数据类型:逻辑

输出参数

全部折叠

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

  • 如果不指定IncludeTies默认情况下),那么Idx是一个——- - - - - -k数字矩阵,行数在吗Y而且k是搜索的最近邻居的数量。Idx (j,我)表明X (Idx (j,我),:)是一种k最近的观察X到查询点Y (j,:)

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

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

到查询点的最近邻居的距离,作为数值矩阵或数值向量的单元格数组返回。

  • 如果不指定IncludeTies默认情况下),那么D是一个——- - - - - -k数字矩阵,行数在吗Y而且k是搜索的最近邻居的数量。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-tree算法),则搜索结果与使用knnsearch对象的功能。不像knnsearch函数,knnsearch对象函数需要ExhaustiveSearcher或者一个KDTreeSearcher模型对象。

参考文献

弗里德曼,J. H.本特利,R. A.芬克尔。在对数期望时间内寻找最佳匹配的算法。ACM数学软件汇刊3,没有。3(1977): 209 - 226。

扩展功能

版本历史

介绍了R2010a

Baidu
map