主要内容

knnsearch.

找到K.- 使用输入数据的最佳邻居

描述

例子

Idx= knnsearch (Xy找到最近的邻居X对于每个查询点y并返回最近邻的索引Idx,一个列向量。Idx具有相同的行数y

Idx= knnsearch (Xy名称,价值回报Idx使用一个或多个名称-值对参数指定附加选项。例如,可以指定要搜索的最近邻居的数量和在搜索中使用的距离度量。

例子

[IdxD.] = knnsearch(___另外返回矩阵D.,使用前面语法中的任何输入参数。D.包含每个观察之间的距离y和相应的最近的观察X

例子

全部折叠

找到病人在医院与病人最相似的数据集y,根据年龄和体重。

加载医院数据集。

加载医院;X =[医院。年龄hospital.Weight);Y = [20 162;30 169;40 168;50 170;60 171];%新患者

执行一个knnsearch.之间的Xy查找最近邻的索引。

Idx = knnsearch (X, Y);

找到病人X最近的年龄和体重y

x(idx,:)
ans =.5×225 171 25 171 39 164 49 170 50 172

找到10个最近的邻居X每个点y,首先使用闵可夫斯基距离度量,然后使用切比切夫距离度量。

装载Fisher的Iris数据集。

加载fisheririsX =量(:,3:4);原始花的测量值Y = [5 1.45;6 2;2.75 .75];%新花卉数据

执行一个knnsearch.之间的X以及查询点y使用Minkowski和Chebychev距离度量。

(马里兰州mIdx) = knnsearch (X, Y,'K'10“距离”闵可夫斯基的'P'5);[CIDX,CD] = knnsearch(x,y,'K'10“距离”'chebbychev');

可视化两个最近邻的搜索结果。绘制训练数据。用标记x绘制查询点。用圆圈表示Minkowski最近的邻居。用五角形来表示切比切夫最近的邻居。

Gsfatter(x(:,1),x(:,2),物种)线(y(:,1),y(:,2),“标记”'X''颜色'“k”...'Markersize'10'行宽'2,'linestyle''没有任何')线(X (mIdx, 1), X (mIdx, 2),'颜色',(。5。5。5),“标记”'o'...'linestyle''没有任何''Markersize'10)线(X (cIdx, 1), X (cIdx, 2),'颜色',(。5。5。5),“标记”'P'...'linestyle''没有任何''Markersize'10)传说('setosa'“多色的”'virginica'“查询点”...闵可夫斯基的'chebbychev'“位置”“最佳”

图包含轴。轴包含6个类型的线。这些对象代表setosa,versicolor,virginica,查询点,minkowski,chebychev。

输入参数

全部折叠

输入数据,指定为数字矩阵。行X对应观察值,列对应变量。

数据类型:|

查询点,指定为数字矩阵。行y对应观察值,列对应变量。y必须具有相同数量的列X

数据类型:|

名称-值对的观点

指定可选的逗号分离对名称,价值参数。的名字是参数名称和价值为对应值。的名字必须出现在引号内。可以以任意顺序指定多个名称和值对参数name1,value1,...,namen,valuen

例子:knnsearch(x,y,'k',10,'IncludeTies',True,'距离','CityBlock')搜索10个最近的邻居,包括领带和使用城市街区距离。

找到最近的邻居的数量X对于每一点y,指定为逗号分隔的对,由'K'一个正整数。

例子:“K”,10

数据类型:|

标志,以包含与查询点有相同距离的所有最近的邻居,指定为逗号分隔对,由'Includeties'错误的0.)或真正的1).

如果'Includeties'错误的, 然后knnsearch.在与查询点距离相同的观测值中选择索引值最小的观测值。

如果'Includeties'真正的, 然后:

  • knnsearch.包括所有最近的邻居,其距离等于K.在输出参数中最小的距离。指定K., 使用'K'名称值对参数。

  • IdxD.m——- - - - - -1细胞阵列,使得每个单元包含至少的向量K.分别指数和距离。每个矢量D.包含按升序排列的距离。每一行Idx包含与中距离相对应的最近邻居的指标D.

例子:“IncludeTies”,真的

最近邻搜索方法,指定为逗号分隔对组成'nsmethod'和其中一个值。

  • 'kdtree'-创建和使用K.d树来寻找最近的邻居。'kdtree'中的列数是默认值吗X小于或等于10,X不是稀疏,距离度量是“欧几里得”“cityblock”'chebbychev',或闵可夫斯基的.否则,默认值为“详尽”

    的值'kdtree'仅当距离度量是上面提到的四个度量之一时有效。

  • “详尽”—采用穷举搜索算法,计算到中所有点的距离值X每个点y

例子:“NSMethod”、“详尽”

距离度量knnsearch.用途,指定为逗号分隔对组成“距离”和表中的一个值或函数句柄。

价值 描述
“欧几里得” 欧几里德距离。
“seuclidean” 标准化的欧几里德距离。行之间的每个坐标差异X以及查询矩阵y是通过除以相应元素的标准偏差计算得出的X.要指定另一个缩放,请使用“规模”名称值对参数。
“cityblock” 城市街区的距离。
'chebbychev' Chebychev距离(最大坐标差异)。
闵可夫斯基的 Minkowski距离。默认指数为2.要指定其他指数,请使用'P'名称值对参数。
“mahalanobis” Mahalanobis距离,使用正定的协方差矩阵计算。要更改协方差矩阵的值,请使用“浸”名称值对参数。
'余弦' 1减去观测值之间夹角的余弦值(作为向量处理)。
'相关性' 一个减去观察之间的样本线性相关性(作为值序列处理)。
“枪兵” 一个减去样本Spearman的观察之间的秩相关性(视为值序列)。
'汉明' 汉明距离,是坐标差的百分比。
“jaccard” 1减去雅卡尔系数,雅卡尔系数是不同的非零坐标的百分比。

您还可以使用@(例如,@distfun).自定义距离函数必须:

  • 的形式函数D2 = distfun(ZI,ZJ)

  • 以作为参数:

    • 1 -N向量包含来自的单行X或从查询点y

    • 一个m2——- - - - - -N矩阵ZJ包含多行Xy

  • 返回A.m2-1-1距离矢量D2,他的j元素是观测值之间的距离ZJ (j,:)

有关更多信息,请参见距离指标

例子:“距离”、“chebychev”

闵可夫斯基距离度量的指数,指定为逗号分隔对,由'P'一个正标量。

此参数仅当“距离”闵可夫斯基的

例子:'P',3

数据类型:|

用于Mahalanobis距离度量的协方差矩阵,指定为逗号分隔对组成“浸”一个正定矩阵。

此参数仅当“距离”“mahalanobis”

例子:'COV',EYE(4)

数据类型:|

尺度参数值为标准化的欧几里得距离度量,指定为逗号分隔对组成“规模”和一个非负的数值向量。“规模”长度等于列数X.什么时候knnsearch.计算标准化的欧几里德距离,每个坐标X是按对应的元素缩放的吗“规模”,就像每个查询点一样。此参数仅在以下情况下有效“距离”“seuclidean”

例子:'Scale',Smianile(x,0.75) - smartile(x,0.25)

数据类型:|

的叶节点中的最大数据点数K.D-Tree,指定为逗号分隔对组成“BucketSize”一个正整数。此参数仅在以下情况下有效NSMethod'kdtree'

例子:'桶装',20

数据类型:|

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

要获得更快的性能,您可以设置SortIndices错误的当下列情况成立时:

在这种情况下,knnsearch.返回最近邻的索引,没有特定的顺序。什么时候SortIndices真正的,该函数按距离按升序排列最近的邻居指数。

SortIndices真正的默认情况下。什么时候NSMethod“详尽”IncludeTies真正的,该函数总是对索引进行排序。

例子:“SortIndices”,假的

数据类型:逻辑

输出参数

全部折叠

最近邻的输入数据索引,作为数字矩阵或数字向量的单元格数组返回。

  • 如果您未指定IncludeTies错误的默认情况下),然后Idx是一个m——- - - - - -K.数字矩阵,m行数是多少yK.为搜索的最近邻居数。Idx (j,我)表明X (Idx (j,我),:)其中一个K.最近的观察X到查询点Y (j,:)

  • 如果您指定“IncludeTies”,真的, 然后Idx是一个m——- - - - - -1单元阵列使细胞jIDX {J})包含至少的向量K.最近观测的指数X到查询点Y (j,:)

如果SortIndices真正的, 然后knnsearch.按距离升序排列指标。

查询点的最近邻居的距离,以数字矩阵或数字向量单元格数组的形式返回。

  • 如果您未指定IncludeTies错误的默认情况下),然后D.是一个m——- - - - - -K.数字矩阵,m行数是多少yK.为搜索的最近邻居数。D (j,我)是距离X (Idx (j,我),:)Y (j,:)关于距离度量。

  • 如果您指定“IncludeTies”,真的, 然后D.是一个m——- - - - - -1单元阵列使细胞jd {j})包含至少的向量K.最近观测的距离X到查询点Y (j,:)

如果SortIndices真正的, 然后knnsearch.按升序排列距离。

提示

  • 一个固定的正整数K.knnsearch.找到K.要点X这是每个点最近的y.找到所有要点X在每个点的固定距离内y,使用rangesearch

  • knnsearch.不保存搜索对象。要创建搜索对象,请使用createns

算法

有关特定搜索算法的信息,请参见k近邻搜索和半径搜索

选择功能

如果你设置knnsearch.函数的'nsmethod'名称值对参数适当的值(“详尽”用于详尽的搜索算法或'kdtree'对于一个K.d-树算法),然后将搜索结果等价于使用knnsearch.对象的功能。不像knnsearch.函数,knnsearch.对象功能需要一个令人疲惫的或者一个KDTreeSearcher模型对象。

参考

[1]弗里德曼,J.H.,J. Bentely和R. A. Finkel。“一种在对数预期时间中找到最佳匹配的算法。”数学软件上的ACM交易3,没有。3(1977): 209 - 226。

扩展功能

介绍了R2010a