将w的每一行想成一个样本,则第一行是最重要的样本。。第二行次重要。。(Wk特征engen face)
CODE
我们使用lfw_people数据集
#人脸识别与特征脸
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import fetch_lfw_people
这个数据集很大有200多m直接用fetch命令下载却失败了,手动下载数据
链接:https://pan.baidu.com/s/11ebeCTH7E24XAgYVL7y_-A
提取码:3gut
复制这段内容后打开百度网盘手机App,操作更方便哦
放在这个目录下面,解压(job本来没有,重新启动一下jupyter运行一下就ok了)
也是一个字典结构
faces.keys()
dict_keys(['data', 'images', 'target', 'target_names', 'DESCR'])
看看data的大小
print(faces.data.shape)
(13233, 2914)
print(faces.images.shape)
62*47 = 2914
(13233, 62, 47)
打乱索引
random_indexs = np.random.permutation(len(faces.data))
X = faces.data[random_indexs]
example_faces = X[:36,:]
print(example_faces.shape)
(36,2914)
绘制36幅图片
#cmap 改变绘制风格,cmaps['Sequential'] = [
# 'Greys', 'Purples', 'Blues', 'Greens', 'Oranges', 'Reds',
# 'YlOrBr', 'YlOrRd', 'OrRd', 'PuRd', 'RdPu', 'BuPu',
# 'GnBu', 'PuBu', 'YlGnBu', 'PuBuGn', 'BuGn', 'YlGn']
def plot_faces(faces):
fig,axes = plt.subplots(6,6,figsize = (10,10),
subplot_kw = {'xticks':[],'yticks':[]},
gridspec_kw =dict(hspace = 0.1,wspace = 0.1))
for i ,ax in enumerate(axes.flat):
ax.imshow(faces[i].reshape(62,47),
cmap='bone')
plot_faces(example_faces)
特征脸
使用随机方式求PCA,数据量较大
#特征脸
from sklearn.decomposition import PCA
pca = PCA(svd_solver='randomized')#使用随机的方式求pca,数据较大
%time pca.fit(X)
Wall time: 32.3 s
特征脸矩阵大小
print(pca.components_.shape)
(2914, 2914)
还可以绘制36-73
绘制特征脸
plot_faces(pca.components_[:36,:])#绘制特征脸,第一张就很简单只有轮廓,越往后细节越多