Matlab-K-近邻法(K-NN)

##K-近邻算法的基本思路

  1. 已知 N 个 已 知 类 别 的 样 本 X N个已知类别的样本X NX
  2. 输入未知类别的样本 x x x
  3. 计算 x 到 x i ∈ X , ( i = 1 , 2 , ⋅ ⋅ ⋅ , N ) 的 距 离 d i ( x ) x到x_i\in{X},(i = 1,2,···,N)的距离d_i(x) xxiX,(i=1,2N)di(x)
  4. 找到 x 的 k 个 最 近 邻 元 x k = x i , i = 1 , 2 , ⋅ ⋅ ⋅ , k x的k个最近邻元x_k = {x_i,i = 1,2,···,k} xkxk=xi,i=1,2k
  5. x k 中 属 于 哪 一 类 的 样 本 最 多 x_k中属于哪一类的样本最多 xk
  6. 最终判断未知样本属于那一类 x x x

##Matlab代码实现

clear all;
close all;
clc;

%X为标记好的样本集,样本为将1至40的数分为2类
%1-20里的10个随机数为一类,21-40里的10个随机数为一类
X = [8,9,17,14,18,12,2,10,16,20,24,34,25,40,31,38,22,21,27,26];
[r,c] = size(X);
%标记好的两类
w1 = [8,9,17,14,18,12,2,10,16,20];
w2 = [24,34,25,40,31,38,22,21,27,26];

%x为要被分类的样本
T = 1:40;%选取类的范围里的随机序列,共40个数
R = randperm(40);%将1至40随机数打乱
x = T(R(1));
disp('随机数x为:');
disp(num2str(x));

%k为邻居数目(k-个近邻)
k = 7;

%计算距离
d = zeros(r,c);
for i = 1:c
    d(i) = abs(X(i)-x);
end

%找出k个最小距离
xk = zeros(1,k);%存储最近邻元
for i = 1:k
    [di ,n] = min(d);%找到最短距离di,以及算在的位置
    xk(i) = X(n);
    d(n) = 40;%为了获得其他的最小值将查询到的最小值赋值为最大值
end

%判断属于的类别
k1 = 0;%属于w1的样本个数
for i = 1:k
    for j = 1:10
        if xk(i) == w1(j)
            k1 = k1+1;
        end
    end
end
k2 = k - k1;%%属于w2的样本个数
if  k2<k1
    disp( '随机数x属于w1类:');
    disp( num2str(w1));
    break;
else
    disp( '随机数x属于w2类:');
    disp( num2str(w2));
    break;
end

##结果图

  • 6
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
A: KNN算法是一种常用的分类算法,通过寻找样本最近的K个邻居,根据多数表决的原则来预测新样本的分类。在机器学习领域中,KNN算法通常被用来处理分类问题,如数字识别等。 以下是使用MATLAB实现KNN算法的示例代码: 1. 加载数据集 ```matlab load iris_dataset.mat X = irisInputs'; Y = irisTargets'; ``` 2. 分离训练集与测试集 ```matlab n = size(X, 1); p = randperm(n); train_size = 100; train_idx = p(1:train_size); test_idx = p(train_size+1:end); X_train = X(train_idx, :); Y_train = Y(train_idx, :); X_test = X(test_idx, :); Y_test = Y(test_idx, :); ``` 3. 计算每个测试样本与训练样本之间的距离 ```matlab K = 5; Dist = zeros(size(X_test, 1), size(X_train, 1)); for i = 1:size(X_test, 1) for j = 1:size(X_train, 1) Dist(i, j) = norm(X_test(i, :) - X_train(j, :)); end end ``` 4. 找到每个测试样本的K个最近邻居 ```matlab [SortedDist, SortedIdx] = sort(Dist, 2); NeighborsIdx = SortedIdx(:, 1:K); ``` 5. 多数表决,预测每个测试样本的分类 ```matlab Y_pred = zeros(size(Y_test)); for i = 1:size(Y_test, 1) nn_indices = NeighborsIdx(i, :); nn_classes = Y_train(nn_indices); Y_pred(i) = mode(nn_classes); end ``` 6. 计算分类准确率 ```matlab accuracy = sum(Y_pred == Y_test) / length(Y_test); ``` 以上是实现KNN算法MATLAB示例代码。当然,KNN算法有很多变种,针对不同问题需要进行不同的调整和优化。有了这个基本框架,可以根据需要自行进行修改和调整。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值