PCA算法用于人脸降维Python实现(吴恩达机器学习作业)

题目要求

采用PCA算法对数据进行降维。

步骤

  1. 利用PCA对人脸进行降维,从1024维降到100维:
    (1) 均值归一化。 计算出每一维特征的均值𝜇𝑗 ,令 𝑥𝑗 = 𝑥𝑗 − 𝜇𝑗。如果特征是在不同的数量级上,还需要将其除以标准差。
    (2) 计算协方差矩阵(covariance matrix)𝛴。 ∑ = 1/𝑚 ∑𝑖=1𝑛 𝑋𝑇𝑋,X中每一行是一个样本; m是样本数;X的大小是mn; ∑ 的大小是nn。
    (3) 计算协方差矩阵𝜮的特征向量。 使用SVD分解:∑ = 𝑼𝑺𝑽T,直接使用如下代码:U, sigma, VT=np.linalg.svd(data)
    (4) 计算出主成分。
    (5) 将数据投影到主成分方向。
    𝒛 (𝒊) = 𝑼𝒓𝒆𝒅𝒖𝒄𝒆 𝑻 ∗ 𝒙 (𝒊),注意:此处的 𝒙(𝒊) 是均值归一化后的。
  2. 进行数据恢复,观察仅使用前100维主成分恢复得到的人脸图像。

数据集

链接:ex7faces.mat
提取码:mjy7

PCA

主成分分析用于数据降维。

实验过程

原始的人脸大小32×32=1024维,一行数据是一个人脸, 将数据reshape成32×32,显示人脸图像其中的前100张人脸图:
在这里插入图片描述
显示其单通道的灰度图看看:
在这里插入图片描述
将其降到100维后再次复原,复原图像如下图所示。可以看到即使仅仅保留了100个特征,但是图像的大致信息都保留了下来,尽管变得“模糊”了,但是人脸的主要信息没有丢失,丢失的是图像中的一些很细节的东西,降维后并没有对我们识别人脸产生重大影响,但是数据量却减少了很多,能够大大降低计算开销。
在这里插入图片描述
展示其单通道的灰度图:
在这里插入图片描述

Python实现

import numpy as np
from scipy.io import loadmat
import matplotlib.pyplot 
  • 11
    点赞
  • 72
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值