knn.m

来自「一个很简单的练习使用KNN分类的代码,学习使用.将K分类写成了函数,方便使用」· M 代码 · 共 55 行

M
55
字号
%KNN classifiers, 
%training is training set, testing is test set, 
%D is the  distance, D=1 is mandistance; D=2 is 欧氏距离 D=3是 infinite norm
% K is the number of selected neighbors
function label=KNN(training,testing,D,K)
[row, column]=size(training);
[row1, column1]=size(testing);
%计算测试集与训练集的距离
distance=[];
if D==1
   for i=1:row1
        for j=1:row
            temp=[training(j,[1:(column-1)]);testing(i,:)];
            d=mandist(temp);
            distance(i,j)=d(1,2);
        end
    end
end
if D==2   
   for i=1:row1
        for j=1:row
            temp=[training(j,[1:(column-1)]);testing(i,:)]';
            d=dist(temp);
            distance(i,j)=d(1,2);
        end
    end
end
if D==3
    for i=1:row1
        for j=1:row
            temp=[training(j,[1:(column-1)]);testing(i,:)];
            d=max(abs(temp(1,:)-temp(2,:)));
            distance(i,j)=d;
        end
    end
end
% 寻找k个近邻
label=[];
for i=1:row1
    [a,b]=sort(distance(i,:));
    neighbors=b(1:K)';
    neighbors_D=training(neighbors,column);
    [x,y]=sort(neighbors_D);
    temp=find(diff(x)~=0);        
    nei_d=[x(1);x(temp+1)];
    Num_D=[];
    for j=1:length(nei_d)
        num=length(find(neighbors_D==nei_d(j)));
        Num_D=[Num_D,num];
    end
    [a,b]=max(Num_D);
    label(i)=nei_d(b);
end
        

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?