Sklearn图像分类(基于MNIST数据集)

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就能够看到本次的数据集了,下载网址如下:

Digit Recognizer | Kaggle

下载之后,我们开始编写主要的实现代码:

首先读入数据,然会对其进行显示:

import pandas as pd
test_frame = pd.read_csv(test_path)
train_frame = pd.read_csv(train_path)

Sklearn图像分类(基于MNIST数据集)_第1张图片

  之后切分样本和标签,如上数据所示,其中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图像分类(基于MNIST数据集)_第2张图片

 使用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)

查看训练的准确率:

Sklearn图像分类(基于MNIST数据集)_第3张图片

 

 

你可能感兴趣的:(机器学习,sklearn,分类,机器学习)