rangesearch
找到所有的邻居指定距离内使用搜索对象
描述
例子
寻找邻居半径内使用Kd-tree和详尽的搜索
rangesearch
接受ExhaustiveSearcher
或KDTreeSearcher
模型对象在训练数据搜索最近的邻居来查询数据。一个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属性:BucketSize: 50距离:“欧几里得”DistParameter: [] X: [145 x2双)
MdlKDT
是一个KDTreeSearcher
模型对象。你可以改变它的可写属性使用点符号。
准备一个详尽的最近邻搜索器。
mdl = ExhaustiveSearcher (X)
mdl = ExhaustiveSearcher属性:距离:“欧几里得”DistParameter: [] X: [145 x2双)
mdl
是一个ExhaustiveSearcher
模型对象。它包含的选项,比如距离度量,使用找到最近的邻居。
或者,你可以种植Kd-tree或准备一个详尽的最近邻搜索器使用createns
。
最近邻搜索训练数据指标,对应于每个查询半径0.5厘米内的观察。进行两种类型的搜索和使用默认设置。
r = 0.15;%的搜索半径IdxKDT = rangesearch (MdlKDT, Y, r);idx = rangesearch (mdl, Y, r);[IdxKDT idx]
ans =5×2单元阵列{1 x27双}{1 x27双}{[13]}{[13]}{1 x27双}{1 x27双}{1 x2双}{1 x2双}{1 x0双}{1 x0双}
IdxKDT
和idx
是细胞数组向量对应的指标吗X
内0.15厘米的观察Y
。指数矩阵的每一行对应一个查询的观察。
方法之间的比较结果。
cellfun (@isequal IdxKDT idx)
ans =5 x1逻辑阵列1 1 1 1 1
在这种情况下,结果都是一样的。
阴谋的结果setosa虹膜。
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 (ySetosaIdx) c = YSetosa (j:);circleFun = @ (x1, x2) r ^ 2 - (x1 - c (1))。^ 2 - (x2 - c (2)) ^ 2;fimplicit (circleFun [c (1) + (1) * r c (2) + (1) * r],“b -”)结束包含“花瓣长度(厘米)”;ylabel“花瓣宽度(cm)”;标题“Setosa花瓣测量”;传奇(“观察”,查询数据的,“搜索半径”);轴平等的持有从
搜索半径内邻居使用距离
加载费雪的虹膜数据集。
负载fisheriris
删除5虹膜随机预测的数据作为查询集。
rng (1);%的再现性1)n =大小(量;%样本大小qIdx = randsample (n, 5);%查询数据的指标X =量(~ ismember (1: n, qIdx):);:Y =量(qIdx);
准备一个默认的详尽的最近邻搜索者。
Mdl = ExhaustiveSearcher (X)
Mdl = ExhaustiveSearcher属性:距离:“欧几里得”DistParameter: [] X: (x4 145双)
Mdl
是一个ExhaustiveSearcher
模型。
找到训练数据的指标(X
)0.15厘米内的每个点查询数据(Y
)。指定距离的度量。
r = 1;Idx = rangesearch (Mdl, Y, r,“距离”,“mahalanobis”)
Idx =5×1单元阵列{1连接双}{1 x5双}{1 x6双}{[84]}{[69]}
Idx {3}
ans =1×61 34 33 22日24日2
每个单元的Idx
对应于一个查询数据观察和包含X
矢量指数的邻居在查询数据的0.15厘米。rangesearch
安排指数在距离升序排列。例如,使用Mahalanobis距离,第二个最近邻Y (3:)
是:X (34)
。
计算距离半径内的邻居
加载费雪的虹膜数据集。
负载fisheriris
删除5虹膜随机预测的数据作为查询集。
rng (4);%的再现性1)n =大小(量;%样本大小qIdx = randsample (n, 5);%查询数据的指标X =量(~ ismember (1: n, qIdx):);:Y =量(qIdx);
增加一个四维Kd-tree使用训练数据。指定使用闵可夫斯基距离寻找最近的邻居。
Mdl = KDTreeSearcher (X);
Mdl
是一个KDTreeSearcher
模型。默认情况下,距离度量寻找最近的邻居是欧几里得度量。
找到训练数据的指标(X
0.5厘米内)查询中的每个点数据(Y
)。
r = 0.5;[Idx D] = rangesearch (Mdl, Y, r);
Idx
和D
是五行细胞数组向量。向量的值在Idx
的指数是X
。的X
指数代表的观察中查询数据的0.5厘米,Y
。D
包含对应于观测的距离。
显示查询的结果观察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日)
。
输入参数
Mdl
- - - - - -最近邻搜索
ExhaustiveSearcher
模型对象|KDTreeSearcher
模型对象
最近邻搜索,指定为一个ExhaustiveSearcher
或KDTreeSearcher
分别为模型对象。
如果Mdl
是一个ExhaustiveSearcher
模型,然后rangesearch
使用穷举搜索搜索最近的邻居。否则,rangesearch
使用生长Kd-tree搜索最近的邻居。
Y
- - - - - -查询数据
数字矩阵
查询数据,指定为一个数字矩阵。
Y
是一个米——- - - - - -K矩阵。行Y
对应于观测(即。,例子s), and columns correspond to predictors (i.e., variables or features).Y
必须有相同数量的列作为训练数据存储在吗Mdl.X
。
数据类型:单
|双
名称-值对的观点
指定可选的逗号分隔条名称,值
参数。的名字
参数名称和吗价值
相应的价值。的名字
必须出现在引号。您可以指定几个名称和值对参数在任何顺序Name1, Value1,…,的家
。
“距离”、“闵可夫斯基”,“P”3
指定要查找所有的观察Mdl.X
在距离r
每个观测的Y
与指数,使用闵可夫斯基距离度量3
。
“距离”
- - - - - -距离度量
Mdl.Distance
(默认)|“cityblock”
|“欧几里得”
|“mahalanobis”
|闵可夫斯基的
|“seuclidean”
|函数处理|……
距离度量用来发现邻居的训练数据查询观察,指定为逗号分隔组成的“距离”
和一个特征向量,字符串标量,或函数句柄。
对于这两种类型的最近邻搜索,rangesearch
金宝app支持这些距离度量。
价值 | 描述 |
---|---|
“chebychev” |
Chebychev距离(最大坐标差异)。 |
“cityblock” |
城市街区的距离。 |
“欧几里得” |
欧氏距离。 |
闵可夫斯基的 |
闵可夫斯基距离。默认的指数是2。指定一个不同的指数,使用“P” 名称-值对的论点。 |
如果Mdl
是一个ExhaustiveSearcher
模型对象,然后rangesearch
也支持这些金宝app距离度量。
价值 | 描述 |
---|---|
“相关” |
1 -样本线性相关性的观察(作为序列的值)。 |
的余弦 |
1 -之间的夹角的余弦值观察(视为行向量)。 |
“汉明” |
汉明距离,协调不同的百分比。 |
“jaccard” |
1 - Jaccard系数,非零坐标不同的百分比。 |
“mahalanobis” |
使用正定Mahalanobis距离,计算协方差矩阵。改变协方差矩阵的值,使用“浸” 名称-值对的论点。 |
“seuclidean” |
标准化的欧氏距离。每个坐标行之间的区别Mdl.X 和查询矩阵是通过除以相应的扩展元素的标准差计算Mdl.X 。要指定另一个扩展,可以使用“规模” 名称-值对的论点。 |
“枪兵” |
1 -样本之间的斯皮尔曼等级相关的观察(作为序列的值)。 |
如果Mdl
是一个ExhaustiveSearcher
模型对象,那么您还可以指定一个函数处理为一个自定义的距离度量@
(例如,@distfun
)。自定义距离函数必须:
的形式
ZJ函数D2 = distfun(子)
。以作为参数:
1 -K向量
子
包含单个行Mdl.X
或Y
,在那里K列的数量吗Mdl.X
。一个米——- - - - - -K矩阵
ZJ
包含多个行Mdl.X
或Y
,在那里米是一个正整数。
返回一个米1的向量距离
D2
,在那里D2 (
是观察之间的距离j
)子
和ZJ (
。j
:)
更多细节,请参阅距离度量。
例子:“距离”,“闵可夫斯基”
“P”
- - - - - -闵可夫斯基距离度量的指数
2
(默认)|积极的标量
闵可夫斯基距离度量指数,指定为逗号分隔组成的“P”
和积极的标量。这个论点是有效的前提“距离”
是闵可夫斯基的
。
例子:“P”3
数据类型:单
|双
“SortIndices”
- - - - - -根据距离标志返回指数进行排序
真正的
(1
)(默认)|假
(0
)
国旗返回指数进行排序根据距离,指定为逗号分隔组成的“SortIndices”
,要么真正的
(1
)或假
(0
)。
为了更快的性能时Y
包含了许多的观察,有许多最近的点,您可以设置SortIndices
来假
。在这种情况下,rangesearch
返回最近的点的指数排名不分先后。当SortIndices
是真正的
,功能安排最近的点的指数在距离升序排列。
例子:“SortIndices”,假的
数据类型:逻辑
“浸”
- - - - - -协方差矩阵的距离度量
浸(Mdl.X omitrows)
(默认)|正定矩阵
协方差矩阵的Mahalanobis距离度量,指定为逗号分隔组成的“浸”
和一个正定矩阵。浸
是一个K——- - - - - -K矩阵,K列的数量吗Mdl.X
。如果您指定浸
并没有指定”
距离
”、“mahalanobis”
,然后rangesearch
返回一个错误消息。
例子:“浸”,眼睛(3)
数据类型:单
|双
“规模”
- - - - - -标准化的欧氏距离度量尺度参数值
性病(Mdl.X omitnan)
(默认)|非负数字矢量
标准化的欧氏距离度量,尺度参数值指定为逗号分隔组成的“规模”
和一个非负数字向量。规模
长度K,在那里K列的数量吗Mdl.X
。
软件规模每个不同的培训和使用相应的查询数据元素规模
。如果您指定规模
并没有指定”
距离
”、“seuclidean”
,然后rangesearch
返回一个错误消息。
例子:“规模”,分位数(Mdl.X, 0.75)分位数(Mdl.X, 0.25)
数据类型:单
|双
请注意
如果您指定”
距离
”
,”
浸
”
,”
P
”
,或”
规模
”
,然后Mdl.Distance
和Mdl.DistParameter
不改变的价值。
输出参数
Idx
——训练数据指数最近的邻居
单元阵列的数值向量
训练数据的指数最近的邻居,作为细胞返回数组的数值向量。
Idx
是一个米——- - - - - -1
单元阵列,这样细胞j
(Idx {j}
)包含一个米j维向量指标的观察Mdl.X
内r
观察单位查询Y (j,:)
。如果SortIndices
是真正的
,然后rangesearch
安排在升序排序向量的元素的距离。
D
-距离最近的邻居来查询数据
单元阵列的数值向量
邻居的距离来查询数据,返回的数值矩阵或单元阵列数值向量。
D
是一个米——- - - - - -1
单元阵列,这样细胞j
(D {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”
,分别。
扩展功能
C / c++代码生成
生成C和c++代码使用MATLAB®编码器™。
使用笔记和限制:
此表包含的参数
rangesearch
。参数不包括在这个表是完全支持。金宝app论点 笔记和局限性 Mdl
有两种方法可以使用
Mdl
在代码生成。例如,看到的最近邻搜索器的代码生成。使用
saveLearnerForCoder
,loadLearnerForCoder
,codegen
(MATLAB编码器)生成的代码rangesearch
函数。通过使用保存训练模型saveLearnerForCoder
。定义一个入口点函数,通过使用加载保存模型loadLearnerForCoder
并调用rangesearch
函数。然后使用codegen
入口点函数来生成代码。包括
coder.Constant (Mdl)
在arg游戏
的价值codegen
(MATLAB编码器)。
如果
Mdl
是一个KDTreeSearcher
对象,代码生成构建类型是一个墨西哥人函数,然后codegen
(MATLAB编码器)生成一个墨西哥人使用英特尔函数®线程构建块(TBB)并行计算。否则,codegen
生成的代码使用parfor
(MATLAB编码器)。墨西哥人的功能kd-tree搜索算法,
codegen
生成一个函数优化的墨西哥人使用英特尔TBB在多核平台上并行计算。您可以使用墨西哥人加速MATLAB函数®算法。在英特尔TBB的详细信息,请参见https://software.intel.com/en-us/intel-tbb。如果您生成墨西哥人函数测试生成的代码
parfor
版本,您可以禁用英特尔TBB的使用。设置ExtrinsicCalls
墨西哥人配置对象的属性假
。有关详细信息,请参见coder.MexCodeConfig
(MATLAB编码器)。墨西哥人穷举搜索算法和功能独立的C / c++代码两种算法生成的代码的
rangesearch
使用parfor
(MATLAB编码器)创建循环,支持共享内存多核平台上并行运行生成的代码。金宝app如果你的编译器不支持开放的多处理(OpenMP)应用金宝app程序接口或禁用OpenMP库,MATLAB编码器™将parfor
循环,为
循环。找到支持的编译器金宝app,看看金宝app支持编译器。禁用OpenMP图书馆,设置EnableOpenMP
配置对象的属性假
。有关详细信息,请参见coder.CodeConfig
(MATLAB编码器)。
“距离”
不能自定义距离函数。
必须是一个编译时常量;其值不能改变在生成的代码。
“SortIndices”
不受支持金宝app的。输出参数总是排序。 名称-值对的观点 名字必须编译时常量参数名称-值对。例如,允许一个用户定义的指数的闵可夫斯基距离生成的代码,包括
{coder.Constant(的距离),coder.Constant(“闵可夫斯基”),coder.Constant (“P”), 0}
在arg游戏
的价值codegen
(MATLAB编码器)。Idx
与距离的顺序生成的代码可以从MATLAB的次序不同,由于数值精度。
从R2020a开始,
rangesearch
返回整数类型(int32
)指标,而不是双精度指标,在独立的C / c++代码生成。因此,严格的单精度的函数允许支持当你使用单精确输入。金宝app墨西哥人的代码生成的函数仍然返回双精度指标与MATLAB的行为。
有关更多信息,请参见介绍代码生成和最近邻搜索器的代码生成。
MATLAB命令
你点击一个链接对应MATLAB命令:
运行该命令通过输入MATLAB命令窗口。Web浏览器不支持MATLAB命令。金宝app
你也可以从下面的列表中选择一个网站:
表现最好的网站怎么走吗
选择中国网站(中文或英文)最佳站点的性能。其他MathWorks国家网站不优化的访问你的位置。