利用PCA+KNN在MNIST数据集上达到97%准确率

本文介绍了如何使用PCA降维和KNN算法在MNIST手写数字数据集上进行分类。通过PCA将784维特征降至100维,然后用KNN实现超过97%的分类精度。详细步骤包括数据预处理、PCA应用、KNN实现及结果测试。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

写在前面

  1. 本文的工作基于python,利用主成分分析(PCA)和K近邻算法(KNN)在MNIST手写数据集上进行了分类。
  2. 由于skeleton库中的PCA写的很好(好吧,其实是作者很懒),本文的主成分分析(PCA)部分调用了skeleton库中的函数,所以来看PCA具体实现细节的小伙伴可能要失望了。
  3. 经过PCA降维,最终的KNN在100维的特征空间实现了超过97%的分类精度。
  4. 相信看到这篇博客的读者对于PCA和KNN的原理都比较了解了,很多大佬们也讲了很多,所以PCA和KNN的具体原理就不再啰嗦,话不多说,直接上代码。

算法实现

1、引用必要的库文件

import numpy as np
import struct
from sklearn.decomposition import PCA
from keras.datasets import mnist

为了方便,这里我们使用的MNIST数据集来自keras内置的keras.datasets,当然也可以去Yann Lecun的官网下载,只需要在之后的代码中稍加改动。

2、读入数据

我们从keras内置的数据集中读取MNIST数据集,从下面一段代码的运行结果可以看出,我们导入的MNIST数据集共有60000个训练图片和10000个测试图片,每张图片均为28*28的大小。

(train_data_ori, train_label), (test_data_ori, test_label) = mnist.load_data()
print ("mnist data loaded")
print ("original training data shape:",train_data_ori.shape)
print ("original testing data shape:",test_data_ori.shape)

附上这段代码的运行结果:

mnist data loaded
original training data shape: (60000, 28, 28)
original testing data shape: (10000, 28, 28)

显然,这里我们得到的图片是28*28的二维数组,为了方便接下来的操作,我们将每张图片reshape为一维数组:

train_data=train_data_ori.reshape(60000,784)
test_data
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值