文档

knnsearch

找到k-最近的邻居使用对象

语法

Idx = knnsearch(Mdl,Y)
Idx = knnsearch(Mdl,Y,名称,值)
[Idx,D] = knnsearch(___

描述

例子

Idx= knnsearch (MdlY中搜索最近的邻居(即最近的点、行或观测值)Mdl。X到查询数据中的每个点(即行或观测值)Y使用详尽的搜索或Kd-tree。knnsearch返回Idx中的指标的列向量Mdl。X代表最近的邻居。

例子

Idx= knnsearch (MdlY名称,值返回中最接近的点的索引Mdl。XY带有一个或多个指定的附加选项名称,值对参数。例如,指定要搜索的最近邻居的数量,与存储的距离度量不同Mdl。D是tance.如果最近的距离是固定的,您还可以指定要采取的操作。

例子

IdxD= knnsearch(___另外返回矩阵D使用前面语法中的任何输入参数。D包含每个观测之间的距离Y这与最接近的观测结果相吻合Mdl。X.的列D根据距离的远近,按升序排列。

例子

全部折叠

knnsearch接受ExhaustiveSearcherKDTreeSearcher建模对象以搜索训练数据,寻找与查询数据最近的邻居。一个ExhaustiveSearcher模型调用穷举搜索器算法,并且KDTreeSearcher模型定义了Kd-tree,knnsearch用于搜索最近的邻居。

加载费雪的虹膜数据集。从数据中随机保留5个观测值作为查询数据。

负载fisheririsrng (1);%用于再现性N = size(meas,1);Idx = randsample(n,5);X = meas(~ismember(1:n,idx),:);培训数据Y = meas(idx,:);%查询数据

的变量包含4个预测器。

生长一个默认的四维空间Kd-tree。

MdlKDT = KDTreeSearcher(X)
MdlKDT = KDTreeSearcher with properties: BucketSize: 50 Distance: 'euclidean' DistParameter: [] X: [145x4 double]

MdlKDT是一个KDTreeSearcher模型对象。您可以使用点表示法更改其可写属性。

准备一个详尽的最近邻搜索器。

MdlES =枯竭搜索器(X)
MdlES =筋疲力尽的搜索器属性:距离:'欧几里得' DistParameter: [] X: [145x4 double]

MdlKDT是一个ExhaustiveSearcher模型对象。它包含用于查找最近邻居的选项,如距离度量。

或者,你也可以种一种KD-tree或准备穷尽最近邻搜索器使用createns

在训练数据中搜索与每个查询观察相对应的最近邻居指数。使用默认设置执行两种类型的搜索。缺省情况下,每个查询观察要搜索的邻居数为1

IdxKDT = knnsearch(MdlKDT,Y);IdxES = knnsearch(MdlES,Y);[IdxKDT idx]
ans =5×217 17 6 6 1 1 89 89 124 124

在本例中,搜索结果是相同的。

种植K对象的d-树最近邻搜索器对象createns函数。对象传递对象和查询数据给knnsearch函数查找k最近的邻居。

加载费雪的虹膜数据集。

负载fisheriris

从预测器数据中随机移除5个虹膜作为查询集。

rng (1);%用于再现性N = size(meas,1);%样本量qIdx = randsample(n,5);%查询数据的索引tIdx = ~ismember(1:n,qIdx);%培训数据指标Q = meas(qIdx,:);X = meas(tIdx,:);

培育一个四维空间Kd-树使用训练数据。指定寻找最近邻居的闵可夫斯基距离。

Mdl = createns(X,“距离”闵可夫斯基的
Mdl = KDTreeSearcher与属性:BucketSize: 50距离:'minkowski' DistParameter: 2 X: [145x4 double]

因为X有四列,距离度量是闵可夫斯基,createns创建一个KDTreeSearcher默认为模型对象。闵可夫斯基距离指数为2默认情况下。

找到训练数据的索引(Mdl。X),它们是查询数据中每个点的两个最近邻居().

IdxNN = knnsearch(Mdl,Q,“K”,2)
IdxNN =5×217 4 6 2 1 12 89 66 124 100

每行IdxNN对应于一个查询数据观察,列的顺序对应于最近的邻居的顺序,相对于上升的距离。例如,基于闵可夫斯基距离,的次近邻问(3:): X(12日)

加载费雪的虹膜数据集。

负载fisheriris

从预测器数据中随机移除5个虹膜作为查询集。

rng (4);%用于再现性N = size(meas,1);%样本量qIdx = randsample(n,5);%查询数据的索引X = meas(~ismember(1:n,qIdx),:);Y = meas(qIdx,:);

培育一个四维空间Kd-树使用训练数据。指定寻找最近邻居的闵可夫斯基距离。

Mdl = KDTreeSearcher(X);

Mdl是一个KDTreeSearcher模型对象。默认情况下,寻找最近邻居的距离度量是欧几里得度量。

找到训练数据的索引(X),它们是查询数据中每个点的七个最近邻居(Y).

[Idx D] = knnsearch (Mdl Y“K”7“IncludeTies”,真正的);

Idx而且D是由向量组成的五元单元数组,每个向量至少有七个元素。

中显示向量的长度Idx

cellfun (“长度”Idx)
ans =5×18 7 7 7 7 7

因为细胞1包含长度大于的向量k= 7,查询观察1 (Y (1:))同样接近于中至少两个观测值X

显示最近邻居的索引Y (1:)以及它们的距离。

nn5 = Idx{1}
nn5 =1×891 98 67 69 71 93 88 95
nn5d = D{1}
nn5d =1×80.1414 0.2646 0.2828 0.3000 0.3464 0.3742 0.3873 0.3873

培训的观察88而且95是否距离查询观测值0.3873 cm1

火车两KDTreeSearcher模型使用不同的距离度量,并进行比较k-两个模型查询数据的最近邻。

加载费雪的虹膜数据集。将花瓣的测量作为预测指标。

负载fisheririsX = meas(:,3:4);%预测Y =物种;%响应

训练KDTreeSearcher使用预测器对对象进行建模。用指数5指定闵可夫斯基距离。

KDTreeMdl = KDTreeSearcher(X,“距离”闵可夫斯基的“P”5)
KDTreeMdl = KDTreeSearcher与属性:BucketSize: 50距离:'minkowski' DistParameter: 5 X: [150x2 double]

找到10个最近的邻居X到查询点(newpoint),首先使用Minkowski然后Chebychev距离度量。查询点必须具有与用于训练模型的数据相同的列维。

Newpoint = [5 1.45];[IdxMk,DMk] = knnsearch(KDTreeMdl,newpoint,“k”10);[IdxCb,DCb] = knnsearch(KDTreeMdl,newpoint,“k”10“距离”“chebychev”);

IdxMk而且IdxCb1 × 10矩阵是否包含的行下标X对应到最近的邻居newpoint分别使用Minkowski距离和Chebychev距离。元素(1,1)是最近的,元素(1,2)是下一个,依此类推。

绘制训练数据、查询点和最近邻居。

图;gscatter (X (: 1) X (:, 2), Y);标题(Fisher的虹膜数据——最近的邻居);包含(“花瓣长度(厘米)”);ylabel (“花瓣宽度(厘米)”);持有情节(newpoint (1) newpoint (2),“kx”“MarkerSize”10“线宽”2);%查询点情节(X (IdxMk, 1), X (IdxMk, 2),“o”“颜色”,(。5 .5 .5],“MarkerSize”10);最近的邻居情节(X (IdxCb, 1), X (IdxCb, 2),“p”“颜色”,(。5 .5 .5],“MarkerSize”10);契比契夫最近的邻居传奇(“setosa”“多色的”“virginica”“查询点”...闵可夫斯基的“chebychev”“位置”“最佳”);

放大感兴趣的点。

H = gca;获取当前轴句柄。h.XLim = [4.5 5.5];h.YLim = [1 2];轴广场

几个观察结果是相等的,这就是为什么在图中只确定了八个最近的邻居。

输入参数

全部折叠

最近邻搜索器,指定为ExhaustiveSearcherKDTreeSearcher分别为模型对象。

如果Mdl是一个ExhaustiveSearcher模型,然后knnsearch使用穷尽搜索搜索最近的邻居。否则,knnsearch使用生长的Kd-树搜索最近的邻居。

查询数据,指定为数字矩阵。

Y是一个——- - - - - -K矩阵。行Y对应于观察结果(即例子),列对应于预测因子(即变量或特征)。Y必须与存储在其中的训练数据具有相同数量的列Mdl。X

数据类型:|

名称-值对参数

的可选逗号分隔对名称,值参数。的名字参数名称和价值对应的值。的名字必须出现在单引号内(' ').您可以以任意顺序指定多个名称和值对参数Name1, Value1,…,的家

例子:“K”2“距离”,“闵可夫斯基”的两个最近邻居Mdl。X到每一点Y使用闵可夫斯基距离度量。

对于两个最近邻搜索器

全部折叠

距离度量用于查找训练数据到查询观察的邻居,指定为逗号分隔的对,由“距离”和字符向量、字符串标量或函数句柄。

对于这两种最近邻搜索器,knnsearch万博1manbetx支持这些距离度量。

价值 描述
“chebychev” 切比雪夫距离(最大坐标差)。
“cityblock” 城市街区距离。
“欧几里得” 欧氏距离。
闵可夫斯基的 闵可夫斯基距离。默认指数为2。要指定不同的指数,请使用“P”名称-值对参数。

如果Mdl是一个ExhaustiveSearcher建模对象,然后knnsearch也支持这些万博1manbetx距离度量。

价值 描述
“相关” 1减去观测值之间的样本线性相关(被视为值序列)。
的余弦 1减去观测值之间夹角的余弦(作为行向量处理)。
“汉明” 汉明距离,也就是不同坐标的百分比。
“jaccard” 1减去杰卡德系数,也就是非零坐标的百分比。
“mahalanobis” 马氏距离,用正定协方差矩阵计算。若要更改协方差矩阵的值,请使用“浸”名称-值对参数。
“seuclidean” 标准化欧氏距离。每一行之间的坐标差Mdl。X查询矩阵通过除以计算的标准偏差的相应元素来缩放Mdl。X.要指定另一种缩放,请使用“规模”名称-值对参数。
“枪兵” 1减去观测值之间的样本斯皮尔曼秩相关(被视为值序列)。

如果Mdl是一个ExhaustiveSearcher模型对象,然后还可以通过使用为自定义距离度量指定函数句柄@(例如,@distfun).自定义距离函数必须:

  • 有表格函数D2 = distfun(ZI,ZJ)

  • 作为参数:

    • 1 -K向量的单行Mdl。XY,在那里K列数是Mdl。X

    • 一个——- - - - - -K矩阵ZJ包含多行Mdl。XY,在那里为正整数。

  • 返回一个-by-1的距离向量D2,在那里D2 (j观测值之间的距离是多少而且ZJ (j:)

详情请参见距离度量

例子:“距离”,“闵可夫斯基”

标记,以包含距离查询观察值具有相同距离的最近邻居,指定为由逗号分隔的对组成“IncludeTies”而且0)或真正的1).

如果IncludeTies真正的,那么:

  • knnsearch包含距离等于的所有最近邻居k输出参数中的最小距离,其中k属性是否指定了搜索的最近邻数“K”名称-值对参数。

  • Idx而且D——- - - - - -1单元格数组,使每个单元格包含至少为的向量k分别是指数和距离。中的每个向量D包含按升序排列的距离。每一行Idx包含中这些最小距离对应的最近邻居的索引D

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

例子:“IncludeTies”,真的

每个查询观察中要在训练数据中搜索的最近邻居数,指定为逗号分隔的对,由“K”一个正整数。

例子:“K”2

数据类型:|

闵可夫斯基距离度量的指数,指定为逗号分隔的对,由“P”一个正标量。这个论点只有在以下情况下才成立“距离”闵可夫斯基的

例子:“P”3

数据类型:|

穷尽最近邻搜索器

全部折叠

马氏距离度量的协方差矩阵,指定为逗号分隔的对,由“浸”和一个正定矩阵。是一个K——- - - - - -K矩阵,K列数是Mdl。X.如果你指定不要详细说明距离”、“mahalanobis”,然后knnsearch返回一个错误消息。

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

数据类型:|

标准欧几里得距离度量的刻度参数值,指定为逗号分隔的对,由“规模”和一个非负数值向量。规模长度K,在那里K列数是Mdl。X

的相应元素,该软件在训练数据和查询数据之间缩放每个差异规模.如果你指定规模不要详细说明距离”、“seuclidean”,然后knnsearch返回一个错误消息。

例子:'Scale',分位数(mml . x,0.75) -分位数(mml . x,0.25)

数据类型:|

请注意

如果你指定距离P,或规模,然后Mdl。D是tance而且Mdl。D是tParameter不要改变值。

输出参数

全部折叠

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

  • 如果您没有指定IncludeTies默认情况下),然后Idx是一个——- - - - - -k数字矩阵,行数是多少Y而且k属性是否指定了搜索的最近邻数“K”名称-值对参数。Idx (j l)表明Mdl.X (Idx (j l):)观察与l到查询观测点的最小距离Y (j,:)

  • 如果你指定“IncludeTies”,真的,然后Idx是一个——- - - - - -1单元格数组这样的单元格jIdx {j})包含至少为的向量k中最接近观测值的指数Mdl。X到查询观察Y (j,:).该函数按距离的升序排列向量的元素。

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

  • 如果您没有指定IncludeTies默认情况下),然后D是一个——- - - - - -k数字矩阵,行数是多少Y而且k属性是否指定了搜索的最近邻数“K”名称-值对参数。j D(左)是距离Mdl.X (Idx (j l):)以及查询观察Y (j,:)对于距离度规,它表示l最小距离。

  • 如果你指定“IncludeTies”,真的,然后D是一个——- - - - - -1单元格数组这样的单元格jD {j})包含至少为的向量k中最近观测的距离Mdl。X到查询观察Y (j,:).该函数按距离的升序排列向量的元素。

提示

knnsearch找到了k(正整数)指向Mdl。X这是k-最近的每个Y点。相比之下,rangesearch找到所有向内的点Mdl。X都在距离之内r(正标量)Y点。

选择功能

  • knnsearch对象函数是否需要ExhaustiveSearcher或者一个KDTreeSearcher建模对象并查询数据。在等价条件下knnsearch对象函数返回与knnsearch函数在指定名称-值对参数时使用“NSMethod”、“详尽”“NSMethod”、“kdtree”,分别。

  • k-最近邻分类,见fitcknn而且ClassificationKNN

参考文献

[1]弗里德曼,J. H.,本特利,J.和芬克尔,R. A.(1977)。在对数期望时间内寻找最佳匹配的算法ACM数学软件汇刊第3卷,第3期,1977年9月,第209-226页。

扩展功能

在R2010a中引入

这个话题有用吗?