机器学习(四)降维之NMF及人脸特征提取

简介: 是在矩阵中所有元素均为非负数约束条件之下的矩阵分解方法。基本思想:给定一个非负矩阵V,NMF能够找到一个非负矩阵W和一个非负矩阵H,使得矩阵W和H的乘积近似等于矩阵V中的值。

一.非负矩阵分解(Non-negative Matrix Factorization ,NMF)

是在矩阵中所有元素均为非负数约束条件之下的矩阵分解方法。

基本思想:给定一个非负矩阵V,NMF能够找到一个非负矩阵W和一个非负矩阵H,使得矩阵W和H的乘积近似等于矩阵V中的值。


image.png


• W矩阵:基础图像矩阵,相当于从原矩阵V中抽取出来的特征

• H矩阵:系数矩阵。

• NMF能够广泛应用于图像分析、文本挖掘和语音处理等领域


image.png


上图摘自NMF作者的论文,左侧为W矩阵,可以看出从原始图像中抽取出

来的特征,中间的是H矩阵。可以发现乘积结果与原结果是很像的。


矩阵分解优化目标:最小化W矩阵H矩阵的乘积和原始矩阵之间的差别,目标函数如下:


image.png


基于KL散度的优化目标,损失函数如下:


image.png


公式推导的参考链接:http://blog.csdn.net/acdreamers/article/details/44663421/


sklearn中非负矩阵分解


在sklearn库中,可以使用sklearn.decomposition.NMF加载NMF算法,主要参数有:

• n_components:用于指定分解后矩阵的单个维度k;

• init:W矩阵和H矩阵的初始化方式,默认为‘nndsvdar’。


二.NMF人脸数据特征提取

目标:已知Olivetti人脸数据共400个,每个数据是64*64大小。由于NMF分解得到的W矩阵相当于从原始矩阵中提取的特征,那么就可以使用NMF对400个人脸数据进行特征提取。


通过设置k的大小,设置提取的特征的数目。在本实验中设置k=6,随后将提取的特征以图像的形式展示出来。

import matplotlib.pyplot as plt
from sklearn import decomposition
#加载PCA算法包
from  sklearn.datasets import fetch_olivetti_faces
#加载人脸数据集
from numpy.random import RandomState
#加载RandomState用于创建随机种子
n_row,n_col = 2,3
#设置图像展示时的排列情况,2行三列
n_components = n_row = n_col
#设置提取的特征的数目
image_shape = (64,64)
#设置人脸数据图片的大小
dataset = fetch_olivetti_faces(shuffle=True,random_state=RandomState(0))
faces = dataset.data#加载数据,并打乱顺序
#设置图像的展示方式
def plot_gallery(title,images,n_col=n_col,n_row=n_row):
    plt.figure(figsize=(2. * n_col,2.26 * n_row))#创建图片,并指定大小
    plt.suptitle(title,size=16)#设置标题及字号大小
    for i,comp in enumerate(images):
        plt.subplot(n_row,n_col,i+1)#选择画制的子图
        vmax = max(comp.max(),-comp.min())
        plt.imshow(comp.reshape(image_shape),cmap=plt.cm.gray,interpolation='nearest',vmin=-vmax,vmax=vmax)#对数值归一化,并以灰度图形式显示
        plt.xticks(())
        plt.yticks(())#去除子图的坐标轴标签
    plt.subplots_adjust(0.01,0.05,0.99,0.93,0.04,0.)
#创建特征提取的对象NMF,使用PCA作为对
estimators=[('Eigenfaces - PCA using randomized SVD',decomposition.PCA(n_components=6,whiten=True)),('Non-negative components - NMF',decomposition.NMF(n_components=6,init='nndsvda',tol=5e-3))]
#NMF和PCA实例,将它们放在一个列表中
#降维后数据点的可视化
for name,estimators in estimators:#分别调用PCA和NMF
    estimators.fit(faces)#调用PCA或NMF提取特征
    components_=estimators.components_#获取提取特征
    plot_gallery(name,components_[:n_components])
    #按照固定格式进行排列
plt.show()#可视化

image.png

相关文章
|
7月前
|
机器学习/深度学习 算法 数据可视化
机器学习第11天:降维
机器学习第11天:降维
|
7月前
|
机器学习/深度学习 人工智能 自然语言处理
【Python机器学习】文本特征提取及文本向量化讲解和实战(图文解释 附源码)
【Python机器学习】文本特征提取及文本向量化讲解和实战(图文解释 附源码)
438 0
|
7月前
|
机器学习/深度学习 算法 数据可视化
Python | 机器学习之PCA降维
Python | 机器学习之PCA降维
85 0
|
6月前
|
机器学习/深度学习 API Python
机器学习特征降维
这篇内容概述了特征降维在机器学习中的重要性,包括三个主要方法:低方差过滤法、PCA(主成分分析)和相关系数法。低方差过滤法通过删除方差低于阈值的特征来减少无关信息;PCA通过正交变换降低数据的维数,保留大部分信息;相关系数法(如皮尔逊和斯皮尔曼相关系数)用于评估特征间的相关性,去除高度相关的特征以简化模型。这些技术有助于提高模型效率和泛化能力。
|
6月前
|
机器学习/深度学习 算法 数据挖掘
【机器学习】小波变换在特征提取中的实践与应用
【机器学习】小波变换在特征提取中的实践与应用
474 0
|
7月前
|
机器学习/深度学习 搜索推荐 数据可视化
机器学习中7种常用的线性降维技术总结
上篇文章中我们主要总结了非线性的降维技术,本文我们来总结一下常见的线性降维技术。
414 6
|
7月前
|
机器学习/深度学习 计算机视觉 Python
【Python 机器学习专栏】图像数据的特征提取与预处理
【4月更文挑战第30天】本文探讨了图像数据的特征提取与预处理在机器学习中的重要性。图像数据具有大容量、信息丰富和冗余性高的特点。特征提取涉及颜色、纹理和形状特征;预处理包括图像增强、去噪和分割。Python的OpenCV和Scikit-image库在处理这些任务时非常有用。常见的特征提取方法有统计、变换和基于模型的方法,而预处理应注意保持图像真实性、适应性调整及验证评估。有效的特征提取和预处理能提升模型性能,Python工具使其更高效。
392 0
|
7月前
|
机器学习/深度学习 自然语言处理 算法
【Python机器学习专栏】文本数据的特征提取与表示
【4月更文挑战第30天】本文探讨了文本特征提取与表示在机器学习和NLP中的重要性。介绍了词袋模型、TF-IDF和n-gram等特征提取方法,以及稀疏向量和词嵌入等表示方式。Python中可利用sklearn和gensim库实现这些技术。有效的特征提取与表示有助于将文本数据转化为可处理的数值形式,推动NLP和机器学习领域的进步。
237 0
|
7月前
|
机器学习/深度学习 算法 Python
【Python机器学习专栏】数据特征选择与降维技术
【4月更文挑战第30天】本文探讨了Python中数据特征选择与降维技术在机器学习和数据分析中的应用。特征选择包括单变量选择、递归特征消除(RFE)、树模型的特征重要性和相关性分析,有助于去除冗余和无关特征。降维技术涵盖PCA、LDA以及非线性方法如KPCA和ISOMAP,用于在低维空间保留信息。这些技术能简化数据、提升模型性能及可解释性。
139 0
|
7月前
|
机器学习/深度学习 存储 算法
机器学习中的10种非线性降维技术对比总结
降维意味着我们在不丢失太多信息的情况下减少数据集中的特征数量,降维算法属于无监督学习的范畴,用未标记的数据训练算法。
240 4

热门文章

最新文章