程序员开发实例大全宝库

网站首页 > 编程文章 正文

PCA(主成分分析)应用于人脸图像(pca主成分分析实现)

zazugpt 2024-08-21 04:27:27 编程文章 15 ℃ 0 评论

PCA对于将许多维度减少为一组较小的维度非常有用,因为人类无法在三维以上对数据进行可视化,所以将多维数据集缩减为二维或三维并绘制图形以便更好地理解数据。

在这里我将解释如何使用PCA从剑桥AT&T实验室获取人脸数据集的特征向量。

首先必须下载数据集:

!wget http://www.cl.cam.ac.uk/Research/DTG/attarchive/pub/data/att_faces.zip -O att_faces.zip

!unzip att_faces.zip

阅读其中一个图像以确保数据已下载:

import numpy as np

from scipy.misc import imread

import matplotlib.pyplot as plt

img = imread(‘s1/1.pgm’)

img = img.astype(np.uint8)

img = img / 255

plt.imshow(img,cmap=’gray’)

阅读所有面并打印10行作为示例,了解如何从Pandas DataFrame中读取它们:

from glob import iglob

faces = pd.DataFrame([])

for path in iglob(‘*/*.pgm’):

img=imread(path)

face = pd.Series(img.flatten(),name=path)

faces = faces.append(face)

fig, axes = plt.subplots(10,10,figsize=(9,9),

subplot_kw={‘xticks’:[], ‘yticks’:[]},

gridspec_kw=dict(hspace=0.01, wspace=0.01))

for i, ax in enumerate(axes.flat):

ax.imshow(faces.iloc[i].values.reshape(112,92),cmap=”gray”)

这就是在图像上做PCA的魔力:

from sklearn.decomposition import PCA

#n_components=0.80 means it will return the Eigenvectors that have the 80% of the variation in the dataset

faces_pca = PCA(n_components=0.8)

faces_pca.fit(faces)

fig, axes = plt.subplots(2,10,figsize=(9,3),

subplot_kw={‘xticks’:[], ‘yticks’:[]},

gridspec_kw=dict(hspace=0.01, wspace=0.01))

for i, ax in enumerate(axes.flat):

ax.imshow(faces_pca.components_[i].reshape(112,92),cmap=”gray”)

使用这些特征向量,可以通过执行PCA对象的变换来获取特征向量,然后对特征向量进行inverse_transform来获取所有原始图像,从而重新绘制数据集中的任意面:

components = faces_pca.transform(faces)

projected = faces_pca.inverse_transform(components)

fig, axes = plt.subplots(10,10,figsize=(9,9), subplot_kw={'xticks':[], 'yticks':[]},

gridspec_kw=dict(hspace=0.01, wspace=0.01))

for i, ax in enumerate(axes.flat):

ax.imshow(projected[i].reshape(112,92),cmap="gray")

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表