MATLAB——KNN

clear all;
clc;
%标签1
aver1=[8,3];%均值
covar1=[2 0;0 2.5];%二维数据协方差
data1=mvnrnd(aver1,covar1,100);%产生高斯分布数据
for i = 1:100
    for j=1:2
        if data1(i,j)<0
            data1(i,j)=0;
        end
    end
end
label1=ones(100,1); %定义标签数据为1
plot(data1(:,1),data1(:,2),'b+');
hold on;
 
%标签2
aver2=[3,8];
covar2=[2 0;0 2.5];
data2=mvnrnd(aver2,covar2,100);
for i = 1:100
    for j=1:2
        if data2(i,j)<0
            data2(i,j)=0;
        end
    end
end
label2=label1+1;
plot(data2(:,1),data2(:,2),'r^');
hold on;
 
%标签3
aver3=[2,2];
covar3=[2 0;0 2];
data3=mvnrnd(aver3,covar3,100);
for i = 1:100
    for j=1:2
        if data3(i,j)<0
            data3(i,j)=0;
        end
    end
end
label3=label2+1;
plot(data3(:,1),data3(:,2),'co');
 
%组合数据
data = [data1;data2;data3];
label = [label1;label2;label3];

k=11;
for m = 3:1:7 
    for n = 3:1:7
        test_data = [m,n]; %测试数据5*5矩阵
        distance = zeros(300,1);
        %11NN,求测试数据和类中每个数据的距离
        for i = 1:300
            distance(i) = sqrt((test_data(1)-data(i,1)).^2 + (test_data(2)-data(i,2)).^2);
        end
        %选择排序算法,只找出最小的前K个数据,对数据和标号都进行排序
        for i = 1:k
            ma = distance(i);
            for j = i+1:300
                if distance(j)<ma
                    ma = distance(j);
                    label_ma = label(j);
                    tmp = j;
                end
            end
            distance(tmp) = distance(i); %排数据
            distance(i) = ma;
            label(tmp) = label(i);   %排标签
            label(i) = label_ma;
        end
        
        cls1 = 0;%统计1类中距离测试集最近的个数
        cls2 = 0;%统计2类中距离测试集最近的个数
        for i = 1:k
            if label(i) ==1
                cls1= cls1+1;            
            elseif label(i) ==2
                 cls2 = cls2+1;
            else
                cls3 = k-cls1-cls2;
            end 
        end
        if cls1>cls2 && cls1>cls3
            plot(m,n,'kp'); %属于类1
        elseif cls2>cls3 && cls2>cls1
            plot(m,n,'g.'); %属于类2
        elseif cls3>cls1 && cls3>cls2
            plot(m,n,'m*'); %属于类3
        end
    label = [label1;label2;label3];
    end
end

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值