在机器学习中,图片信息转化为数据之后,一般维度都比较高,比如一张28x28大小的图片,展平为特征之后,就是784个特征值。所以在处理图片数据时,一般都少不了PCA这一步骤。以下我们就以Sklearn中一个经典的人脸数据集fetch_lfw_people为例,为大家介绍PCA降维和降维后的特征矩阵可视化。

1、导入并探索数据 

如果下载失败,进入该路径/Users/xxx/scikit_learn_data/lfw_home,删除后重新下载即可。

from sklearn.datasets import fetch_lfw_people

faces = fetch_lfw_people(min_faces_per_person=60)
print(faces.data.shape)  #(1348, 2914) 2914=62x47
print(faces.images.shape)  #(1348, 62, 47)
print(faces.target)
print(faces.target_names)  #人名列表

2、原始数据可视化

import matplotlib.pyplot as plt
fig, ax = plt.subplots(4, 5, subplot_kw={'xticks':[], 'yticks':[]})

for i, ax in enumerate(ax.flat):
    ax.imshow(faces.images[i, :, :], cmap="gray")

plt.show()

3、降维后特征可视化

from sklearn.decomposition import PCA
import matplotlib.pyplot as plt

pca = PCA(100).fit(faces.data)
V = pca.components_
print(V.shape) #(100, 2914)

fig, ax = plt.subplots(4, 5, subplot_kw={'xticks':[], 'yticks':[]}) #不显示坐标轴

for i,ax in enumerate(ax.flat):
    ax.imshow(V[i].reshape(62, 47), cmap='gray')

plt.show()

由图可见,PCA降维后,只保留了光线和人脸五官这类重要信息。

本文为 陈华 原创,欢迎转载,但请注明出处:http://edu.ichenhua.cn/read/276