PCA主成分项目实战:MNIST手写数据集分类

  • PCA处理手写数字集
    • 1 模块加载与数据导入
    • 2 模型创建与应用

手动反爬虫:原博地址 https://blog.csdn.net/lys_828/article/details/122651759

 知识梳理不易,请尊重劳动成果,文章仅发布在CSDN网站上,在其他网站看到该博文均属于未经作者授权的恶意爬取信息

什么是PCA

在多元统计分析中,主成分分析(Principal components analysis,PCA)是一种统计分析、简化数据集的方法。它利用正交变换来对一系列可能相关的变量的观测值进行线性变换,从而投影为一系列线性不相关变量的值,这些不相关变量称为主成分(Principal Components)。具体地,主成分可以看做一个线性方程,其包含一系列线性系数来指示投影方向。

注意PCA针对的是数据处理。在实际中会遇到数据问题:(1)数据过少;(2)数据过多。

数据过少最靠谱的方式就是增加数据量, 而对于数据量过多时,需要有一种方法快速的帮助我们判断数据的价值,PCA就可以帮助我们选择出主要的成分。

PCA处理手写数字集

1 模块加载与数据导入

导入常用模块

from sklearn.model_selection import train_test_split
import pandas as pd

MNIST手写数字数据库的训练集为60,000个示例,测试集为10,000个示例。它是NIST更大集合的子集。这些数字已进行尺寸规格化,并在固定尺寸的图像中居中。

对于想要尝试在真实数据上尝试学习技术和模式识别方法而又不花太多精力进行预处理和格式化的人们来说,这是一个很好的数据库。

数据导入的方式如下。

from sklearn.datasets import fetch_openml
mnist = fetch_openml('mnist_784', version=1, cache=True)
mnist.data.shape

输出结果如下。

一共有70000条数据,每条数据中一共有784个字段。可以数字将字段转化为图片,代码如下。

import matplotlib.pyplot as plt
def display_sample(num):image = mnist.data[num].reshape([28,28])plt.imshow(image, cmap=plt.get_cmap('gray_r'))plt.show()
display_sample(147)

输出结果如下。

2 模型创建与应用

该数据集已经是处理完毕后的结果,可以直接用来建模。首先是正常按照原来的思路进行模型创建与应用,这里采用逻辑回归模型。

(1)划分数据。一共有 7w 个,训练集合 6w ,测试集合 1w,test_size=1/7.0。

train_img, test_img, train_lbl, test_lbl = train_test_split(mnist.data, mnist.target, test_size=1/7.0, random_state=0)
print(train_img.shape)
print(test_img.shape)

输出结果如下。

(2)数据转化。由于算法会使用距离计算,所以如果有数据特别大或特别突出 Ourlier,要么去掉异常数据,要么标准化。

from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
scaler.fit(train_img)
train_img = scaler.transform(train_img)
test_img = scaler.transform(test_img)
train_img[:3]

输出结果如下。

(3)模型创建与评估。采用逻辑回归模型进行建模,为了对比出采用PCA和不采用PCA的模使用到计时函数,代码如下。

from sklearn.linear_model import LogisticRegression
%%time
logisticRegr = LogisticRegression(solver = 'lbfgs')
logisticRegr.fit(train_img, train_lbl)
score = logisticRegr.score(test_img, test_lbl)
print(score)

输出结果如下。此时模型的得分为0.9162,测试机器的运行时长为23.9s。

(4)PCA应用。记住未使用PCA时数据的维度,然后指定保留的特征占比,通过fit后就可以知道减少的字段数量,代码如下。

mnist.data.shape
from sklearn.decomposition import PCA
pca = PCA(0.95)
pca.fit(train_img)
pca.n_components_
train2_img = pca.transform(train_img)
test2_img = pca.transform(test_img)
train2_img.shape
train_img.shape

输出结果如下。 PCA(0.95)是指经过PCA后保留95的特征,通过n_components_可以输出经过处理后当前的数据中保留的成分。对比原来的数据维度可以发现,只减少了5%的特征,但是数据的字段减少了一半以上的数量。

对于训练数据和测试数据一样是要经过转化,直接采用transofm即可,然后拿着处理完毕后的数据进行建模,查看模型得分已经运行时间,代码如下。

%%time
logisticRegr = LogisticRegression(solver = 'lbfgs')
logisticRegr.fit(train2_img, train_lbl)
score = logisticRegr.score(test2_img, test_lbl)
print(score)

输出结果如下。此时模型的得分为0.9201,测试机器的运行时长为12.6s。

再次尝试把特征成分降到0.9,看一下数据字段减少数量,模型得分以及运行时间。

pca2 = PCA(.9)
pca2.fit(train_img)
pca2.n_components_
train3_img = pca2.transform(train_img)
test3_img = pca2.transform(test_img)
%%time
logisticRegr = LogisticRegression(solver = 'lbfgs')
logisticRegr.fit(train3_img, train_lbl)
score = logisticRegr.score(test3_img, test_lbl)
print(score)

输出结果如下。此时数据的字段数量为234,只有原来数据的四分之一左右,而且此时模型的得分在0.9199,与原模型的得分还多,而且模型运行时间要比原模型缩减了一半以上的时间。

(5)多模型结果汇总。可以进一步将各个模型对应的结果构造成为DataFrame数据类型,方便绘图分析。

pd.DataFrame(data = [[1.00, 784, 23.9, .9162],   [.95, 327, 12.6, .9201],     [.9, 234, 10.2, .9199]], columns = ['Variance Retained','Number of Components', 'Time (seconds)','Accuracy'])

输出结果如下。

【机器学习】PCA主成分项目实战:MNIST手写数据集分类相关推荐

  1. 【Keras+计算机视觉+Tensorflow】DCGAN对抗生成网络在MNIST手写数据集上实战(附源码和数据集 超详细)

    需要源码和数据集请点赞关注收藏后评论区留言私信~~~ 一.生成对抗网络的概念 生成对抗网络(GANs,Generative Adversarial Nets),由Ian Goodfellow在2014 ...

  2. 【北京大学】13 TensorFlow1.x的项目实战之手写英文体识别OCR技术

    目录 1 项目介绍 1.1 项目功能 1.2 评估指标 2 数据集介绍 2.1 数据特征 3 数据的预处理 3.1 数据增强 3.2 倾斜矫正 3.3 去横线 3.4 文本区域定位 4 网络结构 5 ...

  3. PyTorch基础与简单应用:构建卷积神经网络实现MNIST手写数字分类

    文章目录 (一) 问题描述 (二) 设计简要描述 (三) 程序清单 (四) 结果分析 (五) 调试报告 (六) 实验小结 (七) 参考资料 (一) 问题描述 构建卷积神经网络实现MNIST手写数字分类 ...

  4. 如何为MNIST手写数字分类开发CNN

    导言 MNIST手写数字分类问题是计算机视觉和深度学习中使用的标准数据集. 虽然数据集得到了有效的解决,但它可以作为学习和实践如何开发,评估和使用卷积深度学习神经网络从头开始进行图像分类的基础.这包括 ...

  5. 独家 | 如何从头开始为MNIST手写数字分类建立卷积神经网络(附代码)

    翻译:张睿毅 校对:吴金笛 本文约9300字,建议阅读20分钟. 本文章逐步介绍了卷积神经网络的建模过程,最终实现了MNIST手写数字分类. MNIST手写数字分类问题是计算机视觉和深度学习中使用的标 ...

  6. 基于PyTorch框架的多层全连接神经网络实现MNIST手写数字分类

    多层全连接神经网络实现MNIST手写数字分类 1 简单的三层全连接神经网络 2 添加激活函数 3 添加批标准化 4 训练网络 5 结论 参考资料 先用PyTorch实现最简单的三层全连接神经网络,然后 ...

  7. 2.2 Mnist手写数据集

    2.2 Mnist手写数据集 全连接网络:网络层的每一个结点都与上一层的所有结点相连. 多隐层全连接神经网络: 代码如下: 1. 导入必要的模块 import numpy as np import p ...

  8. 利用Python对MNIST手写数据集进行数字识别(初学者入门级)

    利用Python对MNIST手写数据集进行数字识别 一.编程环境Jupyter Notebook Jupyter Notebook,之前被称为IPython notebook,是一个交互式的Web应用 ...

  9. python画cpk图_TensorFlow MNIST手写数据集的实现方法

    MNIST数据集介绍 MNIST数据集中包含了各种各样的手写数字图片,数据集的官网是:http://yann.lecun.com/exdb/mnist/index.html,我们可以从这里下载数据集. ...

最新文章

  1. 青龙羊毛——某世界扶持及新脚本
  2. 如何帮助谷歌鉴别内容重复的网页
  3. 中小微企业谋定发展-国情讲坛·周荣江: 破解民营经济融资难
  4. 企业项目开发--企业中的项目架构以及多环境分配(2)
  5. 【leetcode】1001. Grid Illumination
  6. 2020.02.04 14:30
  7. php编写半径为4圆的周长,在C++中编写程序输入半径计算圆的周长和面积,来学习吧...
  8. Java八大排序详解及源码
  9. 报错:非介入式客户端验证规则中的验证类型名称必须唯一。下列验证类型出现重复...
  10. 《SAP从入门到精通》——1.3 SAP R/3系统工作原理
  11. Java读取ID卡卡号源码
  12. Ubuntu搭建CTFd平台实现动态靶机的过程
  13. picturebox显示服务器图片大小,WinForm中实现picturebox自适应图片大小的方法
  14. oracle 导入1t dmp文件,利用FDW进行ORACLE到Postgresql的数据迁移
  15. 【技术分享】TestFlight测试的流程文档
  16. TIO-websoket-showcase 学习笔记
  17. 简单分享六一儿童节怎么做微信营销活动策划方案
  18. 做生鲜水果这行线上销售有什么好的平台推荐?
  19. Ubuntu 16.04 硬盘安装
  20. 计算机主机启动不了系统怎么办,电脑开机进不了系统怎么办?

热门文章

  1. Python+OpenCV判断图像是黑底还是白底
  2. SpringCache报错解决
  3. Android底部小白条的解决方法
  4. Thymeleaf设置固定值属性
  5. 如何在openlayers中使用iconfont或font Awesome字体图标
  6. 数据结构(3)常见的树
  7. Word文档怎样修改纸张的方向?分享方法!word文档如何更改纸张的方向?
  8. c语言ifmn除2余1,C语言编程题及答案 2
  9. C语言入门系列 - 自定义函数
  10. QT QLineEdit焦点和键盘问题