基于LDA+SVM实现人脸识别模型

描述

人脸识别(图像识别)是机器学习领域十经典的应用,在本质上,人脸识别属于监督学习中的分类问题。前面章节中我们已经学习了支持向量机(SVM),该算法在图像分类领域应用非常广泛,本任务要求结合学过的数据降维算法(LDA、PCA),使用SVM构建人脸识别模型,对比评估不同降维算法下的识别准确率。数据集采用lfw人脸数据集。

本任务的主要工作内容:

1、 lfw数据集的下载与加载查看

2、 应用LDA对数据集降维

3、 应用PCA对数据集降维

4、 对比降维前后模型的表现

5、 对比两种降维算法的区别

源码下载

环境

  • 操作系统:Windows 10、Ubuntu18.04

  • 工具软件:Anaconda3 2019、Python3.7

  • 硬件环境:无特殊要求

  • 依赖库列表

    matplotlib    3.3.4
    scikit-learn    0.24.2
    

分析

LFW (Labeled Faces in the Wild) 人脸数据集是由美国马萨诸塞州立大学阿默斯特分校计算机视觉实验室整理完成的经典数据集,主要用来研究人脸识别问题。该数据集包含5749个人的13233张脸部图片,每个人的图片数量不固定,图片尺寸为62×47,即数据的特征维度为62×47=2914,特征空间非常大,需要首先进行降维,之后再建模。

本任务涉及以下几个环节:

a)下载LFW人脸数据集

b)加载、查看数据集

c)分别使用LDA、PCA算法进行数据降维

d)在降维后的数据集上构建SVM模型并评估、预测

实施

1、下载LFW人脸数据集

下载地址:http://vis-www.cs.umass.edu/lfw/#download

打开页面,在下方找到下载链接,如图所示:

下载数据文件 lfw-funneled.tgz,保存到scikit-learn数据目录中,具体为:

Windows C:\Users\实际用户名\scikit_learn_data\lfw_home
Linux ~\scikit_learn_data\lfw_home

2、加载、查看人脸数据集

from sklearn.datasets import fetch_lfw_people
from sklearn.model_selection import train_test_split
from sklearn.svm import SVC
from sklearn.decomposition import PCA
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis
import matplotlib.pyplot as plt# 加载人脸数据集(选取具有不少于60张图片的人)
faces = fetch_lfw_people(min_faces_per_person=60)
print(faces.target_names) # 数据集中的人名(共8个,即8个类别)
print(faces.images.shape) # 图像大小:1348张图片,每张图片尺寸为62*47=2914
print(faces.data.shape) # 样本数据大小:1348张图片,每张图片包含2914个特征维度
print(faces.target.shape) # 标签数组(1348张图片每一张对应的姓名编号0~7)# 查看部分人脸图片
fig, ax = plt.subplots(2,5) # 生成2行5列的子图,查看10张图片
for i, axi in enumerate(ax.flat):axi.imshow(faces.images[i], cmap='bone') # 显示人脸图片axi.set(xticks=[], yticks=[], xlabel=faces.target_names[faces.target[i]]) # 显示姓名plt.show()

结果如下:

结果分析:

  • 数据集中的八个人名,代表八个类别
  • 样本图像大小:1348张图片,没张图片尺寸为62×47=2914

3、分别使用LDA、PCA算法进行数据降维

# LDA人脸数据降维,将2914个维度降为7个# 注意LDA降维需要提供标签信息(target)
lda = LinearDiscriminantAnalysis(n_components=7).fit(faces.data, faces.target)
data_lda = lda.transform(faces.data) # 降维转换
print('LDA:', data_lda.shape) # 查看数据维度# PCA降维(2914降为150)
pca = PCA(n_components=150).fit(faces.data) # 利用PCA算法降维
data_pca = pca.transform(faces.data) # 降维转换
print('PCA:', data_pca.shape) # 查看数据维度

结果如下:

LDA: (1348, 7)
PCA: (1348, 150)

4、使用SVM算法建立人脸识别模型,评估并预测

# 根据不同的数据集建立SVM模型并评估、预测
def build_eval(data, target, label, n=20, x=1):X_train, X_test, y_train, y_test = train_test_split(data, target, random_state=9) # 拆分数据集model = SVC(C=10, gamma='scale').fit(X_train, y_train) # 创建SVM分类模型score = model.score(X_test, y_test) # 在测试集上评估模型成绩print(label, score) # 打印模型成绩y_pred = model.predict(X_test[:n]) # 预测前n张照片的姓名编号print('人脸识别:', y_pred) # 预测结果print('实际结果:', y_test[:n]) # 实际结果# 预测第x张图片的姓名y_name = faces.target_names[model.predict([X_test[x]])]y_real = faces.target_names[y_test[x]]print('第 {} 张人脸图片被识别为 {},实际为 {}\n'.format(x, y_name[0], y_real))# 分别使用降维前、LDA降维和PCA降维后的数据进行建模、评估、预测
build_eval(faces.data, faces.target, '降维前,SVM模型识别准确率')
build_eval(data_pca, faces.target, 'PCA降维,SVM模型识别准确率')
build_eval(data_lda, faces.target, 'LDA降维,SVM模型识别准确率')

结果如下:

可以看到,LDA+SVM人脸识别模型的准确率达到99.7%,LDA降维在图像处理中具有较大的优势,相对于PCA算法,LDA在降维时考虑了样本的标签,因此在分类任务的数据降维中更常用。需要注意的是,LDA属于监督学习算法。

基于LDA+SVM实现人脸识别模型相关推荐

  1. 使用Python+PCA+SVM算法实现人脸识别模型

    在本文中,我们将使用主成分分析和支持向量机来建立人脸识别模型. 首先,让我们了解PCA和SVM是什么: 主成分分析: 主成分分析(PCA)是一种机器学习算法,广泛应用于探索性数据分析和建立预测模型,它 ...

  2. 【项目实战】Python基于MTCNN+FaceNet+SVM进行人脸识别项目实战

    说明:这是一个机器学习实战项目(附带数据+代码+文档+视频讲解),如需数据+代码+文档+视频讲解可以直接到文章最后获取. 1.项目背景 人脸识别的现代研究始于20世纪60年代末.在近20年,随着计算机 ...

  3. svm 用来人脸识别_基于SVM的人脸识别

    基于 SVM 的人脸识别 摘要 :主成分分析( PCA )是人脸识别中特征提取的主要方法,支持向量机 ( SVM )具有适合处理小样本.非线性和高维数问题,利用核函数且泛化能力强 等多方面的优点.文章 ...

  4. 基于PCA和SVM的人脸识别系统的设计与实现

      基于PCA和SVM的人脸识别系统的设计与实现 1.1 题目的主要研究内容 工作的主要描述 下载人脸数据集,将其划分为训练集和测试集,对所有数据进行pca降维,将经过降维的训练集特征向量送入svm进 ...

  5. python opencv生成tf模型_基于TensorFlow+ Opencv 的人脸识别 和模型训练

    一.准备工作 本次实例的anaconda 环境 (有需要的自己导入anaconda) 链接:https://pan.baidu.com/s/1IVt2ap-NYdg64uHSh-viaA 提取码:g7 ...

  6. 基于全局信息的人脸识别总结

    一.           课题名称 基于全局信息的人脸识别算法研究 二.           课题的提出 在当今社会中,身份确认具有十分重要的价值.随着网络技术的发展,信息安全也显示出了前所未有的重要 ...

  7. 基于改进的RPCA人脸识别算法

    from:http://www.chinaaet.com/article/3000011311 基于改进的RPCA人脸识别算法 作者:首照宇,杨晓帆,莫建文 2015/11/15 18:04:00 摘 ...

  8. 基于PCA 人脸识别/人脸识别算法/人脸检测程序源码MATLAB ELM+PCA人脸识别 PCA人脸识别matlab代码 基于PCA算法的人脸识别

    1.基于PCA的人脸识别代码 2.MATLAB ELM+PCA人脸识别 2.基于PCA的人脸识别(matlab)(采用PCA算法进行人脸识别,通过抽取人脸的主要成 分,构成特征脸空间,识别时将测试图像 ...

  9. 基于深度学习的人脸识别考勤系统设计

    写在前面:本文是本科阶段参加的第三次科创比赛项目,当时只有一个人做,能力精力有限,很多预期的功能都没有实现.最后的可展示程度不高,没有走得很远.本文是申报书部分,可以为除此参加科创的同学提供思路,可以 ...

最新文章

  1. linux 用户权限详解,03_04_Linux用户及权限详解
  2. win7分区软件_神奇的工作室win7旗舰版重装系统连不上网怎么解决
  3. LaTeX设置长公式的跨页显示
  4. 触发效果当容器的可见性改变时
  5. CSS教程--CSS 属性选择器
  6. python中平方怎么表示_python表示平方
  7. 学习Python爬虫有哪些书籍书籍?看这几本书就够了
  8. Android 使用gson完成Json转map,json转单个对象,json转数组
  9. 梦幻西游修炼金钱计算器
  10. 字符分割函数strtok
  11. 更新xcode至12.3,编译报错Building for iOS, but the linked and embedded framework ‘xxx.framework’ was buil...
  12. 安卓电话补充业务 SS
  13. butter滤波器是iir吗_MATLAB IIR滤波器设计函数buttord与butter
  14. 253:丛林中的路——最小生成树Prim
  15. CRM系统哪些数据和客户管理功能模块呢?
  16. 追女生要经过哪几个阶段?告诉你追女生经历的具体阶段!
  17. odoo继承过来的模型定义_rec_name不生效解决办法
  18. 六自由度无人机建模与轨迹跟踪siumlink仿真
  19. visual studio .vcxproj
  20. 有效投资边界的python实现

热门文章

  1. 创建哈夫曼树并求带权路径长度
  2. 设备管理软件功能摘要
  3. JavaScript时间戳
  4. R语言使用lm函数构建简单线性回归模型(建立线性回归模型)、拟合回归直线、使用residuls函数从模型中提取每个样本点的残差值、计算残差和和残差平方和
  5. touchslide.js 轮播和标签切换代码
  6. delphi 正则表达式
  7. win10家庭版升级专业版出现0x80070422错误
  8. win10家庭版升级到win10专业版或者其他版本详细步骤(快捷,秘钥升级)
  9. 从噱头到实用,巡检机器人“上岗”助运维
  10. 开始在NEC中国研究院做事,心情愉快