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 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降维处理,人脸图像变得模糊,丢失了许多细节,各图片的五官失去了一定的独特性。但是,人脸的大致轮廓得以保留。
Site 代码(Jupyter)和所用数据:https://github.com/codeYu233/Study/tree/main/PCA
Note 该题与数据集均来源于Coursera上斯坦福大学的吴恩达老师机器学习的习题作业,学习交流用,如有不妥,立马删除