示例:Python机器学习之PCA主成分分析提取特征脸

一、目的:通过Sklearn自带的人脸数据集模拟PCA提取特征脸的方法

二、环境:

1、安装:Jupyter NoteBook (编写Python的IDE)

2、安装:pip install Pillow

三、实现:

1、引用资源:

import matplotlib.pyplot as plt
from sklearn.datasets import fetch_lfw_people

分别是matplotlib python中用于绘图的类库和人脸数据集

2、查看数据集

faces = fetch_lfw_people()
faces.data.shape

查看数据结构:

(869, 2914)
869条信息,2914个特征点
faces.images.shape

转换成平面:images是将我们的数据集以一个二维平面可视化的角度展现出来

(869, 62, 47)

是62*47的图像平面

3、 随机获取36张脸

import numpy as np

random_indexs = np.random.permutation(len(faces.data))
X = faces.data[random_indexs]
example_faces = X[:36,:]
example_faces.shape
(36, 2914)

4、绘制这些人脸

def plot_digits(data):
    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(data[i].reshape(62,47),cmap='bone')

plot_digits(example_faces)

绘制结果:

5、读取脸对应的人名:

faces.target_names

array(['Alex Barros', 'Arminio Fraga', 'Audrey Sauret', 'Bison Dele',
       'Bob Beauprez', 'Bob Graham', 'Bob Huggins', 'Colin Montgomerie',
       'Curtis Strange', 'Daniela Cicarelli', 'Darren Clarke',
       'David Caruso', 'Dawn Staley', 'Edmund Stoiber',
       'Edward James Olmos', 'Eve Ensler', 'Felipe Perez Roque',
       'Fernando Leon de Aranoa', 'George HW Bush', 'George W Bush',
       'Gerhard Schroeder', 'Gideon Black', 'Gloria Macapagal Arroyo',
       'Gordon Brown', 'Guido Westerwelle', 'Heath Ledger',
       'Heather Whitestone McCallum', 'Herta Daeubler-Gmelin',
       'Igor Ivanov', 'JK Rowling', 'Jane Fonda', 'Jimmy Szymanski',
       'John Howard', 'John Manley', 'Juan Ignacio Chela',
       'Justin Guarini', 'Larry Ellison', 'Li Peng', 'Marc Grossman',
       'Michael Schumacher', 'Mike Tyson', 'Mstislav Rostropovich',
       'Nelson Mandela', 'Paul Lo Duca', 'Paul ONeill',
       'Pervez Musharraf', 'Richard Shelby', 'Robert Fico',
       'Robert Vowler', 'Shannyn Sossamon', 'Tara Dawn Christensen',
       'Tiger Woods', 'Tommy Haas', 'Will Smith'], dtype='<U27')

获取总人数数:len(faces.target_names)

54

说明一共有54张不同的脸

6、使用随机的方式来求解出PCA
 

%%time
X,y = faces.data,faces.target
from sklearn.decomposition import PCA
pca = PCA(svd_solver='randomized')
pca.fit(X)

pca.components_.shape
结果:(869, 2914)

 7、绘制特征脸

通过以上方法可以提取特征脸 

 四、特征脸介绍

1、特征脸的生成:

一组特征脸可以通过在一大组描述不同人脸的图像上进行主成分分析(PCA)获得。任意一张人脸图像都可以被认为是这些标准脸的组合。例如,一张人脸图像可能是特征脸1的10%,加上特征脸2的55%,在减去特征脸3的3%。值得注意的是,它不需要太多的特征脸来获得大多数脸的近似组合。另外,由于人脸是通过一系列向量(每个特征脸一个比例值)而不是数字图像进行保存,可以节省很多存储空间。

2、特征脸的应用:

特征脸的最直接的应用就是人脸识别。在这个需求下,特征脸相比其他手段在效率方面比较有优势,因为特征脸的计算速度非常快,短时间就可以处理大量人脸。但是,特征脸在实际使用时有个问题,就是在不同的光照条件和成像角度时,会导致识别率大幅下降。因此,使用特征脸需限制使用者在统一的光照条件下使用正面图像进行识别

Github下载地址:https://github.com/HeBianGu/Python-sklearn.git

猜你喜欢

转载自blog.csdn.net/u010975589/article/details/88025494