手写数字识别是经典的机器学习问题,通过识别手写图像来判断数字
因为数字类别是0——9,所以是足够种类的问题
本文以KNN算法为例实现手写数字的识别
关于文章目录的低维手写数字识别load_digits配置文件调用索引,以第0个要素为例:使用KNN预测训练和高维手写数字识别导入数据集reshape数据集的特征低维手写数字识别
sklearn有附带的手写数字数据集,将在datasets.load_digits ) )中调用
load_digits摘要load_digits返回的digits数据集有1797个数据,数据的维度为64
digits是Bunch类型的类字典对象,可以使用索引调用
要调用fromsklearnimportdatasetsdigits=datasets.load _ digits ()索引digits,有五个部分:data)数据其中,各元素是64维向量3358www,其中,各元素是88矩阵images:与各数据对应的标签target:所有类别标签
以第0个要素为例,64维向量
88矩阵大致可以看出数字‘0’的轮廓
可以在plt.imshow ()中可视化images
数据类别标签
模型预测结果:
使用KNN进行训练和预测,分割数据集,使用训练集训练KNN,然后使用测试集测试性能
froms klearn.model _ selectionimporttrain _ test _ splitfromsklearn.neighborsimportkneighborsclassifierx _ train,x__ y _ test=train _ test _ split (digits (数据),digits (target ) ) KNN=kneighborsclassifier (KNN.fit ) ) ) KNN
可见model.score(x_test,y_test )的正确率很高。
高维手写数字识别导入数据集从本地导入到mnist.npy文件中
import numpy as npx_train,x_test,y_train,y _ test=NP.load (数据/Mn ist/Mn ist.npy ',allow_pickle
测试集中的shape :
reshape数据集查看数据的shape,并发现每个数据都是2828的矩阵
因为不能直接运算矩阵,所以需要将矩阵变换为784的向量
# reshape训练集n_samples,n1,N2=x _ train.shapex _ train=x _ train.reshape (n _ samples,n1*n2 ).as
降低特征维度的训练集有60000个数据,这需要很长时间,可以降低维度以减少执行时间
应用PCA主成分分析,降维至64维
#特征降维froms klearn.decompositionimportpcapca=PCA (n _ components=64 ) de com _ x _ train=PCA.fit _ transform ) x
使用降维的训练集样本进行训练
KNN=kneighborsclassifier (KNN.fit ) decom_x_train,y_train ) KNN.score ) decom_x_test,y_test是