别催~ 在加载了 . . .

PCA


PCA

Question

In this part of the exercise, you will run PCA on face images to see how it can be used in practice for dimension reduction.

理论基础

PCA是利用矩阵向量的数学知识对目标数据进行降维的操作。比如以汽车为单位进行机器学习,车长,车高往往有较大变化,但车宽变化较小。我们就可以将原来多个轴映射到一条新轴上,实现对数据向量个数的削减。PCA在许多年前能广泛运用于机器学习算法的加速,那时计算机能容纳的数据量有限,运算速度也相对较慢,利用PCA对数据降维可以很好地实现机器学习。但随着时代的发展,现在已经不需要用PCA就能实现对数据的加工处理,加上PCA反而会导致数据一定程度上的损失。现阶段,PCA虽然已不能在学习算法中举足轻重,但我们依然可以利用PCA将数据可视化。因为绘制高维图像是不可能的,利用PCA将数据维度降低到立体空间或者平面,是一种很好的可视化操作。这里通过对图片数据进行PCA降维,来直观展现降维对于数据整体的影响。

数据读取处理

1
2
3
import numpy as np
import scipy.io as sio
import matplotlib.pyplot as plt
1
2
3
4
mat=sio.loadmat('PCA.mat')
X=mat['X']
X.shape
(5000, 1024)
1
2
3
4
5
6
7
def plot_100_image(X):
fig,axs=plt.subplots(ncols=10,nrows=10,figsize=(10,10))
for c in range(10):
for r in range(10):
axs[c,r].imshow(X[10*c+r].reshape(32,32).T,cmap='Greys_r')
axs[c,r].set_xticks([])
axs[c,r].set_yticks([])
1
plot_100_image(X)

png

数据降维操作

1
2
3
4
5
6
7
8
9
10
11
means=np.mean(X,axis=0)
X_demean=X-means
C=X_demean.T@X_demean
U,S,V=np.linalg.svd(C)

U1=U[:,:36]
X_reduction=X_demean@U1
X_reduction.shape
(5000, 36)

X_recover=X_reduction@U1.T+means

画图

1
plot_100_image(X_recover),plot_100_image(X)

可以看见,经过PCA降维处理,人脸图像变得模糊,丢失了许多细节,各图片的五官失去了一定的独特性。但是,人脸的大致轮廓得以保留。

png

png

Site

代码(Jupyter)和所用数据:https://github.com/codeYu233/Study/tree/main/PCA

Note

该题与数据集均来源于Coursera上斯坦福大学的吴恩达老师机器学习的习题作业,学习交流用,如有不妥,立马删除


文章作者: codeYu233
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 codeYu233 !
评论
  目录