计算机视觉(cv)sklearn之分类算法与手写数字识别(代码片段)

author author     2022-12-05     207

关键词:

【计算机视觉(CV)】sklearn之分类算法与手写数字识别


(文章目录)


前言

(一)、任务描述

  • 数据介绍
  • 数据读取与存储形式
  • sklearn分类模型
  • 代码实现与结果

(二)、环境配置

本实践代码运行的环境配置如下:Python版本为3.7,PaddlePaddle版本为2.0.0,操作平台为AI Studio。大部分深度学习项目都要经过以下几个过程:数据准备、模型配置、模型训练、模型评估。

import paddle
import numpy as np
import matplotlib.pyplot as plt
print(paddle.__version__)

# cpu/gpu环境选择,在 paddle.set_device() 输入对应运行设备。
# device = paddle.set_device(gpu)

一、数据集介绍

  • Training set images: train-images-idx3-ubyte.gz (9.9 MB, 解压后 47 MB, 包含 60,000 个样本)
  • Training set labels: train-labels-idx1-ubyte.gz (29 KB, 解压后 60 KB, 包含 60,000 个标签)
  • Test set images: t10k-images-idx3-ubyte.gz (1.6 MB, 解压后 7.8 MB, 包含 10,000 个样本)
  • Test set labels: t10k-labels-idx1-ubyte.gz (5KB, 解压后 10 KB, 包含 10,000 个标签)

二、数据读取与存储形式

!unzip data/data7869/mnist.zip

输出结果如下图1所示:

!gzip -dfq mnist/train-labels-idx1-ubyte.gz
!gzip -dfq mnist/t10k-labels-idx1-ubyte.gz
!gzip -dfq mnist/train-images-idx3-ubyte.gz
!gzip -dfq mnist/t10k-images-idx3-ubyte.gz

(一)、导入相关包

首先我们引入本案例需要的所有模块

import struct,os
import numpy as np
from array import array as pyarray
from numpy import append, array, int8, uint8, zeros
import matplotlib.pyplot as plt

%matplotlib inline 

(二)、参数配置

def load_mnist(image_file, label_file, path="mnist"):
    digits=np.arange(10)

    fname_image = os.path.join(path, image_file)
    fname_label = os.path.join(path, label_file)

    flbl = open(fname_label, rb)
    magic_nr, size = struct.unpack(">II", flbl.read(8))
    lbl = pyarray("b", flbl.read())
    flbl.close()

    fimg = open(fname_image, rb)
    magic_nr, size, rows, cols = struct.unpack(">IIII", fimg.read(16))
    img = pyarray("B", fimg.read())
    fimg.close()

    ind = [ k for k in range(size) if lbl[k] in digits ]
    N = len(ind)

    images = zeros((N, rows*cols), dtype=uint8)
    labels = zeros((N, 1), dtype=int8)
    for i in range(len(ind)):
        images[i] = array(img[ ind[i]*rows*cols : (ind[i]+1)*rows*cols ]).reshape((1, rows*cols))
        labels[i] = lbl[ind[i]]

    return images, labels


train_image, train_label = load_mnist("train-images-idx3-ubyte", "train-labels-idx1-ubyte")
test_image, test_label = load_mnist("t10k-images-idx3-ubyte", "t10k-labels-idx1-ubyte")

(三)、数据展示

import matplotlib.pyplot as plt

def show_image(imgdata,imgtarget,show_column, show_row):
    #注意这里的show_column*show_row==len(imgdata)
    for index,(im,it) in enumerate(list(zip(imgdata,imgtarget))):
        xx = im.reshape(28,28)
        plt.subplots_adjust(left=1, bottom=None, right=3, top=2, wspace=None, hspace=None)
        plt.subplot(show_row, show_column, index+1)
        plt.axis(off)
        plt.imshow(xx , cmap=gray,interpolation=nearest)
        plt.title(label:%i % it)
# 显示训练集前50数字
show_image(train_image[:50], train_label[:50], 10,5)

输出结果如下图2所示:


三、sklearn 分类模型

本文使用的sklearn分类模型有:

  • K-Nearest Neighbor Classification
  • Naive Bayes
  • Decision Tree
  • Random Forest
  • Logistic Regression
  • Support Vector Machine
https://blog.csdn.net/u013909139/article/details/69740089
http://cuijiahua.com/blog/2017/11/ml_8_svm_1.html
http://cuijiahua.com/blog/2017/11/ml_9_svm_2.html

数据归一化

https://blog.csdn.net/program_developer/article/details/78637711

此处采用min-max标准化将数据进行归一化操作。 image = [im/255.0 for im in image]


train_image=[im/255.0 for im in train_image]
test_image=[im/255.0 for im in test_image]

四、sklearn模型分类


(一)、K-Nearest Neighbor Classification

print(len(train_image))
print(len(train_label))

输出结果如下图3所示:

from sklearn.metrics import accuracy_score,classification_report
from sklearn.neighbors import KNeighborsClassifier

knc = KNeighborsClassifier(n_neighbors=10)
knc.fit(train_image,train_label.ravel())

输出结果如下图4所示:

predict = knc.predict(test_image)
print("accuracy_score: %.4lf" % accuracy_score(predict,test_label))

输出结果如下图5所示:

print("Classification report for classifier %s:\\n%s\\n" % (knc, classification_report(test_label, predict)))

输出结果如下图6所示:


(二)、Naive Bayes

from sklearn.naive_bayes import MultinomialNB

mnb = MultinomialNB()
mnb.fit(train_image,train_label)
predict = mnb.predict(test_image)
print("accuracy_score: %.4lf" % accuracy_score(predict,test_label))
print("Classification report for classifier %s:\\n%s\\n" % (mnb, classification_report(test_label, predict)))

输出结果如下图7所示:


(三)、Decision Tree

from sklearn.tree import DecisionTreeClassifier

dtc = DecisionTreeClassifier()
dtc.fit(train_image,train_label)
predict = dtc.predict(test_image)
print("accuracy_score: %.4lf" % accuracy_score(predict,test_label))
print("Classification report for classifier %s:\\n%s\\n" % (dtc, classification_report(test_label, predict)))

输出结果如下图8所示:


(四)、Random Forest

from sklearn.ensemble import RandomForestClassifier

rfc = RandomForestClassifier()
rfc.fit(train_image,train_label)
predict = rfc.predict(test_image)
print("accuracy_score: %.4lf" % accuracy_score(predict,test_label))
print("Classification report for classifier %s:\\n%s\\n" % (rfc, classification_report(test_label, predict)))

(五)、Logistic Regression

from sklearn.linear_model import LogisticRegression

lr = LogisticRegression()
lr.fit(train_image,train_label)
predict = lr.predict(test_image)
print("accuracy_score: %.4lf" % accuracy_score(predict,test_label))
print("Classification report for classifier %s:\\n%s\\n" % (lr, classification_report(test_label, predict)))

输出结果如下图9所示:


(六)、Support Vector Machine

from sklearn.svm import SVC

svc = SVC()
svc.fit(train_image,train_label)
predict = svc.predict(test_image)
print("accuracy_score: %.4lf" % accuracy_score(predict,test_label))
print("Classification report for classifier %s:\\n%s\\n" % (svc, classification_report(test_label, predict)))

各分类模型准确度比较:

<table><thead><tr><th>模型</th><th>准确度</th></tr></thead><tbody><tr><td>K-Nearest Neighbor Classification</td><td>0.9665</td></tr><tr><td>Naive Bayes</td><td>0.8375</td></tr><tr><td>Decision Tree</td><td>0.8758</td></tr><tr><td>Random Forest</td><td>0.9486</td></tr><tr><td>Logistic Regression</td><td>0.9202</td></tr><tr><td>Support Vector Machine</td><td>0.9769</td></tr></tbody></table>

我们可以将预测结果展示出来:

import matplotlib.pyplot as plt

def show_image(imgtestdata, imgtesttarget, show_column, show_row):
    #注意这里的show_column*show_row==len(imgtestdata)
    for index,(im,it) in enumerate(list(zip(imgtestdata, imgtesttarget))):
        xx = im.reshape(28,28)
        plt.subplots_adjust(left=1, bottom=None, right=3, top=4, wspace=None, hspace=None)
        plt.subplot(show_row, show_column, index+1)
        plt.axis(off)
        plt.imshow(xx , cmap=gray,interpolation=nearest)
        plt.title(predict:%i % it)
show_image(test_image[:100], predict, 10, 10)

部分输出结果如下图10所示:


总结

本系列文章内容为根据清华社出版的《自然语言处理实践》所作的相关笔记和感悟,其中代码均为基于百度飞桨开发,若有任何侵权和不妥之处,请私信于我,定积极配合处理,看到必回!!!

最后,引用本次活动的一句话,来作为文章的结语~( ̄▽ ̄~)~:

【**学习的最大理由是想摆脱平庸,早一天就多一份人生的精彩;迟一天就多一天平庸的困扰。**】

计算机视觉(cv)基于高层api实现宝石分类

【计算机视觉(CV)】基于高层API实现宝石分类作者简介:在校大学生一枚,华为云享专家,阿里云专家博主,腾云先锋(TDP)成员,云曦智划项目总负责人,全国高等学校计算机教学与产业实践资源建设专家委员会(TIPCC)志... 查看详情

openmmlab实战营打卡-第二课

目录(二)计算机视觉之图像分类算法基础课程链接:计算机视觉之图像分类算法基础一、图像分类与基础视觉模型 1.超越规则,让机器从数据中学习2.AlexNet的诞生&深度学习时代的开始神经结构搜索NeuralArchite... 查看详情

《计算机视觉和图像处理简介-中英双语版》:基于pytorchsoftmax进行mnist手写数字分类digitclassificationwithsoftmax

文章大纲1.目标与简介DigitClassificationwithSoftmaxSoftmax简介课程内容与目标数据准备Preparation制作数据集Makedataset2.构建Softmax分类器BuildaSoftmaxClassifer定义Softmax分类器、标准函数、优化器,并训练模型使用SoftMax时如何计算交叉熵损失Ho... 查看详情

计算机视觉(cv)基于高层api实现宝石分类(代码片段)

【计算机视觉(CV)】基于高层API实现宝石分类(文章目录)前言(一)、任务描述图像分类是根据图像的语义信息将不同类别图像区分开来,是计算机视觉中重要的基本问题宝石识别属于图像分类中的一个细分类问题实践平台:百度... 查看详情

计算机视觉(cv)基于卷积神经网络实现美食分类(代码片段)

【计算机视觉(CV)】基于卷积神经网络实现美食分类(文章目录)前言任务描述如何根据据图像的视觉内容为图像赋予一个语义类别是图像分类的目标,也是图像检索、图像内容分析和目标识别等问题的基础。本实践旨在通过一... 查看详情

计算机视觉(cv)基于全连接网络实现宝石分类(代码片段)

【计算机视觉(CV)】基于全连接网络实现宝石分类(文章目录)前言(一)、任务描述本次实践是一个多分类任务,需要将照片中的宝石分别进行识别,完成宝石的识别实践平台:百度AI实训平台-AIStudio、PaddlePaddle2.0.0动态图(二)、环... 查看详情

计算机视觉图像算法面经

写在前面今年CV方向算法工程师非常难找,投递CV算法的毕业生越来越多,各个CV岗位(包括研究岗与业务线上的算法工程师岗)对于求职人员的要求也越来越高。这里本文以自己春招实习以及秋招的经历为基础... 查看详情

cv学习资料《卷积神经网络与视觉计算》+《深度学习实践计算机视觉》+《视觉slam十四讲从理论到实践》电子资料代码分析

...图形学真是一家,基础都一样! 如果学习图像识别,计算机视觉,推荐电子书《视觉SLAM十四讲:从理论到实践》,系统介绍了视觉SLAM(同时定位与地图构建)所需的基本知识与核心算法,既包括数学理论基础,如三维空间... 查看详情

Open CV 计算机视觉中的 haar 级联分类器里面有啥?

】OpenCV计算机视觉中的haar级联分类器里面有啥?【英文标题】:What\'sinsideahaarcascadeclassifierinOpenCVcomputervision?OpenCV计算机视觉中的haar级联分类器里面有什么?【发布时间】:2011-05-2719:07:15【问题描述】:我需要将.xmlOpenCVhaar级联... 查看详情

Open CV 计算机视觉中的 haar 级联分类器里面有啥?

】OpenCV计算机视觉中的haar级联分类器里面有啥?【英文标题】:What\'sinsideahaarcascadeclassifierinOpenCVcomputervision?OpenCV计算机视觉中的haar级联分类器里面有什么?【发布时间】:2011-05-2719:07:15【问题描述】:我需要将.xmlOpenCVhaar级联... 查看详情

机器视觉与计算机视觉

      机器视觉(MachineVision,MV)&计算机视觉(ComputerVision,CV) 从学科分类上,二者都被认为是人工智能( ArtificialIntelligence )下属科目.      机器视觉就是用机器代替人 查看详情

计算机视觉目标跟踪的算法分类

摘自百度百科。。。。。。。。。。。。。 (1)基于区域的跟踪算法基于区域的跟踪算法基本思想是:将目标初始所在区域的图像块作为目标模板,将目标模板与候选图像中所有可能的位置进行相关匹配,匹配度最高的地... 查看详情

2021计算机视觉cv算法岗面试问题及其答案总结

【2021计算机视觉】CV算法岗面试问题及其答案总结(二)AnchorFree对比Anchor-Based的算法的主要优点?RoiAlign具体实现及其解决的问题?讲一下Yolo、SSD和Faster-RCNN三种检测算法?如何解决目标检测里类别不均衡的问题?讲一下实例分... 查看详情

计算机视觉中的深度学习2:图片分类(代码片段)

计算机视觉中的深度学习2:图片分类Slides:百度云提取码:gs3n计算机与人眼的区别对于一张灰度图片,计算机能看到的是像素大小的0~255的灰度值;对于RGB图片,则是一张像素大小的3通道矩阵,即800x600x3。计算... 查看详情

cv图像数据预处理详解(代码片段)

【CV】图像数据预处理详解@TOC前言什么是计算机视觉?计算机视觉(ComputerVision)又称为机器视觉(MachineVision),顾名思义就是要让计算机能够去“看”人类眼中的世界并进行理解和描述。什么是图像分类?图像分类是计算机视觉中... 查看详情

浅谈yolo

...n.net/qq_30815237/article/details/91949543【嵌牛导读】当我们谈起计算机视觉时,首先想到的就是图像分类,没错,图像分类是计算机视觉最基本的任务之一,但是在图像分类的基础上,还有更复杂和有意思的任务,如目标检测,物体定... 查看详情

计算机视觉入门(代码片段)

 一、掌握知识  (一)计算机视觉之OpenCV图片读取与展示、图片写入、图片质量控制、像素操作几何变换、图片特效、图像美化、机器学习机器学习:视频分解图片、图片合成视频  (二)计算机视觉之TensorFlow:手写... 查看详情

全球名校课程作业分享系列--斯坦福计算机视觉与深度学习cs231n之特征抽取与图像分类提升(代码片段)

课程作业原地址:CS231nAssignment1作业及整理:@邓妍蕾&&@Molly&&@寒小阳时间:2018年1月。出处:http://blog.csdn.net/han_xiaoyang/article/details/791400840.前言我们已经看到,通过用输入 查看详情