机器学习一 基于K近邻法算法实现对mnist数据集的分类

原理解析:

K近邻法算法

  1. 原理
  2. K近邻法的含义就是k个最相近的“邻居”。将待测试的数据每个特征和训练样本数据的每个特征进行比较,然后提取k个最邻近的训练样本数据,统计这k个训练样本数据的分类标签,其中出现次数最多的标签所表示的类别就是待测试数据的类别。
  3. 算法:根据给定的距离量度方法(这里我们选择使用欧氏距离)在训练集T中找出与x最相近的k个样本点,并将这k个样本点所表示的集合记为Nk(x)

欧式距离:

  根据如下所示的多数投票的原则确定实例x所属类别y:

  I为指示函数:

③mnist数据集

   MNIST是一个入门级的计算机视觉数据集,它包含各种手写数字图片:它也包含每一张图片对应的标签,告诉我们这个是数字几。

   本次实验中手写数字的图片是28*28的灰度图片,图片中每个像素点的值范围是0-255(黑色是0,白色是255), 图片文件是按照这样格式写的:

魔法值(32位)+图片数量(32位)+图片宽(32位)+图片长(32位)+ 所有图数据

(1) 魔法值: 文件标识,train-images-idx3-ubyte文件的magic值是42000

(2) 所有图数据:单张图数据28*28=784个 uint8, 所以所有图N,就是N*784个uint8

代码分析:

1.首先读取数据。

这里将train.csv分为两组。

一组为0.7*len()的训练集

一组为0.3*len()的测试集

将数据集读取后,转化为矩阵

2.进行训练

①设k=10,通过训练集(0.7*len()),计算欧式距离,得到距离最近的前十个点

②在这一步中

classCount[voteLabel] = classCount.get(voteLabel, 0) + 1#多数法则

实现多数法则,将前十个点label值出现最多的值,作为这个点的label

 

3.进行测试

将根据训练集得到每个图片的最可能的label值与测试集中每个图片的真实label值进行比较,如果相等则,准确个数+1,最终得到准确率

k=10时,可以得到准确率为96.0317%准确率比较高。测试k=7和k=12时,准确率都没有k=10得到的准确率高。

 

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值