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

news2025/1/13 3:07:20

PCA的一个重要应用是特征提取。特征提取背后的思想是,可以找到一种数据表示,比给定的原始表示更适合于分析。特征提取很有用,它的一个很好的应用实例就是图像。图像由像素组成,通常存储于红绿蓝强度。图像中的对象通常由上千个像素组成,它们只有放在一起才有意义。

下面给出PCA对图像做特征提取的一个简单应用,即处理Wild数据集Labeled Faces(标记人脸)中的人脸图像。这一数据集包含很多互联网上下载下来的名人脸部图像,首先看一下这些图像:


people=fetch_lfw_people(data_home = "C:\\Users\\86185\\Downloads\\",min_faces_per_person=20,resize=.7)
image_shape=people.images[0].shape

fix,axes=plt.subplots(2,5,figsize=(15,8),
                      subplot_kw={'xticks':(),'yticks':()})
for target,image,ax in zip(people.target,people.images,axes.ravel()):
    ax.imshow(image)
    ax.set_title(people.target_names[target])

plt.show()

一共有3023张图像,每张的像素为87*65,分别属于62个不同的人:


print('人脸图片数据集shape:{}'.format(people.images.shape))
print('个数:{}'.format(len(people.target_names)))

但这个数据集有些偏斜,其中包含部分人的大量图像:


counts=np.bincount(people.target)
for i,(count,name) in enumerate(zip(counts,people.target_names)):
    print('{0:25}{1:3}'.format(name,count),end='  ')
    if (i+3)%3==0:
        print()

为了降低数据偏斜,我们对没人选取最多50张图像:


mask=np.zeros(people.target.shape,dtype=np.bool_)
for target in np.unique(people.target):
    mask[np.where(people.target==target)[0][:50]]=1

X_people=people.data[mask]
y_people=people.target[mask]

X_people=X_people/255

人脸识别的一个常见任务就是看某个前所未见的人脸是否属于数据库中的某个已知人物。这在照片收集、社交媒体和安全应用中都有应用。解决这个问题的方法之一就是构建一个分类器,每个人就是一个单独类别。但人脸数据库中通常有许多不同的人,而同一个人的图像很少。这使得大多数分类器的训练都很困难。另外,通常要能够轻松添加新的任务,而不需要重新训练一个模型。

一种简单的解决方法就是使用单一最近邻分类器,寻找与你要分类的人脸最为相似的人脸。这个分类器原则上可以处理每个类别只有一个训练样例的情况。

下面以KNeighborsClassifier举例:


from sklearn.neighbors import KNeighborsClassifier

X_train,X_test,y_train,y_test=train_test_split(X_people,y_people,stratify=y_people,random_state=0)
knn=KNeighborsClassifier(n_neighbors=1)
knn.fit(X_train,y_train)
print('精度:{:.2f}'.format(knn.score(X_test,y_test)))

可以看到得到的精度为0.22,平均4-5次识别才能正确识别一个人。

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

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

相关文章

Python可视化 | 使用matplotlib绘制面积图示例

面积图是数据可视化中的一个有效工具,用于说明时间上的关系和趋势。它们提供了一种全面的、视觉上迷人的方法,通过熟练地将折线图的可读性与填充区域的吸引力相结合来呈现数值数据。 在本文中,我们将学习更多关于在Python中创建面积折线图的…

Polar Web【简单】PHP反序列化初试

Polar Web【简单】PHP反序列化初试 Contents Polar Web【简单】PHP反序列化初试思路EXP手动脚本PythonGo 运行&总结 思路 启动环境,显示下图中的PHP代码,于是展开分析: 首先发现Easy类中有魔术函数 __wakeup() ,实现的是对成员…

时光正好保剑锋的抱治百病与成年人的世界

《时光正好》:保剑锋的“抱治百病”与成年人的世界在繁忙的都市里,每个角落上演着各自的人生戏码。而在这些戏码中,由保剑锋主演的《时光正好》无疑成为了近期引人注目的焦点。这部电视剧以其真实而深刻的剧情,让我们看到了成年人…

【教学嘞-64-01】20240607颜色找茬-0-255随机底色

背景需求 AI对话大师到期了,后续无法使用了,这是我用AI对话大师写的最后一个代码 代码展示 颜色找茬:找出不同颜色的色块 AI对话大师,阿夏 2025年6月7日from PIL import Image, ImageDraw import randompath rC:\Users\jg2yXRZ\…

vite常识性报错解决方案

1.导入路径不能以“.ts”扩展名结束。考虑改为导入“xxx.js” 原因:当你尝试从一个以 .ts 结尾的路径导入文件时,ESLint 可能会报告这个错误,因为它期望导入的是 JavaScript 文件(.js 或 .jsx)而不是 TypeScript 文件&…

毫米波雷达深度学习技术-1.6目标识别2

1.6.4 自动编码器和变体自动编码器 自编码器包括一个编码器神经网络,随后是一个解码器神经网络,其目的是在输出处重建输入数据。自动编码器的设计在网络中施加了一个瓶颈,它鼓励原始输入的压缩表示。通常,自编码器旨在利用数据中的…

cleanmymacx最新破解版百度云免费下载 cleanmymac激活码分享

CleanMyMac X4.15.3 中文破解版是一款 mac 系统清理软件,是一款专业的 Mac 清理、优化和维护工具,可以帮助用户清理系统垃圾、卸载不需要的应用程序、优化系统性能、保护隐私和安全等,让用户的 Mac 始终保持高效、安全和稳定。 CleanMyMac X4…

[经验] 涠洲岛在广西吗 #职场发展#知识分享#媒体

涠洲岛在广西吗 广西涠洲岛,是中国南海上的一颗闪亮明珠,位于广西北部湾沿海,东经108.71度,北纬21.54度,距离北海市区30公里,是中国最大的海岛之一,风景秀丽,气候温和。岛上山青水秀…

【进阶篇-Day2:JAVA包、抽象类、接口、多态】

目录 1、包2、抽象类2.1 抽象类的定义2.2 抽象类的注意事项2.3 abstract关键字的冲突 3、接口3.1 接口的介绍3.2 接口中的成员特点3.2.1 接口中的成员特点3.2.2 类和接口之间的各种关系 3.3 抽象类和接口的对比 4、多态4.1 多态的介绍4.2 多态的前提4.3 多态的成员访问特点4.4 …

Java线程本地变量ThreadLocal

ThreadLocal ThreadLocal有什么用 通常情况下,我们创建的变量是可以被任何一个线程访问并修改的。如果想实现每一个线程都有自己的专属本地变量该如何解决呢? JDK中的ThreadLocal类正是为了解决这样的问题,ThreadLocal类主要解决的就是让每…

SpringBoot+Vue网上购物商城系统(前后端分离)

技术栈 JavaSpringBootMavenMySQLMyBatisVueShiroElement-UI 系统角色对应功能 用户商家管理员 系统功能截图

测试基础11:测试用例设计方法-等价类划分

课程大纲 1、概述 1.1测试用例设计方法意义 穷举测试:每种输入都测一次。最完备,但不现实。 使用设计方法,用最少的数据(成本),实现最大的测试覆盖。 1.2常用设计方法 ①等价类划分 ②边界值分析 ③错误推…

vue3自定义组件并全局导入

自定义组件&#xff1a;幕布 涉及的效果&#xff1a;点击出现幕布并且内容可变动 使用的技术&#xff1a;vue3的slot componentcomponents curtain&#xff08;组件页面&#xff09;&#xff1a; <template><div class"curtain"><slot></s…

在UI界面中实现3d人物展示

简要原理(设置双摄像机): 为需要展示的3D人物单独设置一个摄像机(只设置为渲染人物层级),主要摄像机的方向与人物方向一致,但摄像机需要需要旋转180,设置的角度自行进行微调创建一个Render Texture类型的组件用于存储摄像机渲染的内容UI上设置需要展示的图片区域,图片…

线性表和链表

一&#xff0c;线性结构 1.Array Array文档&#xff1a;可以自行阅读相关文档来了解Array class array.array(typecode[, initializer]) array.append(x)&#xff1a;添加元素到数组末尾 array.count(x)&#xff1a;计算元素出现次数 array.extend(iterable)&#xff1a;将迭代…

ipables防火墙

一、Linux防火墙基础 Linux 的防火墙体系主要工作在网络层&#xff0c;针对 TCP/IP 数据包实施过滤和限制&#xff0c;属于典 型的包过滤防火墙&#xff08;或称为网络层防火墙&#xff09;。Linux 系统的防火墙体系基于内核编码实现&#xff0c; 具有非常稳定的性能和高效率&…

SpringBoot的Mapper文件什么时候需要使用@Param注解

解决&#xff1a;nested exception is org.apache.ibatis.binding.BindingException: Parameter ‘XXX‘ not found 关于加注解&#xff0c;其他博客说的很清楚&#xff01;但是有的人会遇见明明使用的springboot2.x以上版本&#xff0c;仍然提示需要加注解&#xff01;这是为…

SQL Server设置默认Schema (修正运行版)

目录 方法 1&#xff1a;执行 USE 命令 方法 2&#xff1a;执行 ALTER USER 命令 方法 3&#xff1a;在查询中包含Schema 总结 在 SQL Server 中&#xff0c;通过 JDBC 设置会话的默认Schema并不是很直接&#xff0c;但可以使用一些变通方法来实现。以下是一些管理默认Sche…

sub_mch_id 与 sub_appid 不匹配怎么解决

小程序在支付的时候&#xff0c;有时候会碰到&#xff1a;sub_mch_id 与 sub_appid 不匹配的问题。这个问题意味着小程序微信支付时所使用的 sub_mch_id&#xff08;子商户号&#xff09;和 sub_appid&#xff08;小程序的appId&#xff09;不对应。下面就具体介绍如何核对是否…

解决 There is no getter for property named ‘null‘ in ‘class 报错

1. 问题 mybatis-plus在更新删除操作时报错 Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession750ee72a] 2024-06-08 21:03:07 [http-nio-8080-exec-3] ERROR o.a.c.c.C.[.[.[.[dispatcherServlet] - Servlet.service() for servl…