把W矩阵中的每一行看作一个方向,第一行代表最重要的方向,第二行代表次重要的方向,依次类推
也可以说:
将W矩阵中的每一行看作一个样本,第一行所代表的样本是最重要的样本,最能反应原X矩阵样本特征的样本。第二行所代表的样本是次重要的样本,依次类推。
X中的每一行都是一张人脸,W中的每一行也可以认为是一张脸,称为特征脸。每一个特征脸都是一个主成分,相当于表达了原样本数据的特征。(特征这个词与矩阵中的特征值这个词相对应)
取数据
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import fetch_lfw_people
faces = fetch_lfw_people()
random_indexes = np.random.permutation(len(faces.data))
X = faces.data[random_indexes]
查看图像:
def plot_faces(faces):
#fig, axes = plt.subplots(6, 6, figsize=(10, 10), subplot_kw={'xticks':[], 'yticks':[]},girdspec_kw=dict(hspace=0.1, wspace=0.1))
fig, axes = plt.subplots(10, 10, figsize=(10, 10), subplot_kw={'xticks':[], 'yticks':[]})
for i,ax in enumerate(axes.flat):
ax.imshow(data[i].reshape(62, 47), cmap='bone')
plt.show()
plot_faces(example_faces)
特征脸
from sklearn.decomposition import PCA
pca = PCA(svd_solver="randomized") #因为数据样本比较大,用随机的方式会快一些
%timeit pca.fit(X)
plot_faces(pca.components_[:36, :])
其它关于样本库
faces2 = fetch_lfw_people(min_faces_per_person=60) # 取一个人至少有60张照片的样本