查找K最近邻居
问题描述:
我需要实现KNN算法来分类数据。 我有一个测试矩阵(200 * 25)和一个火车矩阵(800 * 25)。 我需要找到kNN和它的精度matlab k = 1,3,5。查找K最近邻居
这是到目前为止我的代码,但我不知道:
clc
clear all
close all
train=load('Train.txt');
[rtrain,ctrain]=size(train);
xtrain=zeros(rtrain,ctrain-1);
xtrain=train(:,1:ctrain-1);
test=load('Test.txt');
[rtest,ctest]=size(test);
xtest=zeros(rtest,ctest-1);
xtest=test(:,1:ctest-1);
dist=zeros(rtrain,1);
N = size(rtrain,1);
dists = zeros(N,1);
for idx = 1 : N
for j=1:rtrain
dists(idx) = sqrt(sum((xtest(idx,:) - xtrain(j,:)).^2))
end
end
答
这
xtrain=zeros(rtrain,ctrain-1);
xtrain=train(:,1:ctrain-1);
是多余的。你只需要第二个陈述。
在这里再次:
dist=zeros(rtrain,1);
N = size(rtrain,1);
dists = zeros(N,1);
除了现在你用dist
和dists
。你只是想要第二个任务 - 第一个实际上覆盖了Matlab的dist
函数。
所以,回到k-NN。这
for idx = 1 : N
for j=1:rtrain
dists(idx) = sqrt(sum((xtest(idx,:) - xtrain(j,:)).^2))
end
end
让你与所有训练实例j=1,2,...rtrain
测试实例idx
之间的距离。太棒了,那几乎就是1-NN。现在你所要做的就是找到最小距离并检查班级标签。
要找到最近的邻居的指数,你可以这样做:
[~, neighbour] = min(dists);
min
返回两个值:最低和最小的指数。通过这个代码,你忽略了距离,只取最近邻居的索引。
要扩展此代码的k-NN,请使用sort
而不是min
。它的行为相似。
我很感谢如果k> 1向我解释这个和写代码 –