关闭

机器学习-实战-入门-MNIST手写数字识别

标签: python机器学习人工智能MNIST手写数字识别
2254人阅读 评论(3) 收藏 举报
分类:
作者:橘子派
声明:版权所有,转载请注明出处,谢谢。


实验环境:
Windows10
Sublime
Anaconda 1.6.0
Python3.6

代码功能包括:
一.ubyte数据集转换成csv形式
#将mnist数据集转换成CSV格式
import struct

def to_csv(name,maxdata):
	lbl_f = open("./data/"+name+"-labels.idx1-ubyte","rb")
	#打开标签数据集
	img_f = open("./data/"+name+"-images.idx3-ubyte","rb")
	#打开图像数据集
	csv_f = open("./data/"+name+",csv","w",encoding="utf-8")
	#写入CSV文件

	mag,lbl_count=struct.unpack(">II",lbl_f.read(8))
	#将字节流转换成python数据类型复制给标签
	mag,img_count=struct.unpack(">II",img_f.read(8))
	#将字节流转换成python数据类型复制给图像
	rows,cols=struct.unpack(">II",img_f.read(8))
	#将字节流转换成python数据类型复制给行列
	pixels=rows*cols
	#计算数据总量

	res=[]
	for idx in range(lbl_count):
		if idx > maxdata:break
		#设置计数器,大于数据个数总量时跳出循环
		label=struct.unpack("B",lbl_f.read(1))[0]
		bdata=img_f.read(pixels)
		sdata=list(map(lambda n:str(n),bdata))
		csv_f.write(str(label)+",")
		#写入标签
		csv_f.write(",".join(sdata)+"\r\n")
		#写入数据(数字)
		if idx < 10:
			s="P2 28 28 255\n"
			s+=" ".join(sdata)
			iname="./data/{0}-{1}-{2}.pgm".format(name,idx,label)
			with open(iname,"w",encoding="utf-8") as f:
				f.write(s)
	csv_f.close()
	#关闭CSV流
	lbl_f.close()
	#关闭标签流
	img_f.close()
	#关闭图像流

to_csv("train",1000)
#转换到train.csv 1000个数据
to_csv("t10k",1000)
#转换到t10k.csv 1000个数据

二.用sklearn的交叉验证处理数据,SVM训练数据预测结果,metrics生成分类报告和准确率
#用sklearn中的SVM来训练模型,预测数据集
from sklearn import cross_validation,svm,metrics

def load_csv(fname):
	labels=[]
	images=[]
	with open(fname,"r") as f:
		for line in f:
			cols=line.split(",")
			if len(cols)<2:continue
			labels.append(int(cols.pop(0)))
			vals=list(map(lambda n: int(n) / 256,cols))
			images.append(vals)
		return {"labels":labels,"images":images}

data=load_csv("./data/train.csv")
test=load_csv("./data/t10k.csv")

clf=svm.SVC()
clf.fit(data["images"],data["labels"])
#训练数据集

predict=clf.predict(test["images"])
#预测测试集

score=metrics.accuracy_score(test["labels"],predict)
#生成测试精度
report=metrics.classification_report(test["labels"],predict)
#生成交叉验证的报告
print(score)
#显示数据精度
print(report)
#显示交叉验证数据集报告

运行结果

三组平均测试精度为0.772

参考文献:
《统计学习方法》
Web scraping and machine learning by python
1
0
查看评论

详解 MNIST 数据集

MNIST 数据集已经是一个被”嚼烂”了的数据集, 很多教程都会对它”下手”, 几乎成为一个 “典范”. 不过有些人可能对它还不是很了解, 下面来介绍一下.MNIST 数据集可在 http://yann.lecun.com/exdb/mnist/ 获取, 它包含了四个部分: Training set...
  • simple_the_best
  • simple_the_best
  • 2017-07-17 20:41
  • 24174

MXNet | 手写字MNIST识别比赛

MNIST手写字图片数据集由Yann LeCun创建,每条数据表示28*28像素的图片。它已经是用于衡量分类器在简单图片作为输入的标准数据集。神经网络是对于图片分类任务来说是强大的模型。这是一个在kaggle长期举办的比赛数据集。 比赛的官网:https://www.kaggle.com/c/dig...
  • xxzhangx
  • xxzhangx
  • 2017-01-25 16:04
  • 927

四种格式的mnist数据集

  • 2017-11-18 22:56
  • 71.83MB
  • 下载

MNIST数据集解析

官网一探 MNIST数据集是一个手写体数据集,简单说就是一堆这样东西 MNIST的官网地址是 MNIST; 通过阅读官网我们可以知道,这个数据集由四部分组成,分别是 ;也就是一个训练图片集,一个训练标签集,一个测试图片集,一个测试标签集;我们可以看出这个其实并不是普通的文本文件或是图片文件,而是一...
  • sysushui
  • sysushui
  • 2016-11-21 10:49
  • 17643

图像转化为手写体mnist格式的数据

mnist就是一种二进制格式,这里采用matlab代码将图像转化 1、首先将图像转化二进制 fp = fopen('train-images-idx3-ubyte', 'rb'); assert(fp ~= -1, ['Could not open '...
  • woyaopojie1990
  • woyaopojie1990
  • 2016-03-07 17:46
  • 2622

Kaggle入门(数字识别为例)

from:http://blog.csdn.net/u012162613/article/details/41929171 这篇文章适合那些刚接触Kaggle、想尽快熟悉Kaggle并且独立完成一个竞赛项目的网友,对于已经在Kaggle上参赛过的网友来说,大可不必耗费时间阅读本文。...
  • hermito
  • hermito
  • 2016-07-08 17:28
  • 2067

MNIST数据库介绍及转换

MNIST数据库介绍及转换!
  • fengbingchun
  • fengbingchun
  • 2015-11-03 09:10
  • 40597

MNIST数据集格式转化

MNIST数据集格式转化
  • u011762313
  • u011762313
  • 2016-01-12 20:38
  • 1999

机器学习实践之手写数字识别 - 数据初识

选择手写数据识别来实践机器学习及数据挖掘的知识。
  • net_wolf_007
  • net_wolf_007
  • 2016-06-14 17:29
  • 1385

初识Kaggle:手写体数字识别

不得不说刚开始看到kaggle上的数据量还是挺大的,至少对于像我这样的小打小闹的是这样的。在网上看到入门kaggle要先做101的热身赛,就选了这个手写体识别这个赛题。刚好想到了前些天看过的机器学习实战上k近邻一章中有个类似的实例,就想着用kNN试试看。 首先遇到的一个问题是文件的读入,训练集和测...
  • firethelife
  • firethelife
  • 2016-04-19 16:15
  • 2327
    个人资料
    • 访问:135724次
    • 积分:2295
    • 等级:
    • 排名:第19260名
    • 原创:90篇
    • 转载:0篇
    • 译文:4篇
    • 评论:135条
    联系方式
    QQ联系方式
    作者日本硕士
    知识长期输入中
    技术长期磨练中
    如有问题或交流
    请QQ联系 649508982
    来者请说明CSDN
    或者加入机器学习交流群
    不定期发送pdf等学习资源
    QQ群号:657119450
    机器学习 QQ群加入
    博客专栏
    最新评论