matplotlib可视化PCA后的重建图像及重建误差

代码

import numpy as np
import matplotlib.pyplot as plt
from sklearn.decomposition import PCA
from sklearn.datasets import fetch_olivetti_faces

# 加载Olivetti人脸数据集
data = fetch_olivetti_faces()
X = data.data
images = data.images

# 设置不同的PCA组件数
components = [10, 50, 100, 150, 200]
errors = []
h, w = images.shape[1:3]

for n_components in components:
    # 应用PCA
    pca = PCA(n_components=n_components)
    X_pca = pca.fit_transform(X)
    X_reconstructed = pca.inverse_transform(X_pca)

    # 计算重建误差
    error = np.mean((X - X_reconstructed) ** 2)
    errors.append(error)

    # 显示重建的示例图像
    example_reconstructed = X_reconstructed[0].reshape((h, w))
    plt.imshow(example_reconstructed, cmap='gray')
    plt.title(f"Reconstructed Image with {n_components} components")
    plt.show()

# 显示误差图表
plt.figure()
plt.plot(components, errors, marker='o')
plt.xlabel('Number of Components')
plt.ylabel('Reconstruction Error')
plt.title('PCA Reconstruction Error vs. Number of Components')
plt.show()

Matplotlib(plt)函数详解

该代码段展示了如何使用Matplotlib(通常缩写为plt)进行数据可视化。以下是对代码中使用的每个plt函数及其参数的详细解释:

1. imshow()

  • 用途:显示图像。
  • 参数
    • 第一个参数:图像数据,在这个例子中是重建后的图像。
    • cmap='gray':颜色映射,‘gray’ 表示灰度图。
    • 其他参数:如 title 设置图像的标题。

2. title()

  • 用途:为图像设置标题。
  • 参数
    • 第一个参数:字符串,表示标题文本。

3. show()

  • 用途:显示之前用imshow()等函数准备的图像或图表。
  • 参数:无。调用时会将之前准备的所有图像或图表呈现出来。

4. figure()

  • 用途:创建一个新的图表窗口。
  • 参数:可选参数,如图表的大小。

5. plot()

  • 用途:绘制线图。
  • 参数
    • 第一个参数:x轴数据。
    • 第二个参数:y轴数据。
    • marker='o':指定数据点的标记样式,‘o’ 表示圆圈。

6. xlabel()ylabel()

  • 用途:设置x轴和y轴的标签。
  • 参数:轴标签的文本。

7. title()

  • 用途:为整个图表设置标题。
  • 参数:标题文本。

通过以上的plt函数,我们可以对PCA的重建效果进行可视化,并观察不同维度下的重建误差变化。

结果

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/216452.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ENVI植被指数阈值法

植被指数阈值法提取纯净像元 首先用ENVI打开无人机遥感影像 1. 假彩色显示 打开数据管理工具,无人机的4波段为红边波段 2. 波段计算 打开band math,输入 float(b1-b2)/(b1b2) 选择对应波段 3. 阈值筛选 阈值按经验值选的0.7,ndvi…

Linux:dockerfile编写搭建mysql练习(10)

搭建了httpyum仓库 Dockerfile 主要文件 基于centos基础镜像 centos.repo yum仓库 db_init.sh mysql初始化脚本 run.sh 启动脚本 vim Dockerfile写入FROM centosMAINTAINER teacher lyRUN mkdir /etc/yum.repos.d/bak ; mv /etc/yu…

一个可用于临床的食管癌远处转移预测模型(shiny APP)

一个可用于临床的食管癌远处转移预测模型(APP) 最近将之前构建的一个预测食管癌远处转移模型制作成了APP(地址见文末),有一些思考,和大家分享如下: 1. 充分的说明 首先,对模型的…

Nacos与Eureka的区别

Nacos的服务实例分为两种l类型: 临时实例:如果实例宕机超过一定时间,会从服务列表剔除,默认的类型。非临时实例:如果实例宕机,不会从服务列表剔除,也可以叫永久实例。 配置一个服务实例为永久…

翻硬币(第四届蓝桥杯省赛C++B组)(java版)

//翻硬币,每次都会改变两个硬币的状态 //因此我们可以从前往后枚举,s1[i] 与 s2[i] 状态不同就改变它的状态 //同时s1[i 1] 与 s2[i 1] 的状态会因此改变 // 所以继续往下枚举s1[i 1] 与 s2[i 1] //因为题目有说必须有解,因此枚举到 n - 1位的时候,两个字符串的…

从印刷机到数据库:自动化如何提高生产力和改善生活

一文了解从自动化到数据库的前世今生。 作者:Kevin Kline 本文来源:https://www.dbta.com/,爱可生开源社区翻译。 本文约 2200 字,预计阅读需要 8 分钟。 自动化的历史 人类长期以来一直梦想着自动化的前景。我们最早的祖先将其想…

【C语言学习疑难杂症】第6期:C语言中如何打印一些特殊字符,比如打印扩展ascii码字符

首先我们来看下ascii表和ascii拓展表: ascii表中的字符只有128个,是从0-127,而拓展ascii表的内容是128-255。拓展表中它们都是一些特殊的字符,如果我们想答应ascii拓展码中的一些字符应该要怎么操作呢? 比如下面的代码: unsigned char a = 176, b = 219;printf("%…

音频/视频、信息和通信技术设备安全标准UL62368-1

UL 62368-1,第 3 版,2019 年 12 月 13 日- UL 音频/视频、信息和通信技术设备安全标准 - 第 1 部分:安全要求 IEC 62368 的这一部分适用于该领域内电气和电子设备的安全音频、视频、信息和通信技术,以及额定电压不超过 600 V 的商…

select选择框里填充图片,下拉选项带图片

遇到一个需求&#xff0c;选择下拉框选取图标&#xff0c;填充到框里 1、效果展示 2、代码 <el-form-item label"工种图标" class"Form_icon Form_label"><el-select ref"select" :value"formLabelAlign.icon" placeholder&…

2023.12.3 关于 Spring 拦截器 和 过滤器

目录 引言 Spring 拦截器实现 实例理解 Spring 过滤器实现 实例理解 拦截器和过滤器的区别 出身不同 触发时机不同 底层实现不同 支持的项目类型不同 使用场景不同 引言 原生 Spring AOP 实现统一拦截有两个难点难点一&#xff1a;定义拦截规则表达式 难点二&#…

双12取消!淘宝年终好价节对商家有何影响?电商直播到底怎么玩差异化?

&#xfeff;据淘宝商家服务大厅显示&#xff0c;今年“双12”活动取消&#xff0c;并更改为平台大型活动“淘宝年终好价节”。淘宝“双12”一直以来都是除了“双11”和“618”之外很重要的电商促销活动&#xff0c;该活动于2012年首次推出&#xff0c;至今已经持续进行了10年。…

数实融合!低代码推动工业数字化转型走“深”向“实”

当下&#xff0c;“数字化、智能化”已经不再是新鲜词。毕竟&#xff0c;在早几年前就已经有企业喊出大举进军数字化的口号&#xff0c;轰轰烈烈的数字化转型运动也持续了很长一段时间&#xff0c;有一些业内人士甚至判断“如今的企业数字化已经走过了成熟期&#xff0c;来到了…

数字与数学基础问题

关卡名 数字与数学基础问题 我会了✔️ 内容 1.数字里统计的处理技巧 ✔️ 2.必须熟练掌握溢的处理方法 ✔️ 3.掌握进制的处理方法 ✔️ 1. 数字统计专题 统计一下特定场景下的符号&#xff0c;或者数字个数等是一类非常常见的问题 。如果按照正常方式强行统计&#xf…

蓝桥杯物联网竞赛_STM32L071_9_按键矩阵扩展模块

原理图&#xff1a; 矩阵按键原理图&#xff1a; 实验板接口原理图&#xff1a; 得到对应图&#xff1a; 扫描按键原理&#xff1a; 按键的COLUMN1、2、3分别制0&#xff0c;每次只允许其中一个为0其他都是1&#xff08;POW1和POW2正常状况为上拉&#xff09;&#xff0c;当有…

S32K116新建工程Debug可以运行,冷启动无法运行问题分析

S32K116使用IAR建立工程后&#xff0c;软件debug可以运行&#xff0c;断电冷启动无法运行。 这种现象基本上都是RAM未初始化导致&#xff0c;由于Debug时&#xff0c;调试器会自动初始化芯片&#xff0c;很多问题都不会暴露处理。 大家可以开一下Startup的汇编文件&#xff0c;…

LInux组管理及拓展

目录 一、Linux组管理 &#xff08;一&#xff09;、组的概述 1.概述 2.作用 &#xff08;二&#xff09;、组操作 1.创建 2.修改 3.删除 4.添加用户 二、用户信息查看 &#xff08;一&#xff09;、id &#xff08;二&#xff09;、finger &#xff08;三&#x…

Go 语言中的函数调用。

更好的观看体验&#xff0c;请点击——函数调用 | YinKais Blog 本文将从函数的调用惯例和参数传递方法两个方面分别介绍函数执行的过程。 1、调用惯例 对于不同的编程语言&#xff0c; 它们在调用函数的时候往往都使用相同的语法&#xff1a; somefunction(arg0, arg1) 虽…

你离高级开发只差这些IntelliJ IDEA Debug使用技巧

目录 引言 IntelliJ IDEA&#xff0c;由JetBrains&#xff08;捷克共和国&#xff09;开发的一款强大的Java集成开发环境&#xff08;IDE&#xff09;&#xff0c;因其丰富的功能、智能的代码辅助以及用户友好的界面设计&#xff0c;在全球范围内广受Java开发者的喜爱&#xf…

VPS服务器”性价比之王”系列:RackNerd

2023 黑五&#xff01;&#xff01;&#xff01;新 Ryzen 系列 洛杉矶dc02机房重新补货&#xff01; 支付方式&#xff1a;支付宝、PayPal、信用卡、数字货币 2023 黑五促销活动&#xff08;限量&#xff09; CPU内存硬盘(SSD)流量带宽价格(续费同价)购买链接1核768 MB15GB…

“数”说新语向未来 | GBASE南大通用2023媒体交流会成功举办

在当前国家信创战略加速实施&#xff0c;及国民经济数字化转型&#xff0c;叠加驱动信息化行业加速发展的大形势下&#xff0c;以“数说新语-GBASE南大通用开放创新再领航”为主题的2023 GBASE南大通用媒体交流日活动在GBASE天津总部举行。来自IT168、ITPUB、韩锋频道、自主可控…