【机器学习入门】识别手写数字——感知机

系列文章目录

第1章 专家系统
第2章 决策树
第3章 神经元和感知机



数据来源及说明

MNIST数据集是美国国家标准与技术研究院的比较常用的一个手写数字数据集。
而scikit-learn软件包中提供的是加州大学尔湾分校(UCI) 的数据集。
UCI的手写数据集包含1797张 8 * 8 像素灰度图片, 每个图片都是一张手写的数字。

为了使图片能够作为感知机的输入,我们把每张图片展开成长度为64的向量。向量的值表示像素的灰度,通常我们会把数值归一化到 [0,1] 这个区间,防止过大的值给感知机学习权重带来不必要的难度。较大的输入值通常意味着需要较大的权重。同时在训练感知机的过程中,权重的更新量也受到输入大小的影响,过大的输入可能会使权值更新幅度过大,造成模型不稳定。

代码操作

先来预览一下数据集中的图片

import matplotlib.pyplot as plt
from sklearn.datasets import load_digits

# 加载UCI手写数字数据集
digits = load_digits()
for i in range(10):
    # 显示1行10列中的第 i+1 个图
    plt.subplot(1,10,i+1)
    plt.imshow(digits.images[i])
    # 隐藏坐标轴刻度
    plt.axis('off')
plt.show()

在这里插入图片描述
我们将图像的每个像素点作为一个输入维度,因此,分类手写数字这个任务的输入维度比较高。但是每两个数字之间在一些特定区域都有显著的不同之处,在所有像素点构成的高维空间里(对于 UCI数据集来说是64维空间),这些数字其实分布在几乎 线性可分 的不同区域。所以,分类手写数字这个任务恰好落在感知机的能力范围之内。
单个感知机的输出通常可以用来区分两个类别:超过某阈值表明输入样本属于类别A,低于该阈值则表明属于类别B。通常,我们不会采用单一输出来区分更多类别,即使激活函数的输出值是连续的,也通常仅用来表示两种状态,因为输出值通常集中于0或者1附

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值