PCA+KNN用于mnist手写体数据集

本文介绍了PCA作为降维工具,结合KNN算法处理mnist手写体数据集的方法。PCA旨在提取数据的主要特征并减少噪声,而KNN通过计算样本间的距离进行分类。在实践中,作者发现数据量对KNN算法的效果有很大影响,PCA在数据量大时尤为有用。
摘要由CSDN通过智能技术生成

PCA+KNN用于mnist手写体数据集


俗话说(我就是俗话)实践是检验自己实现算法的唯一标准。今天简单实现一下PCA+KNN组合用于mnist分类。理论我就不分析了,网上一群大牛说的头头是道,哈哈,本篇博客附上数据处理代码和算法实现代码,如有雷同概不负责。

PCA+KNN之简单理解

PCA是一个对数据进行降维的算法,降维是提取高维数据的主要特征(特征提取)然后提出数据中的噪声和冗余信息,从而也实现提升数据处理速度的目的。KNN(k-邻近)是通过测量不同样本特征值之间的距离进行分类。它的思路是:如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别。
#代码实现
(闲话不多说直接上代码,大神嘴下留情,代码都是东拼西凑的)

首先数据处理

我先将mnist数据读成csv格式的,文本内容如图所示:第一列是标签,其他的标签对应的图片中各个像素的像素值

然后代码实现

生成该文本的代码有两套:一套为从二进制文件中读取生成的(搬运工搬来的),另一套为从图片数据中去读生成的(原创),用得到的自行选择哈。

//从二进制文件中读取
def convert(imgf, labelf, outf, n):
    f = open(imgf, "rb")
    o = open(outf, "w")
    l = open(labelf, "rb")

    f.read(16)
    l.read(8)
    images = []

    for i in range(100):
        image = [ord(l.read(1))]
        for j in range(28 * 28):
            image.append(ord(f.read(1)))
        images.append(image)

    for image in images:
        o.write(",".join(str(pix) for pix in image) + "\n")
    f.close()
    o.close()
    l.close()


convert("/home/qyny/PycharmProjects/MobileNetv2/MNIST_data1111/train-images-idx3-ubyte", "/home/qyny/PycharmProjects/MobileNetv2/MNIST_data1111/train-labels-idx1-ubyte",
        "mnist_train.csv", 60000)
convert("/home/qyny/PycharmProjects/MobileNetv2/MNIST_data1111/t10k-images-idx3-ubyte", "/home/qyny/PycharmProjects/MobileNetv2/MNIST_data1111/t10k-labels-idx1-ubyte",
        
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值