【Python机器学习】PCA——特征提取(2)

news2024/11/28 20:44:55

上一篇写过了用单一最近邻分类器训练后的精度只有0.22.

现在用PCA。想要度量人脸的相似度,计算原始像素空间中的距离是一种相当糟糕的方法。用像素表示来比较两张图像时,我们比较的是每个像素的灰度值与另一张图像对应位置的像素灰度值。这种表示与人们对人脸图像的解释方式有很大不同,使用这种原始表示很难获取到面部特征。例如,如果使用像素距离,那么将人脸向右移动一个像素将发生巨大变化,得到一个完全不同的表示。我们希望,使用沿着主成分方向的距离可以提高精度。这里我们启用PCA的白化选项,它将主成分缩放到相同的尺度提高精度。变换后的结果与使用StandardScaler相同。白化不仅对应旋转数据,还对应于缩放数据时期形状是圆形而不是椭圆形:

mglearn.plots.plot_pca_whitening()
plt.show()

我们对训练数据拟合PCA对象,并提取前100个主成分,然后对训练数据和测试数据进行变换。

pca=PCA(n_components=100,whiten=True,random_state=0).fit(X_train)
X_train_pca=pca.transform(X_train)
X_test_pca=pca.transform(X_test)

print('X_train_pca.shape:{}'.format(X_train_pca.shape))

新数据有100个特征,即前100个主成分。现在,对新表示使用单一最近邻分类器来将新图像分类:

knn=KNeighborsClassifier(n_neighbors=1)
knn.fit(X_train_pca,y_train)
print('test set accuracy:{:.2f}'.format(knn.score(X_test_pca,y_test)))

可以看到精度有显著提升。这证实了我们的直觉,即主成分可能提供了一种更好的数据表示。

对于图像数据,我们还很容易地将找到的主成分可视化。成分对应于输入空间里的方向。这里的输入空间是87*65像素的灰度像素,所以这个空间中的方向也是87*65像素的灰度图像。

先看一下前几个主成分:


print('pca.components_.shape:{}'.format(pca.components_.shape))


fig,axes=plt.subplots(3,5,figsize=(15,12),
                      subplot_kw={'xticks':(),'yticks':()})
for i,(components,ax) in enumerate(zip(pca.components_,axes.ravel())):
    ax.imshow(components.reshape(image_shape),cmap='viridis')
    ax.set_title('{}.components'.format((i+1)))
plt.show()

虽然我们肯定无法理解这些成分的所有内容,但可以猜测一些主成分捕捉到了人脸图像的哪些方面。第一个主成分似乎主要编码的是人脸与背景 的对比,第二个主成分编码的是人脸左半部分和右半部分的明暗程度差异,如此等等。虽然这种表示比原始像素值的语义稍强,但它仍与人们感知人脸的方式相去甚远。由于PCA模型是基于像素的,因此人脸的相对位置和明暗程度都对两张图像在像素表示中的相似程度有很大影响。但人脸的相对位置和明暗程度可能并不是人们首先感知的内容。在要求人们评价人脸的相似度时,它们更可能会使用年龄、性别、表情、发型等属性,而这些属性很难从像素强度中推断出来。重要的是要记住,算法对数据(特别是视觉数据)的解释通常与人类的解释方式不同。

回到PCA的具体案例。我们对PCA变换的介绍是:先旋转数据,然后删除方差较小的成分。另一种有用的解释是:尝试找到一些数字(PCA旋转后的新特征值),使我们可以将测试点表示为主成分的加权求和。

我们还可以用另一种方法来理解PCA模型,就是仅使用一些成分对原始数据进行重建。我们可以对人脸做类似的变换,将数据酱味道只包含一些主成分,然后反向旋转到原始空间。回到原始特征空间可以通过inverse_transform方法来实现。

分别利用10、50、100、500个成分对一些人脸进行重建并将其可视化:


mglearn.plots.plot_pca_faces(X_train,X_test,image_shape)
plt.show()

从结果上可以看到,在仅使用10个主成分时,进捕捉到图片的基本特点,比如人脸方向和明暗程度。随着使用的主成分越来越多,图像中也保留了越来越多的细节。如果使用的成分个数与像素个数相同,意味着我们旋转后不会丢弃任何信息,可以完美重建图像。

还可以尝试用PCA的前两个主成分,将数据集中所有人脸在散点图中可视化,其类别在图中给出,这与我们对cancer数据集所做的类似:


mglearn.discrete_scatter(X_train_pca[:,0],X_train_pca[:,1],y_train)
plt.xlabel('first')
plt.ylabel('second')
plt.show()

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

IDEA下项目发送到Gitee

一、首先在Gitee创建一个仓库(什么都不选,这是最简单的方式,否则需要 pull push等一些操作,我嫌麻烦) 二、按图点击(创建存储区,选择你要上传的项目) 三、按图点击后正常文件名会变绿…

信息安全与密码技术概述

1. 信息安全的法律法规 2016年11月7日,中华人民共和国第十二届全国人民代表大会常务委员会第二十四次会议通过《中华人民共和国网络安全法》,自2017年6月1日起施行。 2019年10月26日,中华人民共和国第十三届全国人民代表大会常务委员会第十四…

Ubuntu虚拟机使用纯命令行对根分区进行扩展

Ubuntu虚拟机使用纯命令行对根分区进行扩展 前排提示 因为Ubuntu再安装时,根分区是没有使用LVM进行磁盘管理的,所以如果想扩展根分区,我们不得不使用另外一种暴力的方法。简单来说就是利用fdisk删除原来的根分区再基于原来的起始块号重新建…

PHP超详细安装及应用

目录 所需安装包如下 一、PHP安装 依赖包安装 安装扩展工具(先将PHP所需的软件包全部拖进centos根目录下) 安装libmcrypt 安装mhash 安装mcrypt 安装PHP 二、设置LAMP组件环境(要保证mysql、http都安装完成了) Php.ini的建…

MySQL常用的库操作、表操作、INSERT、DELETE

库操作 查询数据库: show databases; 创建数据库: create database chat; 删除数据库: drop database chat; 选择数据库: use chat; 表操作 查询表: show tables&am…

数据库同步软件PanguSync常见错误解决方法

​​​​​​在部署PanguSync数据库同步软件的过程中,常常会遇见一些错误提示,某些老铁可能会一脸懵逼,本文对一些常见的错误信息进行了总结,并提供了解决方法。 1.")"附近有语法错误 该问题是由于源表未设置主键&…

中国现代书法第一人颜廷利:全球知名哲学家思想家教育家

在人生的旅途中,如果一个人的所有追求仅仅是为了满足自己的需求和欲望,而非出于善意、行善或造福他人,那么无论其遭受了多少苦难,这样的生活是难以赢得他人的同情或怜悯的。这是东方哲学家、科学家颜廷利教授在其著作《升命学说》…

如何借助ChatGPT写文献综述?从文献搜索到综述生成,顶级高效指令值得收藏

欢迎关注EssayBot,为大家带来最酷最有效的智能AI学术科研写作攻略。关于使用ChatGPT等AI工具的相关问题可以添加作者七哥沟通 在学术研究的过程中,文献综述是学术论文的核心组成部分,其主要目的在于对特定问题的先行研究成果进行总结和梳理&a…

往前冲,

最近换了个手机,原因是之前的手机存储空间一直不够,隔一段时间就提醒我删除东西,刚好那天去三诺出差,那边有一个工程师给我推荐了红米手机Turbo3,存储直接干到了1T。 第二天,就下定决心要换手机&#xff0c…

哈希表与哈希扩容

一,哈希表 哈希表简单的理解:在记录的存储位置和它的关键字之间建立一个确定的对应关系f,使每个关键字和结构中一个唯一的存储位置相对应。 哈希表基于数组的,正因为数组创建后难于扩展某些哈希表被基本填满时,性能下…

【SQLAlChemy】怎么进行简单的增删改查,CRUD操作是什么?

CRUD 所有的 CRUD 操作,必须在 session 的前提下进行。 构建 session 对象(实例) 所有和数据库的 ORM 操作都必须通过一个叫做 session 的会话对象来实现。 from sqlalchemy.orm import sessionmaker# 构建 session 对象 # engine 为之前创建的数据库连接引擎 s…

透视亚马逊云科技中国峰会:生成式AI全面提速,加速行业应用落地

导读:亚马逊云科技在中国,生成式AI与行业化战略齐头并进。 “亚马逊云科技致力于成为企业构建和应用生成式AI的首选。” 近日2024亚马逊云科技中国峰会上,亚马逊全球副总裁、亚马逊云科技大中华区总裁储瑞松分享了亚马逊云科技中国业务最新进…

Maven核心功能依赖和构建管理

1.依赖管理和配置 Maven 依赖管理是 Maven 软件中最重要的功能之一。Maven 的依赖管理能够帮助开发人员自动解决软件包依赖问题,使得开发人员能够轻松地将其他开发人员开发的模块或第三方框架集成到自己的应用程序或模块中,避免出现版本冲突和依赖缺失等…

【Python机器学习】NMF——模拟数据

与使用PCA不同,我们需要保证数据是正的,NMF能够对数据进行操作。这说明数据相对于原点(0,0)的位置实际上对NMF很重要。因此,可以将提取出来的非负向量看作是从(0,0)到数据的方向。 举例:NMF在二维玩具数据上的结果: …

SSH反向代理

介绍 SSH反向代理是一种通过SSH协议实现的安全远程访问方式。在这种方式中,客户端通过SSH连接到一台具有公网IP的主机,然后这台主机再将请求转发给内部网络中的目标主机。这样做的好处是可以隐藏内部网络的细节,提高安全性,同时也…

Docker搭建可道云

Docker搭建可道云(存储) 文章目录 Docker搭建可道云(存储)介绍资源列表基础环境一、安装Docker二、配置Docker加速器三、搭建可道云私有云盘3.1、编写Dockerfile3.2、上传资源到指定目录3.3、查看目录下所有资源 四、构建镜像五、…

易于上手的requests

Python中的requests库主要用于发送HTTP请求并获取响应结果。在现代网络编程中,HTTP请求是构建客户端与服务器之间通信的基础。Python作为一种高级编程语言,其丰富的库支持使得它在网络数据处理领域尤为突出。其中,requests库以其简洁、易用的…

C# 绘图及古诗填字

绘图 绘图的结果如下: 绘图部分主要使用了 Bitmap、Graphics 具体的函数是 MakeMap 入参说明 string bg : 背景图 Rectangle rect :绘图区域 int row_count :行数 int col_count :列数 string fn :保存到的文件 …

HTML+CSS+JS 密码灯登录表单

效果演示 实现了一个登录页面,包括一个标题、两个输入框(用户名和密码)、一个登录按钮和一个眼睛图标。点击眼睛图标可以显示或隐藏密码。页面背景有两个圆形的半透明元素,整个页面使用了flex布局,并且在水平和垂直方向上都居中对齐。登录框使用了阴影效果和圆角边框,并且…

Django 表里做删除

先看效果图 点击 删除 按钮之后&#xff0c;就可以下面的效果 操作步骤&#xff1a; 1. 在 urls.py 文件里&#xff0c;添加路劲&#xff1a; urlpatterns [path(asset/<int:aid>/delete/, am_views.asset_delete),]2. 在 views.py 文件里&#xff0c;实现一个新的函…