主要内容

knnsearch

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

描述

例子

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);%的再现性1) n =大小(量;idx = randsample (n, 5);X =量(~ ismember (1: n, idx):);%的训练数据: Y =量(idx);%查询数据

的变量包含4个预测因子。

发展一个默认的四维空间Kd-tree。

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

MdlKDT是一个KDTreeSearcher模型对象。你可以使用点符号来改变它的可写属性。

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

mdl = ExhaustiveSearcher (X)
MdlES = extivesearcher with properties: Distance: 'euclidean' DistParameter: [] X: [145x4 double]

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

或者,你可以种植一个K用D-tree或准备一个穷举的最近邻搜索器createns

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

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

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

种植Kd-树最近邻搜索对象createns函数。将对象和查询数据传递给knnsearch函数来找到k最近的邻居。

载入费雪的虹膜数据集。

负载fisheriris

从预测器数据中随机移除五个虹膜以用作查询集。

rng (1);%的再现性1) n =大小(量;%样本大小qIdx = randsample (n, 5);%查询数据索引tIdx = ~ ismember (1: n, qIdx);%训练数据指标Q =量(qIdx:);X =量(tIdx:);

增加一个四维KD-tree使用训练数据。指定Minkowski距离以查找最近的邻居。

Mdl = createns (X,“距离”闵可夫斯基的
Mdl = KDTreeSearcher with properties: BucketSize: 50 Distance: '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

从预测器数据中随机移除五个虹膜以用作查询集。

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

增加一个四维KD-tree使用训练数据。指定Minkowski距离以查找最近的邻居。

Mdl = KDTreeSearcher (X);

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

找到训练数据的指标(X),即查询数据中每个点最近的7个邻居(Y)。

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

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

显示中向量的长度Idx

cellfun (“长度”Idx)
ans =5×18 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

培训的观察88950.3873厘米距离查询观察1

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

载入费雪的虹膜数据集。把花瓣的大小作为预测因素。

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

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

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

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

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

IdxMkIdxCb1 × 10矩阵是否包含行索引X的最近的邻居newpoint分别使用闵可夫斯基距离和切比切夫距离。元素(1,1)是最近的,元素(1,2)是下一个最近的,以此类推。

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

图;gscatter (X (: 1) X (:, 2), Y);标题(Fisher' s Iris数据——最近邻);包含(“花瓣长度(厘米)”);ylabel (“花瓣宽度(cm)”);持有情节(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 =;获取当前轴句柄。h.XLim = [4.5 5.5];h.YLim = [1 2];轴广场

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

输入参数

全部折叠

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

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

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

Y是一个——- - - - - -K矩阵。行Y对应观察(例如,例子),列对应预测(例如,变量或特征)。Y必须具有与存储在Mdl。X

数据类型:|

名称-值对的观点

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

例子:“K”2“距离”,“闵可夫斯基”指定查找的两个最近的邻居Mdl。X每个点Y使用闵可夫斯基距离度量。
对于两个最近邻搜索器

全部折叠

距离度量用来寻找训练数据到查询观测值的邻居,指定为逗号分隔对组成“距离”以及字符向量、字符串标量或函数句柄。

对于这两种最近邻搜索器,knnsearch金宝app支持这些距离度量。

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

如果Mdl是一个ExhaustiveSearcher模型对象,然后knnsearch也支持这些金宝app距离度量。

价值 描述
“相关” 一减去观察值之间的样本线性相关性(作为值的序列处理)。
的余弦 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,在那里为正整数。

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

有关详细信息,请参见距离度量

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

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

如果IncludeTies真正的,那么:

  • knnsearch包括所有距离等于的最近邻k输出参数中最小的距离k搜索的最近邻的数目是否由“K”名称-值对的论点。

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

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

例子:“IncludeTies”,真的

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

例子:“K”2

数据类型:|

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

例子:“P”3

数据类型:|

Kd-Tree最近邻搜索器

全部折叠

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

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

  • Y包含了许多有许多近邻的观测结果X

  • Mdl是一个KDTreeSearcher模型对象。

  • IncludeTies

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

SortIndices真正的默认情况下。当Mdl是一个ExhaustiveSearcher模型对象或IncludeTies真正的,该函数总是对索引进行排序。

例子:“SortIndices”,假的

数据类型:逻辑

穷举最近邻搜索器

全部折叠

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

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

数据类型:|

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

该软件使用相应的元素来衡量训练数据和查询数据之间的每个差异规模.如果您指定规模不要指定距离”、“seuclidean”,然后knnsearch返回错误消息。

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

数据类型:|

请注意

如果您指定距离P,或规模,然后Mdl。D是tanceMdl。D是tParameter不要改变值。

输出参数

全部折叠

最近邻的训练数据索引,以数字矩阵或数字向量单元数组的形式返回。

  • 如果没有指定IncludeTies默认情况下),那么Idx是一个——- - - - - -k数字矩阵,行数是多少Yk搜索的最近邻的数目是否由“K”名称-值对的论点。Idx (j,我)表明Mdl.X (Idx (j,我):)是其中之一k最近的观察Mdl。X到查询观察Y (j,:)

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

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

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

  • 如果没有指定IncludeTies默认情况下),那么D是一个——- - - - - -k数字矩阵,行数是多少Yk搜索的最近邻的数目是否由“K”名称-值对的论点。D (j,我)是距离Mdl.X (Idx (j,我):)以及查询观察Y (j,:)关于距离度量。

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

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

提示

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

选择功能

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

  • k-最近邻分类,见fitcknnClassificationKNN

参考文献

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

扩展功能

介绍了R2010a