首页 > 编程语言 >【Python机器学习】NMF——将NMF应用于人脸图像

【Python机器学习】NMF——将NMF应用于人脸图像

时间:2024-06-23 14:01:35浏览次数:21  
标签:nmf plt people Python NMF shape train 人脸

将NMF应用于之前用过的Wild数据集中的Labeled Faces。NMF的主要参数是我们想要提取的分量个数。通常来说,这个数字要小于输入特征的个数(否则的话,将每个像素作为单独的分量就可以对数据进行解释)。

首先,观察分类个数如何影响NMF重建数据的好坏:

import mglearn.plots
import numpy as np
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.datasets import fetch_lfw_people



people=fetch_lfw_people(data_home = "C:\\Users\\86185\\Downloads\\",min_faces_per_person=20,resize=.7)
image_shape=people.images[0].shape
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_train,X_test,y_train,y_test=train_test_split(X_people,y_people,stratify=y_people,random_state=0)

mglearn.plots.plot_nmf_faces(X_train,X_test,image_shape)

plt.show()

反向变换的数据质量与使用PCA时类似,但要稍差一些。这是符合预期的,因为PCA找到的是重建的最佳方向。NMF通常并不用于对数据进行重建或编码,而是用于在数据中寻找有趣的模式。

尝试仅提取一部分分量,初步观察一下数据:


from sklearn.decomposition import NMF


nmf=NMF(n_components=15,random_state=0)
nmf.fit(X_train)
X_train_nmf=nmf.transform(X_train)
X_test_nmf=nmf.transform(X_test)

fig,axes=plt.subplots(3,5,figsize=(15,12),subplot_kw={'xticks':(),'yticks':()})

for i,(component,ax) in enumerate(zip(nmf.components_,axes.ravel())):
    ax.imshow(component.reshape(image_shape))
    ax.set_title('{}.component'.format(i))
plt.show()

这些分量都是正的,因此比PCA分量更像人脸模型。例如,上图分量9显示了稍微向右转动的人脸,分量12显示了稍微向左的人脸。

再来看一下一些分量特别大的图像:


compn=9
inds=np.argsort(X_train_nmf[:,compn])[::-1]
fig,axes=plt.subplots(2,5,figsize=(15,8),subplot_kw={'xticks':(),'yticks':()})
for i,(ind,ax) in enumerate(zip(inds,axes.ravel())):
    ax.imshow(X_train[ind].reshape(image_shape))
plt.show()


compn=12
inds=np.argsort(X_train_nmf[:,compn])[::-1]
fig,axes=plt.subplots(2,5,figsize=(15,8),subplot_kw={'xticks':(),'yticks':()})
for i,(ind,ax) in enumerate(zip(inds,axes.ravel())):
    ax.imshow(X_train[ind].reshape(image_shape))
plt.show()

正如所料,分量9系数较大的都是向右看的人脸,分量12系数较大的人脸都是向左看。提取这样的模式最适合与具有叠加结构的数据,包括音频,基因表达和文本数据。

标签:nmf,plt,people,Python,NMF,shape,train,人脸
From: https://blog.csdn.net/weixin_39407597/article/details/139897446

相关文章

  • python基本语法
              ......
  • 《Python编程:从入门到实践》
    书籍介绍 hi,我是神虚本书是一本针对所有层次的Python读者而作的Python入门书。全书分两部分:第一部分介绍用Python编程所必须了解的基本概念,包括matplotlib、NumPy和Pygal等强大的Python库和工具介绍,以及列表、字典、if语句、类、文件与异常、代码测试等内容;第二部......
  • python---OpenCv(二),背景分离方法较有意思
    目录边界矩形旋转矩形(最小外接矩形):计算轮廓找4个点的坐标把浮点型转为Int画轮廓边界矩形--(最大外接矩形)转灰度找轮廓找顶点画矩形显示背景分离方法(这个很好玩,可以识别在动的物体)边界矩形有两种类型的边界矩形:旋转矩形(最小外接矩形):是用最小面积绘制......
  • 大学生毕设神器 | 二手房房源分析 二手房房源爬虫 基于Python的二手房可视化分析 基于
    ......
  • python---四则运算
    1.四则运算编写一个Python程序,生成“加减乘除”四则运算的练习,并能判断结果是否正确。程序可以选择进行哪种运算,根据输入的数据判断运算结果是否正确,最后给出正确性统计。代码:importrandomright=0count=0print("输入1为加法")print("输入2为减法")print("输入3为乘法"......
  • python---学生信息表
    学生信息表利用字典和列表完成学生信息表的创建以及学生信息的录入,假定学生信息表的结构如下表所示,请编写程序完成学生信息的录入和通过学号查看。学号1001 1002 1003 1004姓名张三李四王五陈六班级计算机计算机计算机计算机大学物理95 90 85 96高等数学96677......
  • python测试工程师 之 python基础大全【13万字总结】
    python基础大全【13万字】Day011、Python概述2、Python解释器和pycharmIDE工具3、Python中的注释4、变量5、标识符的命名规范★6、变量的使用7、Python中的数据类型★8、Python中的bug和调试9、字符串的格式化及输出★10、转译字符day021、转译字符2、f-string★3、......
  • 基于Python的人口大数据平台的设计与实现【源码】
    一、引言人口大数据平台旨在整合、分析和可视化人口相关的海量数据,为政府决策、城市规划、商业策略等提供科学依据。该平台利用Python的强大数据处理能力,结合现代数据科学工具,实现高效的数据挖掘和洞察提取,助力社会各界更好地理解人口动态及其影响因素。二、技术栈与框架数......
  • 【昆虫识别系统】图像识别Python+卷积神经网络算法+人工智能+深度学习+机器学习+Tenso
    一、介绍昆虫识别系统,使用Python作为主要开发语言。通过TensorFlow搭建ResNet50卷积神经网络算法(CNN)模型。通过对10种常见的昆虫图片数据集('蜜蜂','甲虫','蝴蝶','蝉','蜻蜓','蚱蜢','蛾','蝎子','蜗牛','蜘蛛')进行训练,得到一个识别精度较......
  • Python vs MATLAB: 易于学习和代码可理解性的对比
    PythonvsMATLABPythonvsMATLAB:易于学习和代码可理解性**Python的易用性与代码理解****MATLAB的易用性与代码理解****哪个更易上手?****结论**PythonvsMATLAB:易于学习和代码可理解性在科学计算、工程模拟和数据分析领域,Python和MATLAB是两种广泛使用的编程......