找到k-最近的邻居使用搜索对象
knnsearch
接受ExhaustiveSearcher
或KDTreeSearcher
对对象建模,以便在训练数据中搜索与查询数据最近的邻居。一个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”,真正的);
Idx
和D
是由五个元素组成的向量单元数组,每个向量至少有七个元素。
显示中向量的长度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
培训的观察88
和95
0.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”);
IdxMk
和IdxCb
1 × 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个最近的邻居。
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
金宝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。X
或Y
,在那里K的列数是多少Mdl。X
.
一个米——- - - - - -K矩阵ZJ
包含多行Mdl。X
或Y
,在那里米为正整数。
返回一个米-乘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
数据类型:单
|双
“SortIndices”
- - - - - -标志,根据距离对返回的索引进行排序真正的
(1
)(默认)|假
(0
)标志根据距离对返回的索引进行排序,指定为逗号分隔的对,由“SortIndices”
,要么真正的
(1
)或假
(0
)。
要获得更快的性能,您可以设置SortIndices
来假
当下列情况成立时:
Y
包含了许多有许多近邻的观测结果X
.
Mdl
是一个KDTreeSearcher
模型对象。
IncludeTies
是假
.
在这种情况下,knnsearch
返回最近邻的索引,没有特定的顺序。当SortIndices
是真正的
,函数按距离升序排列最近邻指标。
SortIndices
是真正的
默认情况下。当Mdl
是一个ExhaustiveSearcher
模型对象或IncludeTies
是真正的
,该函数总是对索引进行排序。
例子:“SortIndices”,假的
数据类型:逻辑
“浸”
- - - - - -马氏距离度量的协方差矩阵浸(Mdl.X omitrows)
(默认)|正定矩阵马氏距离度量的协方差矩阵,指定为逗号分隔对,由“浸”
一个正定矩阵。浸
是一个K——- - - - - -K矩阵,K的列数是多少Mdl。X
.如果您指定浸
不要指定'
距离
”、“mahalanobis”
,然后knnsearch
返回错误消息。
例子:“浸”,眼睛(3)
数据类型:单
|双
“规模”
- - - - - -尺度参数值的标准欧几里得距离度量性病(Mdl.X omitnan)
(默认)|非负数字矢量尺度参数值为标准化的欧几里得距离度量,指定为逗号分隔对组成“规模”
和一个非负的数值向量。规模
长度K,在那里K的列数是多少Mdl。X
.
该软件使用相应的元素来衡量训练数据和查询数据之间的每个差异规模
.如果您指定规模
不要指定'
距离
”、“seuclidean”
,然后knnsearch
返回错误消息。
例子:“规模”,分位数(Mdl.X, 0.75)分位数(Mdl.X, 0.25)
数据类型:单
|双
请注意
如果您指定'
距离
'
,'
浸
'
,'
P
'
,或'
规模
'
,然后Mdl。D是tance
和Mdl。D是tParameter
不要改变值。
Idx
—训练最近邻的数据索引最近邻的训练数据索引,以数字矩阵或数字向量单元数组的形式返回。
如果没有指定IncludeTies
(假
默认情况下),那么Idx
是一个米——- - - - - -k数字矩阵,米行数是多少Y
和k搜索的最近邻的数目是否由“K”
名称-值对的论点。Idx (j,我)
表明Mdl.X (Idx (j,我):)
是其中之一k最近的观察Mdl。X
到查询观察Y (j,:)
.
如果您指定“IncludeTies”,真的
,然后Idx
是一个米——- - - - - -1
单元格数组这样的单元格j
(Idx {j}
)包含一个至少为的向量k最近观测的指数Mdl。X
到查询观察Y (j,:)
.
如果SortIndices
是真正的
,然后knnsearch
按距离升序排列指标。
D
-最近邻居的距离查询数据的最近邻居的距离,以数字矩阵或数字向量单元格数组的形式返回。
如果没有指定IncludeTies
(假
默认情况下),那么D
是一个米——- - - - - -k数字矩阵,米行数是多少Y
和k搜索的最近邻的数目是否由“K”
名称-值对的论点。D (j,我)
是距离Mdl.X (Idx (j,我):)
以及查询观察Y (j,:)
关于距离度量。
如果您指定“IncludeTies”,真的
,然后D
是一个米——- - - - - -1
单元格数组这样的单元格j
(D {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-最近邻分类,见fitcknn
和ClassificationKNN
.
[1] Friedman, J. H., Bentely, J.和Finkel, R. A.(1977)。"在对数预期时间内找到最佳匹配的算法"数学软件学报1977年9月第3卷第3期209-226页。
使用注意事项及限制:
这个表格包含关于的参数的注释knnsearch
.表中未包含的参数完全支持。金宝app
论点 | 笔记和局限性 |
---|---|
Mdl |
有两种使用方法
如果
|
“距离” |
|
“IncludeTies” |
必须是编译时常量;它的值不能在生成的代码中更改。 |
“SortIndices” |
不受支持金宝app的。输出参数总是排序的。 |
名称-值对的观点 | 名称-值对参数中的名称必须是编译时常量。例如,要允许在生成的代码中使用用户定义的Minkowski距离指数,包括 |
Idx |
|
有关更多信息,请参见代码生成简介和最近邻搜索器的代码生成.
你点击一个链接对应于这个MATLAB命令:
通过在MATLAB命令窗口中输入命令来运行命令。Web浏览器不支持MATLAB命令。金宝app
你也可以从以下列表中选择一个网站:
选择中国网站(中文或英文)以获得最佳网站性能。其他MathWorks国家站点没有针对您所在位置的访问进行优化。