rangesearch

使用搜索器对象找到指定距离内的所有邻居

描述

例子

Idx= rangesearch (MdlYr在中搜索所有邻居(即点、行或观察值)Mdl。X半径内r查询数据中每个点(即行或观察)的Y使用穷举搜索或Kd-tree。rangesearch返回Idx,它是一个列向量的指标Mdl。Xr单位。

例子

Idx= rangesearch (MdlYr名称,值返回观测值的索引Mdl。X半径内r每一个观察的结果Y附加选项由一个或多个指定名称,值对参数。例如,您可以指定使用与存储中的不同的距离度量Mdl。D是tance或者与存储的距离度量参数不同Mdl。D是tParameter

例子

IdxD) = rangesearch (___另外返回矩阵D使用前面语法中的任何输入参数。D包含观测值之间的距离Mdl。X半径内r每一个观察的结果Y.默认情况下,函数排列的列D在距离度量中,根据距离的远近,按升序排列。

例子

全部折叠

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

载入费雪的虹膜数据集。从数据中随机保留5个观察值作为查询数据。关注花瓣的尺寸。

负载fisheririsrng (1);%的再现性1) n =大小(量;idx = randsample (n, 5);X =量(~ ismember (1: n, idx) 3:4);%的训练数据Y =量(idx 3:4);%查询数据

增加一个默认的二维空间Kd-tree。

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

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

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

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

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

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

在训练数据中搜索与每个0.5 cm半径内的查询观测相对应的最近邻指数。执行这两种类型的搜索并使用默认设置。

r = 0.15;%的搜索半径IdxKDT = rangesearch (MdlKDT, Y, r);idx = rangesearch (mdl, Y, r);[IdxKDT idx]
ans =5×2单元阵列{1x27 double} {1x27 double} {[13]} {[13]} {1x27 double} {1x27 double} {1x2 double} {1x0 double} {1x0 double}

IdxKDTidx向量的单元格数组是否对应于的指标X距离观测值0.15厘米以内Y.索引矩阵的每一行都对应一个查询观察。

比较两种方法的结果。

cellfun (@isequal IdxKDT idx)
ans =5 x1逻辑阵列1 1 1 1

在这种情况下,结果是一样的。

画出鸢尾的结果。

setosaIdx = strcmp(物种(~ ismember (1: n, idx)),“setosa”);XSetosa = X (setosaIdx:);ySetosaIdx = strcmp(物种(idx),“setosa”);YSetosa = Y (ySetosaIdx:);图;情节(XSetosa (: 1) XSetosa (:, 2),“同意”);持有;情节(YSetosa (: 1) YSetosa (:, 2),“* r”);j = 1:sum(ysetosadx) c = YSetosa(j,:);= @(x1,x2)r^2 - (x1 - c(1))²- (x2 - c(2))²;fimplicit (circleFun [c (1) + (1) * r c (2) + (1) * r],“b -”结束包含“花瓣长度(厘米)”;ylabel“花瓣宽度(cm)”;标题“Setosa花瓣测量”;传奇(“观察”查询数据的“搜索半径”);轴平等的持有

载入费雪的虹膜数据集。

负载fisheriris

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

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

准备一个默认的穷举最近邻搜索器。

Mdl = ExhaustiveSearcher (X)
参数:[]X: [145x4 double]

Mdl是一个ExhaustiveSearcher模型。

找到训练数据的指标(X),与查询数据中每个点的距离在0.15厘米以内(Y).指定距离是关于马氏度规的。

r = 1;Idx = rangesearch (Mdl, Y, r,“距离”“mahalanobis”
Idx =5×1单元阵列{1x15 double} {1x5 double} {1x6 double} {[84]} {[69]}
Idx {3}
ans =1×61 34 33 22 24

每个单元的Idx对应一个查询数据观察,包含在X距离查询数据0.15cm范围内的邻居索引向量。rangesearch按距离升序排列指标。例如,使用马氏距离,第二近邻Y (3:): X (34)

载入费雪的虹膜数据集。

负载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),距离查询数据中每个点0.5厘米以内(Y).

r = 0.5;[Idx D] = rangesearch (Mdl, Y, r);

IdxD是由五个元素组成的向量单元数组。向量的值Idx指数是X.的X指数表示距离查询数据0.5厘米以内的观察值,YD包含与观测值对应的距离。

显示查询观察的结果3。

Idx {3}
ans =1×2127 122
D {3}
ans =1×20.2646 - 0.4359

最近的观察Y (3:)X(127年:),这是0.2646厘米了。紧随其后的是X(122年:),这是0.4359厘米了。所有其他的观测值都大于0.5厘米的距离: Y(5日)

输入参数

全部折叠

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

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

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

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

数据类型:|

围绕查询数据中每个点的搜索半径,指定为非负标量。

rangesearch找到所有的观测值Mdl.X在距离内r每一个观察的结果Y.房地产Mdl。D是tance商店的距离。

数据类型:|

名称-值对的观点

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

例子:“距离”、“闵可夫斯基”,“P”3中的所有观察值Mdl。X在距离r每一个观察的结果Y,使用带指数的闵可夫斯基距离度量3.

对于两个最近邻搜索器

全部折叠

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

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

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

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

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

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

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

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

例子:“P”3

数据类型:|

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

为了更快的性能Y包含许多有许多最近点的观测值,您可以设置SortIndices.在这种情况下,rangesearch返回最近点的索引,没有特定的顺序。当SortIndices真正的,函数将最近点的指数按距离升序排列。

例子:“SortIndices”,假的

数据类型:逻辑

穷举最近邻搜索器

全部折叠

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

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

数据类型:|

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

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

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

数据类型:|

请注意

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

输出参数

全部折叠

最近邻的训练数据索引,返回为数字向量的单元数组。

Idx是一个——- - - - - -1单元格数组这样的单元格jIdx {j})包含一个j-观测指数的维向量Mdl。Xr单位到查询观测Y (j,:).如果SortIndices真正的,然后rangesearch将向量的元素按距离升序排列。

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

D是一个——- - - - - -1单元格数组这样的单元格jD {j})包含一个j-观测距离的维向量Mdl。X是从查询观察到的吗Y (j,:).向量的所有元素都小于r.如果SortIndices真正的,然后rangesearch将向量的元素按升序排列。

提示

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

选择功能

rangesearch对象函数是否需要ExhaustiveSearcher或者一个KDTreeSearcher模型对象、查询数据和距离。在同等条件下,rangesearch返回相同的结果rangesearch当您指定名称-值对参数时“NSMethod”、“详尽”“NSMethod”、“kdtree”,分别。

扩展功能

介绍了R2011b