最近邻(NNC)

最近邻算法的基本思路

  1. 已知 NX
  2. 输入未知类别的样本 x
  3. 计算xxiX,(i=1,2,N)di(x);
  4. 找到最小距离 dm(x)=min{di(x)} ;
  5. 判断 xm 属于哪一类
  6. 确定出未知样本所属的类

Matlab代码实现

clear all;
close all;
clc;

%X为标记好的样本集,样本为将1至100的数分为4类
%1-10里的5个随机数为一类,30-40里的5个随机数为一类,60-70里的5个随机数为一类,90-100里的5个随机数为一类.
%N = 20,总样本数
X = [7,10,1,5,4,36,33,37,35,38,60,68,62,66,64,98,90,96,99,94];
[r,c] = size(X);
%已标记好的四类样本
w1 = [7,10,1,5,4];
w2 = [36,33,37,35,38];
w3 = [60,68,62,66,64]; 
w4 = [98,90,96,99,94];

%x为未知样本
T = [1:10 31:40 61:70 91:100];%选取类的范围里的随机序列,共40个数
R=randperm(40);%将1至40随机数打乱
x =T(R(1));
disp('随机数x为:');
disp(num2str(x));

%计算距离
d = zeros(r,c);
for i = 1:c
    d(i) = X(i)-x;
end
[dmin ,m] = min(abs(d));%显示最小距离,以及所在位置

%判断随机数x属于的类别
if (m <= 5) && (m >= 1)
    disp( '随机数x属于w1类:');
    disp( num2str(w1));
    break;
elseif (m <= 10) && (m >= 6)
    disp( '随机数x属于w2类:');
    disp( num2str(w2));
    break;
elseif (m <= 15) && (m >= 11)
    disp( '随机数x属于w3类:');
    disp( num2str(w3));
    break;
elseif (m <= 20) && (m >= 16)
    disp( '随机数x属于w4类:');
    disp( num2str(w4));
    break;
end

效果图

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值