KNN最近邻算法

<span style="font-size:18px;"><span style="font-size:18px;">%% 清空环境变量
clear all;
clear;
clc;
load('train.mat');
load('testData.mat');
[m,n]=size(TrainData);
[m1,n1]=size(TestData);
answer=zeros(m1,1);
distance=zeros(m,1);
k=3;%k近邻,k最好奇数
for i=1:m1    %总循环
    trainlabels=trainLabel;
    for j=1:m                     %计算测试数据于训练数据间的欧式距离
        def=0;
        for kk=1:n
            def=(TestData(i,kk)-TrainData(j,kk))^2+def;    
        end
        distance(j)=sqrt(def);
    end

    for ii=1:1:k                  %将最小的前k个距离排在最前面
        ma=distance(ii);
        label_ma=trainlabels(ii);
        for j=ii+1:m
            if distance(j)<ma
                ma=distance(j);
                label_ma=trainlabels (j);
                tmp=j;
            end
        end
        distance(tmp)=distance(ii);   %排数据
        distance(ii)=ma;
         trainlabels(tmp)=trainlabels(ii);        %排标号,主要使用标号
         trainlabels(ii)=label_ma;
    end
    for ik=1:40;          %统计一类中距离测试数据最近的个数
        cls(ik)=0;
        mm=find(trainlabels(1:k,:)==ik);
        if mm~=0
            cls(ik)=size(mm,1);
        end
    end
    A=cell(1,40);
    jk=1;
    for ij=1:40
        A{jk}=[cls(ij)];
        jk=jk+1;
    end
    A=cell2mat(A);
    [~,IX]=sort(A,'descend');   %将测试数据的类别归到前k个距离中含同类训练数据个数最多的一类中
    testlabel(i)=IX(1);
    IX(1);
end
aa=find(testlabel==testLabel');  %计算准确率
dd=size(aa,2)/m1
hold on;
plot(testLabel,'o');
plot(testlabel,'r*');
legend('期望输出','预测输出')
grid on;
 </span></span>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值