MATLAB knnsearch语法

Idx = knnsearch(X,Y)

Idx = knnsearch(X,Y,Name,Value)

[Idx,D] = knnsearch(___)

说明

Idx = knnsearch(X,Y) 为Y中的每个查询点在X中找到最近的邻居,并在列向量Idx中返回最近的邻居的索引。 Idx与Y具有相同的行数。X为训练点集,Y为目标点集。

Idx = knnsearch(X,Y,Name,Value) 返回具有使用一个或多个名称-值对参数指定的其他选项的Idx。 例如,您可以指定要搜索的最近邻居的数量以及搜索中使用的距离度量。

[Idx,D] = knnsearch(___) 另外,使用前面语法中的任何输入参数返回矩阵D。 D包含Y中每个观测值与X中相应最接近观测值之间的距离。

例子

根据年龄和体重,在医院数据集中找到与Y型患者最相似的患者。

load hospital

X = [hospital.Age hospital.Weight]

Y = [20 162 30 169 40 168 50 170 60 171] % New patients

1

2

3

1

2

3

在X和Y之间执行knnsearch查找最近邻居的索引。

Idx = knnsearch(X,Y)

1

1

在X中找到年龄和体重最接近Y的患者。

X(Idx,:)

ans = 5×2

25 171

25 171

39 164

49 170

50 172

1

2

3

4

5

6

7

8

1

2

3

4

5

6

7

8

使用不同的距离量度查找k最近邻:

首先使用Minkowski距离度量,然后使用Chebychev距离度量,找到X中与Y的每个点最近的10个邻居。

load fisheriris

X = meas(:,3:4) % Measurements of original flowers

Y = [5 1.456 22.75 .75] % New flower data

1

2

3

1

2

3

使用Minkowski和Chebychev距离度量在X和查询点Y之间执行knnsearch。

[mIdx,mD] = knnsearch(X,Y,'K',10,'Distance','minkowski','P',5)

[cIdx,cD] = knnsearch(X,Y,'K',10,'Distance','chebychev')

1

2

1

2

可视化两个最近邻居搜索的结果。 绘制训练数据。 用标记X绘制查询点。使用圆圈表示Minkowski最近的邻居。 使用五角星表示Chebychev最近的邻居。

gscatter(X(:,1),X(:,2),species)

line(Y(:,1),Y(:,2),'Marker','x','Color','k',...

'Markersize',10,'Linewidth',2,'Linestyle','none')

line(X(mIdx,1),X(mIdx,2),'Color',[.5 .5 .5],'Marker','o',...

'Linestyle','none','Markersize',10)

line(X(cIdx,1),X(cIdx,2),'Color',[.5 .5 .5],'Marker','p',...

'Linestyle','none','Markersize',10)

legend('setosa','versicolor','virginica','query point',...

'minkowski','chebychev','Location','best')

1

2

3

4

5

6

7

8

9

1

2

3

4

5

6

7

8

9

输入参数

X — Input data

numeric matrix

Input data, specified as a numeric matrix. Rows of X correspond to observations, and columns correspond to variables.

Y — Query points

numeric matrix

Query points, specified as a numeric matrix. Rows of Y correspond to observations, and columns correspond to variables. Y must have the same number of columns as X.