MATLAB实现KNN算法(MNIST数据集)

基于MOOC人工智能之模式识别的课程完成的第五次作业
MATLAB实现KNN算法(MNIST数据集)
MOOC地址:人工智能之模式识别
k-近邻分类器又称为 KNN 算法(K Nearest Neighbors Algorithm),它是指需要从训练集中找出待识别样本的 k 个最近邻,然后依据这 k 个最近邻分别所属的类别来决定应当把待识别样本划分到哪个类别中。
在这里插入图片描述
k-近邻分类器原理简单,无需对样本集进行回归分析或者概率分布统计,实现起来十分方便。
距离度量、k 值的选择及分类决策规则是 k 近邻算法的三个基本要素。
根据选择的距离度量(如曼哈顿距离或欧氏距离,Minkowski 明可夫斯基),可计算测试样本与训练集中的每个实例点的距离,根据 k 值选择 k 个最近邻点,最后根据分类决策规则将测试实例分类。
KNN.m 程序代码主要实现了数据集读入,KNN 分类器训练,测试及结果输出几个部分。数据集仍使用之前的MNIST数据集。

%knn.m
clc 
clear variables
  
load ('../test_images.mat');
load ('../test_labels.mat');
load ('../train_images.mat');
load ('../train_labels.mat');
% 选取数据容量
train_num = 2000;
test_num = 200;
data_train = mat2vector(train_images(:,:,1:train_num),train_num);% 转换为行向量
data_test = mat2vector(test_images(:,:,1:test_num),test_num);
% 参数说明:knn要求在一个范围内选取近邻样本,这个容量需要手动给出
% 其他参数如距离计算模式,距离权重均为默认,如欧式距离,等权值等。
% 具体结果可以在运行后查看knn_model来详细观察
knn_model = fitcknn(data_train,train_labels1(1:train_num),'NumNeighbors',10);
result = predict(knn_model,data_test);
acc = 0.;
for i = 1:test_num
    if result(i)==test_labels1(i)
        acc = acc+1;
    end
end
fprintf('精确度为:%5.2f%%\n',(acc/test_num)*100);

k 值的选择会对 k 近邻法的结果产生重大影响。在应用中,k 值一般取一个比较小的数值,通常采用交叉验证法来选取最优的 k 值。我们可以看一下 K 值的选择如何影响识别精度。
在这里插入图片描述

  • 2
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 13
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值