深度学习-灰度平均值算法和支持向量机算法(SVM)进行手写数字识别

137人阅读 评论(0) 收藏 举报
分类:

学习彭亮《深度学习进阶:算法与应用》课程


这两个传统分类器程序只是为了和神经网络算法进行预测的精确度进行对比:深度学习-随机梯度下降算法应用-手写数字识别
官方源码:neural-networks-and-deep-learning

根据灰度平均值进行手写数字识别

#coding=utf-8
# @Author: yangenneng
# @Time: 2018-01-24 13:54
# @Abstract:根据灰度平均值对图片进行识别

from collections import defaultdict
import mnist_loader

def main():
    # 返回数据集
    training_data, validation_data, test_data = mnist_loader.load_data()
    # 算出平均灰度值
    avgs = avg_darknesses(training_data)
    # 验证算对了多少值
    num_correct = sum(int(guess_digit(image, avgs) == digit)
                      for image, digit in zip(test_data[0], test_data[1]))
    print "Baseline classifier using average darkness of image."
    print "%s of %s values correct." % (num_correct, len(test_data[1]))

# 计算训练集的灰度平均值
def avg_darknesses(training_data):
    # 建立字典类型:key为0-9中的一位  value为这张图片对应的平均灰度值
    digit_counts = defaultdict(int)
    darknesses = defaultdict(float)
    for image, digit in zip(training_data[0], training_data[1]):
        digit_counts[digit] += 1
        darknesses[digit] += sum(image)
    avgs = defaultdict(float)
    for digit, n in digit_counts.iteritems():
        avgs[digit] = darknesses[digit] / n
    return avgs

# 输入image图片 和计算好的平均值 返回和这个灰度值最接近的图片来预测这个图片是哪个数字
def guess_digit(image, avgs):
    darkness = sum(image)
    distances = {k: abs(v-darkness) for k, v in avgs.iteritems()}
    return min(distances, key=distances.get)

if __name__ == "__main__":
    main()

这里写图片描述
可见准确率仅为22.25%


支持向量机算法(SVM)进行手写数字识别

#coding=utf-8
# @Author: yangenneng
# @Time: 2018-01-24 14:06
# @Abstract:SVM进行手写数字识别

import mnist_loader
from sklearn import svm

def svm_baseline():
    # 加载数据及
    training_data, validation_data, test_data = mnist_loader.load_data()
    # 分类器
    clf = svm.SVC()
    # training_data[0]:维度   training_data[1]:分类(0-9中的哪个数字)
    clf.fit(training_data[0], training_data[1])
    # 对比正确率
    predictions = [int(a) for a in clf.predict(test_data[0])]
    num_correct = sum(int(a == y) for a, y in zip(predictions, test_data[1]))
    print "Baseline classifier using an SVM."
    print "%s of %s values correct." % (num_correct, len(test_data[1]))

if __name__ == "__main__":
    svm_baseline()

这里写图片描述

SVM进行图片识别的准确率达到了94.35%,已经非常高了。

但因为我们的神经网络算法只设置了两层,且没有对参数进行调优,所以神经网络算法加深层数和调节参数后,准确率会超过SVM。

查看评论

PK:NN/*/SVM:实现手写数字识别(数据集50000张图片)比较3种算法NN、Average_Darkness、SVM各自的准确率—Jason niu

对手写数据集50000张图片实现阿拉伯数字0~9识别,并且对结果进行分析准确率,手写数字数据集下载:http://yann.lecun.com/exdb/mnist/首先,利用图片本身的属性,图片的灰...
  • qq_41185868
  • qq_41185868
  • 2018-01-12 19:24:51
  • 127

SVM手写数字的识别---python

SVM手写数字的识别---python 1、SVM手写数字识别 识别步骤: (1)样本图像的准备。 (2)图像尺寸标准化:将图像大小都标准化为8*8大小。 (3)读取未知样本图像,提...
  • liyuqian199695
  • liyuqian199695
  • 2017-01-08 19:46:43
  • 3028

我的第一个svm程序:手写字识别

之前学过svm相关知识,基本原理不算复杂,今天做了一个手写字识别程序,总算验证了svm的效果。 因为只是验证效果,实现上原则是简单,使用python + libsvm + PIL(python im...
  • jollyjumper
  • jollyjumper
  • 2015-05-03 10:42:05
  • 5531

MLP 之手写数字识别

0. 前言 前面我们利用 LR 模型实现了手写数字识别,但是效果并不好(不到 93% 的正确率)。 LR 模型从本质上来说还只是一个线性的分类器,只不过在线性变化之后加入了非线性单调递增 sigmoi...
  • GarfieldEr007
  • GarfieldEr007
  • 2016-03-30 12:38:34
  • 866

TensorFlow学习笔记(二)MNIST手写数字识别

MNIST是机器学习中的Hello world,前期准备要了解Softmax (multinomial logistic ) regression MNIST的是一个简单的计算机视觉数据集,它包含一系...
  • WuyZhen_CSDN
  • WuyZhen_CSDN
  • 2017-03-22 17:20:30
  • 2149

Keras 浅尝之MNIST手写数字识别

最近关注了一阵Keras,感觉这个东西挺方便的,今天尝试了一下发现确实还挺方便。不但提供了常用的Layers、Normalization、Regularation、Activation等算法,甚至还包...
  • u012556077
  • u012556077
  • 2015-12-20 17:50:06
  • 9662

手写数字识别(二)----SVM 实现Mnist-image 手写数字图像识别

前言前两天利用kNN实现了手写数字的识别,数据不是很多,训练数据1934个,测试数据946个。这两天把Mnist-image的手写数字数据down了下来,利用SVM进行识别一下。Mnist-image...
  • ni_guang2010
  • ni_guang2010
  • 2016-11-07 19:49:37
  • 8270

基于SVM和KNN的手写数字的识别(分类)——小试牛刀篇

数据下载地址:http://download.csdn.net/detail/zhulf0804/9719836 这里采用的是k近邻算法(KNN)实现的手写数字识别。 python实现代码: # -*...
  • zhulf0804
  • zhulf0804
  • 2016-12-23 20:03:16
  • 1737

(二)用 svm 识别手写体数字图片

一、解决问题手写体数字识别二、代码分析1、加载数据from sklearn.datasets import load_digits digits = load_digits() digits.data...
  • qq_21046135
  • qq_21046135
  • 2017-09-20 22:13:54
  • 240

SVM和Knn实现手写数字识别

数据和程序下载地址:手写数字识别 调用SVM库实现数字识别# Standard scientific Python imports import matplotlib.pyplot as plt i...
  • NNNNNNNNNNNNY
  • NNNNNNNNNNNNY
  • 2017-01-06 23:04:10
  • 1578
    个人资料
    专栏达人 持之以恒
    等级:
    访问量: 30万+
    积分: 4331
    排名: 8698
    联系方式

    博文主要参考网上资料,视频笔记,结合个人见解,仅供学习、交流使用,如有侵权,请联系博主删除。


    博客专栏
    最新评论