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

news/2024/10/23 7:23:48/

基于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数据目录中,具体为:

WindowsC:\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属于监督学习算法。


http://www.ppmy.cn/news/45369.html

相关文章

又一科研利器诞生!能对话的论文阅读器,hammerScholar

文|智商掉了一地 hammerScholar 新升级,用对话式读论文工具提升科研生产力~ 不得不说,自从 AIGC 这个概念出现以来,它极强的内容理解与生成能力也推动着各种生产力工具层出不穷,除了一些浏览器和代码插件以外&#xff…

26岁转行网络安全,成功上岸安全开发!

前言 我是去年 9 月 22 日才正式学习网络安全的,之前在国营单位工作了 4 年,在长沙一个月工资只有 5000 块,而且看不到任何晋升的希望,如果想要往上走,那背后就一定要有关系才行。 而且国营单位的气氛是你干的多了&a…

我去蔚来试驾了

前面写了比亚迪汉、小鹏P7i的试驾体验,链接如下: 小鹏P7I试驾体验! 今天接着分享蔚来ET5的试驾体验,实话实说,我是蔚来ET5的颜粉,颜值也是ET5最大的卖点之一。 我身边不少朋友,不管是男生还是女…

物联网安全性测试和常见漏洞

物联网安全性测试和常见漏洞 尽管物联网(IoT)重新定义了我们的生活并带来了很多好处,但它的攻击面很大,并且在安全之前是不安全的。如果没有适当的保护,物联网设备很容易成为网络犯罪分子和黑客的目标。您可能会遇到财…

VMware ESXi 8.0U1 发布 - 领先的裸机 Hypervisor

请访问原文链接:https://sysin.org/blog/vmware-esxi-8-u1/,查看最新版。原创作品,转载请保留出处。 作者主页:sysin.org 2023-04-18, VMware vSphere 8.0U1 发布。 详见:VMware vSphere 8 Update 1 新增功能 产品简…

【Leetcode -263.丑数 -268.丢失的数字】

Leetcode Leetcode -263.丑数Leetcode -268.丢失的数字 Leetcode -263.丑数 题目:丑数就是只包含质因数 2、3 和 5 的正整数。 给你一个整数 n ,请你判断 n 是否为 丑数 。如果是,返回 true ;否则,返回 false 。 示例…

VMware SD-WAN 5.1 - 软件定义的 WAN

请访问原文链接:https://sysin.org/blog/vmware-sd-wan-5/,查看最新版。原创作品,转载请保留出处。 作者主页:sysin.org 产品概述 软件定义的 WAN (SD-WAN) SD-WAN 的功能特性 简化的 SD-WAN 了解软件定义的 WAN (SD-WAN) 的概…

时光煮雨,岁月缝花

时光煮雨,岁月缝花 作者丨兰馨 人皆苦炎热,我爱夏日长。熏风自南来,殿阁生微凉。 六月,初夏缓缓归,仲夏盈盈来。树木葱茏,山峦峻秀,槐花飘雪,石榴含笑,蔷薇浮动&#xf…