knnsearch
找到k-最近的邻居使用对象
语法
Idx = knnsearch(Mdl,Y)
Idx = knnsearch(Mdl,Y,名称,值)
[Idx,D] = knnsearch(___)
描述
例子
搜索最近的邻居使用Kd-树和穷举搜索
knnsearch
接受ExhaustiveSearcher
或KDTreeSearcher
建模对象以搜索训练数据,寻找与查询数据最近的邻居。一个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
.
比较k-使用不同距离度量的最近邻
火车两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
而且IdxCb
1 × 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];轴广场;
几个观察结果是相等的,这就是为什么在图中只确定了八个最近的邻居。
输入参数
Mdl
- - - - - -最近邻搜索器
ExhaustiveSearcher
模型对象|KDTreeSearcher
模型对象
最近邻搜索器,指定为ExhaustiveSearcher
或KDTreeSearcher
分别为模型对象。
如果Mdl
是一个ExhaustiveSearcher
模型,然后knnsearch
使用穷尽搜索搜索最近的邻居。否则,knnsearch
使用生长的Kd-树搜索最近的邻居。
Y
- - - - - -查询数据
数字矩阵
查询数据,指定为数字矩阵。
Y
是一个米——- - - - - -K矩阵。行Y
对应于观察结果(即例子),列对应于预测因子(即变量或特征)。Y
必须与存储在其中的训练数据具有相同数量的列Mdl。X
.
数据类型:单
|双
名称-值对参数
的可选逗号分隔对名称,值
参数。的名字
参数名称和价值
对应的值。的名字
必须出现在单引号内(' '
).您可以以任意顺序指定多个名称和值对参数Name1, Value1,…,的家
.
“K”2“距离”,“闵可夫斯基”
的两个最近邻居Mdl。X
到每一点Y
使用闵可夫斯基距离度量。
对于两个最近邻搜索器
“距离”
- - - - - -距离度量
Mdl。D是tance
(默认)|“cityblock”
|“欧几里得”
|“mahalanobis”
|闵可夫斯基的
|“seuclidean”
|函数处理|……
距离度量用于查找训练数据到查询观察的邻居,指定为逗号分隔的对,由“距离”
和字符向量、字符串标量或函数句柄。
对于这两种最近邻搜索器,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。X
或Y
,在那里K列数是Mdl。X
.一个米——- - - - - -K矩阵
ZJ
包含多行Mdl。X
或Y
,在那里米为正整数。
返回一个米-by-1的距离向量
D2
,在那里D2 (
观测值之间的距离是多少j
)子
而且ZJ (
.j
:)
详情请参见距离度量.
例子:“距离”,“闵可夫斯基”
“IncludeTies”
- - - - - -标记以包括所有最近的邻居
假
(0
)(默认)|真正的
(1
)
标记,以包含距离查询观察值具有相同距离的最近邻居,指定为由逗号分隔的对组成“IncludeTies”
而且假
(0
)或真正的
(1
).
如果IncludeTies
是真正的
,那么:
如果IncludeTies
是假
,然后knnsearch
在与查询点距离相同的观测值中,选择索引最小的观测值。
例子:“IncludeTies”,真的
“K”
- - - - - -最近邻居数
1
(默认)|正整数
每个查询观察中要在训练数据中搜索的最近邻居数,指定为逗号分隔的对,由“K”
一个正整数。
例子:“K”2
数据类型:单
|双
“P”
- - - - - -闵可夫斯基距离度量的指数
2
(默认)|积极的标量
闵可夫斯基距离度量的指数,指定为逗号分隔的对,由“P”
一个正标量。这个论点只有在以下情况下才成立“距离”
是闵可夫斯基的
.
例子:“P”3
数据类型:单
|双
穷尽最近邻搜索器
“浸”
- - - - - -马氏距离度量的协方差矩阵
nancov (Mdl.X)
(默认)|正定矩阵
马氏距离度量的协方差矩阵,指定为逗号分隔的对,由“浸”
和一个正定矩阵。浸
是一个K——- - - - - -K矩阵,K列数是Mdl。X
.如果你指定浸
不要详细说明'
距离
”、“mahalanobis”
,然后knnsearch
返回一个错误消息。
例子:“浸”,眼睛(3)
数据类型:单
|双
“规模”
- - - - - -标准化欧几里得距离度量的尺度参数值
nanstd (Mdl.X)
(默认)|非负数值向量
标准欧几里得距离度量的刻度参数值,指定为逗号分隔的对,由“规模”
和一个非负数值向量。规模
长度K,在那里K列数是Mdl。X
.
的相应元素,该软件在训练数据和查询数据之间缩放每个差异规模
.如果你指定规模
不要详细说明'
距离
”、“seuclidean”
,然后knnsearch
返回一个错误消息。
例子:'Scale',分位数(mml . x,0.75) -分位数(mml . x,0.25)
数据类型:单
|双
请注意
如果你指定'
距离
'
,'
浸
'
,'
P
'
,或'
规模
'
,然后Mdl。D是tance
而且Mdl。D是tParameter
不要改变值。
输出参数
Idx
-最近邻居的训练数据指标
数值矩阵|单元阵列的数值向量
训练最近邻居的数据索引,返回为数值向量的数值矩阵或单元格数组。
如果您没有指定
IncludeTies
(假
默认情况下),然后Idx
是一个米——- - - - - -k数字矩阵,米行数是多少Y
而且k属性是否指定了搜索的最近邻数“K”
名称-值对参数。Idx (j l)
表明Mdl.X (Idx (j l):)
观察与l
到查询观测点的最小距离Y (j,:)
.如果你指定
“IncludeTies”,真的
,然后Idx
是一个米——- - - - - -1
单元格数组这样的单元格j
(Idx {j}
)包含至少为的向量k中最接近观测值的指数Mdl。X
到查询观察Y (j,:)
.该函数按距离的升序排列向量的元素。
D
-最近邻居的距离
数值矩阵|单元阵列的数值向量
查询数据的最近邻居的距离,作为数值向量的数值矩阵或单元格数组返回。
如果您没有指定
IncludeTies
(假
默认情况下),然后D
是一个米——- - - - - -k数字矩阵,米行数是多少Y
而且k属性是否指定了搜索的最近邻数“K”
名称-值对参数。j D(左)
是距离Mdl.X (Idx (j l):)
以及查询观察Y (j,:)
对于距离度规,它表示l
最小距离。如果你指定
“IncludeTies”,真的
,然后D
是一个米——- - - - - -1
单元格数组这样的单元格j
(D {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页。
扩展功能
C/ c++代码生成
使用MATLAB®Coder™生成C和c++代码。
使用注意事项和限制:
该表包含关于参数的注释。
论点 注意事项和限制 Mdl
有两种使用方法
Mdl
在代码生成中。有关示例,请参见最近邻搜索器的代码生成工作流.通过使用保存一个训练好的模型
saveCompactModel
,然后使用加载模型loadCompactModel
在您定义的函数中。包括
coder.Constant (Mdl)
在arg游戏
的价值codegen
.
必须是编译时常数;它的值不能在生成的代码中更改。
“距离”
不能是自定义距离函数。
必须是编译时常数;它的值不能在生成的代码中更改。
“IncludeTies”
必须是编译时常数;它的值不能在生成的代码中更改。
名-值对参数 名-值对参数中的名称必须是编译时常量。例如,要允许在生成的代码中使用用户定义的闵可夫斯基距离指数,请使用include
{coder.Constant(的距离),coder.Constant(“闵可夫斯基”),coder.Constant(“P”),0}
在arg游戏
的价值codegen
.Idx
当你指定
“IncludeTies”
作为真正的
,生成的代码中绑定距离的排序顺序可以与MATLAB中的顺序不同®由于数值精度。对于代码生成,
knnsearch
使用parfor
(默认情况下)来创建在受支持的共享内存多核平台上并行运行的循环。万博1manbetx如果您的编译器不支持开放多处理(OpenMP)应用程万博1manbetx序接口或禁用OpenMP库,MATLAB编码器™将parfor
循环,为
循环。要查找受支持的编万博1manbetx译器,请参见万博1manbetx支持编译器.若要禁用OpenMP库,请指定EnableOpenMP
的属性codegen
配置对象为假
.详细信息请参见编码器。CodeConfig
.
有关代码生成示例,请参见最近邻搜索器的代码生成工作流.有关更多信息,请参阅中的主题代码生成.
在R2010a中引入
MATLAB命令
你点击了一个对应于这个MATLAB命令的链接:
在MATLAB命令窗口中输入该命令来运行该命令。Web浏览器不支持MATLAB命令。万博1manbetx
您也可以从以下列表中选择一个网站:
如何获得最佳的网站性能
选择中国站点(中文或英文)以获得最佳站点性能。其他MathWorks国家站点没有针对您所在位置的访问进行优化。