找k使用Searcher对象的最佳邻居
knnsearch
接受令人疲惫的
或者kdtreesearcher.
模型对象,用于搜索最近邻居的训练数据到查询数据。一个令人疲惫的
模型调用详尽的搜索者算法,以及一个kdtreesearcher.
模型定义A.KD树,哪个knnsearch
用于搜索最近的邻居。
载入费雪的虹膜数据集。从数据中随机保留5个观察值作为查询数据。
负载渔民rng (1);重复性的%1) n =大小(量;idx = randsample (n, 5);X =量(~ ismember (1: n, idx):);%培训数据y = meas(idx,:);%查询数据
变量量
包含4个预测因子。
生长默认的四维KD树。
MdlKDT = KDTreeSearcher (X)
MdlKDT = KDTreeSearcher with properties: BucketSize: 50 Distance: 'euclidean' DistParameter: [] X: [145x4 double]
mdlkdt.
是A.kdtreesearcher.
模型对象。您可以使用点表示法更改其可写属性。
准备一个详尽的最近邻搜索。
mdles = utifiventsearcher(x)
mdles =具有属性的令人疲劳性研究员:距离:'euclidean'distparameter:[] x:[145x4双]
mdlkdt.
是一个令人疲惫的
模型对象。它包含选项,例如距离度量,用于查找最近的邻居。
或者,你可以成长一个KD-Tree或准备详尽的最近邻搜索者创造
.
搜索对应于每个查询观察的最近邻居索引的培训数据。使用默认设置进行两种类型的搜索。默认情况下,每个查询观察搜索的邻居数量是1
.
Idxkdt = knnsearch(mdlkdt,y);Idxes = knnsearch(mdles,y);[IDXKDT IDXES]
ans =.5×217 17 6 6 1 1 89 89 124 124
在这种情况下,搜索结果是相同的。
种植KD-Tree最近的邻居搜索器对象通过使用创造
函数。将对象和查询数据传递给knnsearch
找到的功能k最近的邻居。
载入费雪的虹膜数据集。
负载渔民
从预测器数据随机删除五个虹膜以用作查询集。
rng (1);重复性的%1) n =大小(量;%样本大小qidx = randsample(n,5);%查询数据索引tidx =〜ismember(1:n,qidx);%训练数据指标Q =量(qIdx:);X =量(tIdx:);
长四维KD-Tree使用培训数据。指定Minkowski距离查找最近的邻居。
mdl = createns(x,'距离','minkowski')
Mdl = KDTreeSearcher with properties: BucketSize: 50 Distance: 'minkowski' DistParameter: 2 X: [145x4 double]
因为X
有四列,距离度量是minkowski,创造
创造一个kdtreesearcher.
默认情况下模型对象。Minkowski距离指数是2
默认情况下。
找到培训数据的指标(mdl.x.
)是查询数据中每个点的两个最近邻居(问
)。
idxnn = knnsearch(mdl,q,'K'2)
idxnn =.5×217 4 6 2 1 12 89 66 124 100
每一排idxnn.
对应于查询数据观察,并且列顺序对应于相对于升高距离的最近邻居的顺序。例如,基于Minkowski距离,第二个最近的邻居q(3,:)
是: X(12日)
.
载入费雪的虹膜数据集。
负载渔民
从预测器数据随机删除五个虹膜以用作查询集。
rng (4);重复性的%1) n =大小(量;%样本大小qidx = randsample(n,5);%查询数据索引X =量(~ ismember (1: n, qIdx):);: Y =量(qIdx);
长四维KD-Tree使用培训数据。指定Minkowski距离查找最近的邻居。
mdl = kdtreesearcher(x);
MDL.
是A.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×8.91 98 67 69 71 93 88 95
nn5d = d {1}
nn5d =1×8.0.1414 0.2646 0.2828 0.340 0.3464 0.3742 0.3873 0.3873
培训观察88.
和95.
距查询观察0.3873厘米1
.
火车二kdtreesearcher.
模型使用不同的距离度量,并进行比较k用于两种型号的查询数据的最佳邻居。
载入费雪的虹膜数据集。将花瓣测量视为预测因子。
负载渔民X = MEAS(:,3:4);%预测因子y =物种;% 回复
训练kdtreesearcher.
使用预测器模型对象。用指数5指定Minkowski距离。
KDTreeMdl = KDTreeSearcher (X,'距离','minkowski',“P”5)
KDTReeMDL = KDTreeSearcher具有属性:Bucketsize:50距离:'Minkowski'DistParameter:5 x:[150x2双]
找出10个最近的邻居X
查询点(纽波特
),首先使用Minkowski然后使用Chybochev距离指标。查询点必须具有与用于培训模型的数据相同的列维度。
newpoint = [5 1.45];[idxmk,dmk] = knnsearch(kdtreemdl,newpoint,'K',10);[idxcb,dcb] = knnsearch(kdtreemdl,newpoint,'K'10,'距离',“chebychev”);
IDXMK.
和IdxCb
1 × 10矩阵是否包含行索引X
对应于最近的邻居纽波特
使用Minkowski和Chebychev距离。元素(1,1)是最近的,元素(1,2)是下一个最近的,等等。
绘制训练数据、查询点和最近的邻居。
图;gscatter (X (: 1) X (:, 2), Y);标题('fisher'的虹膜数据 - 最近的邻居');包含('花瓣长度(cm)');ylabel('花瓣宽度(cm)');抓住在plot(newpoint(1),newpoint(2),'kx','Markersize'10,'行宽',2);%查询点绘图(x(idxmk,1),x(idxmk,2),“o”,'颜色',[。5 .5 .5],'Markersize',10);%Minkowski最近的邻居绘图(x(idxcb,1),x(idxcb,2),“p”,'颜色',[。5 .5 .5],'Markersize',10);%chebychev最近的邻居传奇('setosa','versicolor','virginica','query point',......'minkowski',“chebychev”,'地点',“最佳”);
放大兴趣点。
H = GCA;%获取当前轴手柄。H.XLIM = [4.5 5.5];H.YLIM = [1 2];轴广场;
几个观察是相等的,这就是为什么在图中只识别了八个最近邻居的原因。
MDL.
- - - - - -最近的邻居搜索者令人疲惫的
模型对象|kdtreesearcher.
模型对象最近的邻居搜索者,指定为一个令人疲惫的
或者kdtreesearcher.
模型对象分别。
如果MDL.
是一个令人疲惫的
模型,然后knnsearch
使用详尽的搜索搜索最近的邻居。除此以外,knnsearch
使用成长KD树搜索最近的邻居。
Y
- - - - - -查询数据查询数据,指定为数字矩阵。
Y
是一个米-经过-K矩阵。行Y
对应观察(例如,例子),列对应预测(例如,变量或特征)。Y
必须具有与存储的培训数据相同数量的列mdl.x.
.
数据类型:单身的
|双倍的
指定可选的逗号分隔的对名称,价值
论点。姓名
参数名和价值
是相应的价值。姓名
必须出现在引号内。您可以以任何顺序指定多个名称和值对参数Name1, Value1,…,的家
.
'k',2,'距离','minkowski'
指定找到两个最近的邻居mdl.x.
每个点Y
并使用Minkowski距离度量。
'距离'
- - - - - -距离度量mdl.distance.
(默认)|'城市街区'
|'euclidean'
|'mahalanobis'
|'minkowski'
|'seuclidean'
|函数处理|......距离度量用来寻找训练数据到查询观测值的邻居,指定为逗号分隔对组成'距离'
以及字符向量、字符串标量或函数句柄。
对于这两种最近邻搜索器,knnsearch
万博1manbetx支持这些距离指标。
价值 | 描述 |
---|---|
“chebychev” |
切比切夫距离(最大坐标差)。 |
'城市街区' |
城市街区距离。 |
'euclidean' |
欧几里德距离。 |
'minkowski' |
闵可夫斯基距离。默认指数是2。要指定不同的指数,请使用“P” 名称-值对的论点。 |
如果MDL.
是一个令人疲惫的
模型对象,然后knnsearch
还支持这些万博1manbetx距离指标。
价值 | 描述 |
---|---|
'相关性' |
一个减去观察之间的样本线性相关性(作为值序列处理)。 |
的余弦 |
1减去观测值之间夹角的余弦值(作为行向量)。 |
“汉明” |
汉明距离,这是坐标的百分比。 |
'jaccard' |
一个减去Jaccard系数,这是非零坐标的百分比。 |
'mahalanobis' |
Mahalanobis距离,使用正定的协方差矩阵计算。要更改协方差矩阵的值,请使用'COV' 名称-值对的论点。 |
'seuclidean' |
标准化的欧几里德距离。行之间的每个坐标差异mdl.x. 并且通过将标准偏差的相应元素除以从计算机的相应元素划分来缩放查询矩阵mdl.x. .要指定另一个缩放,请使用'规模' 名称-值对的论点。 |
“矛曼” |
1减去观察值之间的样本斯皮尔曼等级相关性(作为值的序列处理)。 |
如果MDL.
是一个令人疲惫的
模型对象,则还可以使用@
(例如,@Distfun.
)。自定义距离功能必须:
有形式功能d2 = distfun(zi,zj)
.
作为论点:
一个1-by-K向量Zi.
包含单行mdl.x.
或者Y
, 在哪里K是列的数量mdl.x.
.
一个米-经过-K矩阵ZJ.
包含多行mdl.x.
或者Y
, 在哪里米为正整数。
返回一个米-1-1距离矢量D2
, 在哪里D2(
是观察之间的距离j
)Zi.
和ZJ(
.j
:)
有关更多详细信息,请参阅距离指标.
例子:'距离','minkowski'
“IncludeTies”
- - - - - -标志包括所有最近的邻居错误的
(0
)(默认)|真的
(1
)标志包括与查询观测具有相同距离的最近邻居,指定为包括的逗号分隔对“IncludeTies”
和错误的
(0
) 或者真的
(1
)。
如果IncludeTies.
是真的
,那么:
如果IncludeTies.
是错误的
,然后knnsearch
选择具有与查询点相同距离的观察结果中最小指数的观察。
例子:'IncludeTies',真实
'K'
- - - - - -最近邻数1
(默认)|正整数用于搜索每个查询观察的训练数据的最近邻居的数量,指定为包括的逗号分隔对'K'
和一个正整数。
例子:'k',2
数据类型:单身的
|双倍的
“P”
- - - - - -用于Minkowski距离度量的指数2
(默认)|积极的标量“SortIndices”
- - - - - -标志根据距离对返回的指数进行排序真的
(1
)(默认)|错误的
(0
)标志根据距离对返回的指数进行排序,指定为逗号分隔对“SortIndices”
和任何一种真的
(1
) 或者错误的
(0
)。
为了更快的性能,您可以设置sortindices.
到错误的
以下情况下是真的:
Y
包含了许多有许多近邻的观测结果X
.
MDL.
是A.kdtreesearcher.
模型对象。
IncludeTies.
是错误的
.
在这种情况下,knnsearch
在没有特定的顺序中返回最近邻居的索引。什么时候sortindices.
是真的
,函数按距离升序排列最近邻指标。
sortindices.
是真的
默认情况下。什么时候MDL.
是一个令人疲惫的
模型对象或IncludeTies.
是真的
,该函数始终对索引进行排序。
例子:'sortindices',false
数据类型:逻辑
'COV'
- - - - - -Mahalanobis距离度量的协方差矩阵浸(Mdl.X omitrows)
(默认)|正定的矩阵用于Mahalanobis距离度量的协方差矩阵,指定为逗号分隔对组成'COV'
和一个积极的矩阵。COV.
是A.K-经过-K矩阵,K是列的数量mdl.x.
.如果您指定COV.
并且没有指定'
距离
”、“mahalanobis”
,然后knnsearch
返回错误消息。
例子:“浸”,眼睛(3)
数据类型:单身的
|双倍的
'规模'
- - - - - -标准化欧几里德距离度量的比例参数值std(mdl.x,'omitnan')
(默认)|非负数字矢量标准化欧几里德距离度量的比例参数值,指定为逗号分隔对组成'规模'
和一个非负数字矢量。规模
长度K, 在哪里K是列的数量mdl.x.
.
软件使用相应的元素缩放训练和查询数据之间的每个区别规模
.如果您指定规模
并且没有指定'
距离
','seuclidean'
,然后knnsearch
返回错误消息。
例子:'Scale',Smianile(MDL.x,0.75) - Smianile(MDL.x,0.25)
数据类型:单身的
|双倍的
请注意
如果您指定'
距离
'
,'
COV.
'
,'
P
'
, 或者'
规模
'
,然后mdl.distance.
和mdl.distparameter.
不要改变价值。
idx.
- 培训最近邻居的数据指数培训最近邻居的数据指数,作为数字矩阵或数字向量的单元数组返回。
如果没有指定IncludeTies.
(错误的
默认情况下),那么idx.
是一个米-经过-k数字矩阵,其中米是行的数量Y
和k是由搜索的最近邻居的数量'K'
名称-值对的论点。Idx(j,i)
表示mdl.x(idx(j,i),:)
是其中之一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,i)
是之间的距离mdl.x(idx(j,i),:)
和查询观察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
是一个需要一个对象函数令人疲惫的
或者kdtreesearcher.
模型对象和查询数据。在等同条件下,knnsearch
对象函数返回与此相同的结果knnsearch
函数,在指定名称-值对参数时'nsmethod','穷举'
或者'nsmethod','kdtree'
,分别。
为k- 最终邻居分类,见Fitcknn.
和ClassificationKnn.
.
[1] Friedman, J. H., Bentely, J.和Finkel, R. A.(1977)。"在对数预期时间内找到最佳匹配的算法"数学软件学报卷。3,第3期,977年9月,第209-226页。
使用说明和限制:
此表包含有关参数的说明knnsearch
.未包含在此表中的参数完全支持。万博1manbetx
论点 | 笔记和局限性 |
---|---|
MDL. |
有两种方法可以使用
如果
|
'距离' |
|
“IncludeTies” |
必须是编译时常量;它的值不能在生成的代码中更改。 |
“SortIndices” |
不支持。万博1manbetx始终对输出参数进行排序。 |
名称值对参数 | 名称值对参数中的名称必须是编译时常量。例如,要允许在生成的代码中使用用户定义的Minkowski距离指数,包括 |
idx. |
|
有关更多信息,请参阅代码生成简介和最近邻搜索的代码生成.
您单击了与此MATLAB命令对应的链接:
在MATLAB命令窗口中输入它来运行命令。Web浏览器不支持MATLAB命令。万博1manbetx
您还可以从以下列表中选择一个网站:
选择中国网站(中文或英文)以获得最佳网站性能。其他MathWorks国家站点没有针对您所在位置的访问进行优化。