码迷,mamicode.com
首页 > Windows程序 > 详细

Sklearn -PCA 人脸识别 百度网盘sklearn学习API

时间:2018-06-21 15:34:24      阅读:548      评论:0      收藏:0      [点我收藏+]

标签:避免   解决   arch   下载   分类   向量   oss   AC   计算   

 

PCA脸部识别
现在让我们用PCA来解决一个脸部识别问题。脸部识别是一个监督分类任务,用于从照片中认出某个
人。本例中,我们用剑桥大学AT&T实验室的Our Database of Faces数据集
(http://www.cl.cam.ac.uk/research/dtg/attarchive/facedatabase.html),这个数据集包含40个人每个
人10张照片。这些照片是在不同的光照条件下拍摄的,每张照片的表情也不同。照片都是黑白的,尺
寸为92 x 112像素。虽然这些图片都不大,但是每张图片的按像素强度排列的特征向量也有10304
维。这些高维数据的训练可能需要很多样本才能避免拟合过度。而我们样本量并不大,所有我们用
PCA计算一些主成分来表示这些照片。
我们可以把照片的像素强度矩阵转换成向量,然后用所有的训练照片的向量建一个矩阵。每个照片都
是数据集主成分的线性组合。在脸部识别理论中,这些主成分称为特征脸(eigenfaces)。特征脸可
以看成是脸部的标准化组成部分。数据集中的每张脸都可以通过一些标准脸的组合生成出来,或者说
是最重要的特征脸线性组合的近似值。

数据已下载在 E:\sklearn 学习\att_faces_pca

from os import walk, path
import numpy as np
import PIL from Image
from sklearn.cross_validation import train_test_split
from sklearn.cross_validation import cross_val_score
from sklearn.preprocessing import scale
from sklearn.decomposition import PCA
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import classification_report

下面我们把照片导入Numpy数组,然后把它们的像素矩阵转换成向量:

X=[]
y=[]
path=E:\sklearn 学习\att_faces_pca
for dir_path, dir_names, file_names in walk(path):
    for fn in file_names:
        if fn[-3:] == pgm:
            image_filename = dir_path+(\\)+fn
            img=Image.open(image_filename)
            img=np.array(img)
            img=img.reshape(10304)
            img=img.astype(float32)
            scale(img)
            X.append(img)
            y.append(dir_path)

得到X和y

技术分享图片

技术分享图片

 将X和y转为array

X=np.array(X)
y=np.array(y)
X_train, X_test, y_train, y_test = train_test_split(X, y) #将X和y分成训练集和验证集,默认比例 75%
X_train_reduced = pca.fit_transform(X_train)
X_test_reduced = pca.transform(X_test)


print(训练集数据的原始维度是:{}.format(X_train.shape))
print(PCA降维后训练集数据是:{}.format(X_train_reduced.shape))

训练集数据的原始维度是:(300, 10304)
PCA降维后训练集数据是:(300, 150)

classirfier=LogisticRegression()

accuracies=cross_val_score(classirfier,X_train_reduced,y_train)

accuracies
Out[90]: array([ 0.77477477,  0.8019802 ,  0.63636364])

accuracies_mean=accuracies.mean()

accuracies_mean
Out[92]: 0.7377062030527376

 

Sklearn -PCA 人脸识别 百度网盘sklearn学习API

标签:避免   解决   arch   下载   分类   向量   oss   AC   计算   

原文地址:https://www.cnblogs.com/vivianzy1985/p/9208933.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!