没有合适的资源?快使用搜索试试~ 我知道了~
首页Python实战:利用sklearn识别手写数字-MNIST与分类算法应用
本篇文章主要介绍了在Python中利用scikit-learn库进行分类算法实践,具体应用到的是MNIST手写数字识别项目。MNIST是一个广泛用于机器学习教程的经典数据集,包含60000张训练图片和10000张测试图片,每张图片都是28x28像素的手写数字。作者使用sklearn中的几种常见分类器,如RandomForestClassifier、KNeighborsClassifier、SVC(支持向量机)和MultinomialNB(多项式朴素贝叶斯),对这个数据集进行训练。 在实际操作中,作者首先通过`input_data.read_data_sets`函数处理MNIST数据集,将其划分为训练集(55000张图片)、验证集(5000张图片)和测试集(10000张图片)。每个图片被转换成一个长度为784的一维数组,便于神经网络处理。图片的像素值范围在0到1之间,表示黑白二值图像,0代表白色背景,1代表黑色前景。 作者还提到,为了让读者更好地理解,他们使用Windows画图软件创建了自己的手写数字图片,这些图片将作为模型识别性能的检验。整个过程中,作者以Jupyter Notebook作为开发和测试环境,并提醒读者关于此环境的安装配置可以在网络上找到大量的资源。 此外,文章强调这是作者的学习实践心得,可能存在错误和不足,鼓励读者提出意见和分享更优的解决方案。作者在撰写过程中参考了许多大神的文章,并对他们表示感谢。这篇文章提供了一个实战性的例子,展示了如何在Python中利用scikit-learn进行手写数字识别,适合初学者或进阶者学习和实践机器学习分类算法。
资源详情
资源推荐
import matplotlib.pyplot as plt
from PIL import Image
import tensorflow as tf
from tensorflow.examples.tutorials.mnist import input_data
%matplotlib inline
#load file data and preprocess
def load_image(fname):
#模式“RGB”转换为模式“L”以后,像素值为[0,255]之间的某个数值。
im = Image.open(fname).convert('L')
image=im.getdata()
#print(type(image),image)
image_array=np.array(image)
#print(type(image_array),image_array)
#print(len(image_array),image_array)
#归一化处理
image_array = [ (255-x)*1.0/255.0 for x in image_array]
#print(type(image_array),image_array)
return image_array
#End of function load_image
#show image
def show_image(img,lable):
plt.figure(figsize=(3,3))
plt.imshow(img, cmap='Greys', interpolation='nearest')
plt.tight_layout()
plt.show()
#End of function show_image
#img data:[100][784],label:[100]
def show_image10x10(img,label):
f=plt.figure()
fig, ax = plt.subplots(
nrows=10,
ncols=10,
sharex=True,
sharey=True, figsize=(8,8))
ax = ax.flatten()
for i in range(100):
ax[i].imshow(img[i].reshape(28,28), cmap='Greys',
interpolation='nearest')
ax[i].set_title(label[i])
ax[i].set_xticks([])
ax[i].set_yticks([])
plt.tight_layout()
plt.show()
#End of function show_image10x10
#load my image
def load_my_image():
fn_format='E:\python\mnist\my_image\{}-{}.png'
my_image=np.zeros((100,784))
my_label=np.array([0]*100)
# print(type(my_image),my_image.shape,my_image)
# print(type(my_label),my_label.shape,my_label)
for num in range(10):
for seq in range(10):
fn=fn_format.format(num,seq)
#print(fn)
my_image[num*10+seq]=load_image(fn)
my_label[num*10+seq]=num
return my_image,my_label
#End of function load_my_image
#load mnist data
def load_mnist(log_info=False):
mnist= input_data.read_data_sets("MNIST_data",one_hot=True)
#mnist 里面包含 Training,Validating,Testing 三个数据集,每个数据
包含 images 和 labels
#images 是[][784]的二维矩阵,labels 是[][10]的二维矩阵,label[][10]
标识为 1 的列就是图片上数值的值(0-9)
x=mnist.train.images
x_=mnist.train.labels
v=mnist.validation.images
v_=mnist.validation.labels
y=mnist.test.images
y_=mnist.test.labels
if log_info:
print("Training data type is :{}, Size is :{}, Shape
is :{}".format(
type(x),len(x),x.shape))
print("Training data Label type is :{}, Size is :{}, Shape
is :{}".format(
type(x_),len(x_),x_.shape))
剩余25页未读,继续阅读
70编程老兵
- 粉丝: 0
- 资源: 2
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 解决Eclipse配置与导入Java工程常见问题
- 真空发生器:工作原理与抽吸性能分析
- 爱立信RBS6201开站流程详解
- 电脑开机声音解析:故障诊断指南
- JAVA实现贪吃蛇游戏
- 模糊神经网络实现与自学习能力探索
- PID型模糊神经网络控制器设计与学习算法
- 模糊神经网络在自适应PID控制器中的应用
- C++实现的学生成绩管理系统设计
- 802.1D STP 实现与优化:二层交换机中的生成树协议
- 解决Windows无法完成SD卡格式化的九种方法
- 软件测试方法:Beta与Alpha测试详解
- 软件测试周期详解:从需求分析到维护测试
- CMMI模型详解:软件企业能力提升的关键
- 移动Web开发框架选择:jQueryMobile、jQTouch、SenchaTouch对比
- Java程序设计试题与复习指南
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功