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.