MNIST数据集是一个手写数字数据集,里面具有成百上千的手写字体数据,本次项目的内容就是使用MNIST数据集实现一个简单的图像识别任务。
首先通过如下命令下载本次项目所用到的数据包
#安装numpy
# pip install numpy -i https://pypi.tuna.tsinghua.edu.cn/simple
#安装opencv
# pip install opencv-python -i https://pypi.tuna.tsinghua.edu.cn/simple
#安装opencv
# pip install scikit-learn -i https://pypi.tuna.tsinghua.edu.cn/simple
然后下载数据集,本次下载的数据集是从Kaggle上面下载的,直接访问kaggle网站搜索MNIST就能够看到本次的数据集了,下载网址如下:
下载之后,我们开始编写主要的实现代码:
首先读入数据,然会对其进行显示:
import pandas as pd
test_frame = pd.read_csv(test_path)
train_frame = pd.read_csv(train_path)
之后切分样本和标签,如上数据所示,其中label是作为整个数据的标签,然后pixel0-783是样本数据的数据点:
import matplotlib.pyplot as plt
import numpy as np
train = train_frame.copy()
y = train['label']
X = train.drop(['label'],axis=1)
使用matpyplot显示图像,在csv中我们的样本使用一个一维向量的模式进行标识,但是我们知道图片一般是一个二维矩阵的形式,所以我们需要对他进行reshape操作,respahe成(28x28)的矩阵,然后对他进行显示:
import matplotlib.pyplot as plt
import seaborn as sns
plt.figure(figsize=(15,3))
plt.plot(1,1)
Xc = {i: X.loc[train_frame['label'] == i,:] for i in range(10)}
for i in range(30):
plt.subplot(3,10,i+1)
#转换为矩阵形式
sns.heatmap(np.reshape(np.array(Xc[i%10].iloc[i//10,:]), (28,28)),
xticklabels=False,yticklabels=False,cbar=False,cmap='binary')
使用sklearn封装的分类算法来训练我们的数据:
#导入模型,KNeighborsClassifier(knn),SVC(svcm)
from sklearn.neighbors import KNeighborsClassifier
from sklearn.svm import LinearSVC,SVC
knn = KNeighborsClassifier(n_neighbors =10)
svc = SVC()
linear_svc =LinearSVC()
#3.8
# knn.fit(X,y)
knn.fit(X,y)
svc.fit(X,y)
linear_svc.fit(X,y)
查看训练的准确率: