机器学习实战-SVM模型实现人脸识别

这篇具有很好参考价值的文章主要介绍了机器学习实战-SVM模型实现人脸识别。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

SVM建模进行人脸识别案例

1、导包

首先进行导包

from sklearn.decomposition import PCA
import numpy as np
from sklearn.svm import SVC
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.decomposition import PCA
from sklearn.metrics import accuracy_score
from sklearn.linear_model import LogisticRegression
from sklearn import datasets
from sklearn.model_selection import GridSearchCV

2、加载数据集

我们加载sklearn已经帮我们收集好的人脸数据

# 加载人脸数据 lfw->labled faces wild:野外标记的人脸
data = datasets.fetch_lfw_people(resize = 1, min_faces_per_person = 70)
data

查看结果:

svm定位人脸,机器学习,机器学习,支持向量机,sklearn,人工智能,python

我们取出其中的数据进行查看:

X = data['data']
y = data['target']
faces = data['images']
target_names = data['target_names']
display(X.shape,y.shape,faces.shape,target_names)

运行结果:

svm定位人脸,机器学习,机器学习,支持向量机,sklearn,人工智能,python

我们随机选取一个人的图片并通过索引获取名字:

# 随机取出一个人脸
index = np.random.randint(0,1288,size = 1)[0]
face = faces[index]
name = y[index] # 根据索引获取名字
print(target_names[name])
display(face.shape)
plt.imshow(face, cmap = 'gray')

结果展示:

svm定位人脸,机器学习,机器学习,支持向量机,sklearn,人工智能,python

3、直接使用SVM模型建模

由于原来的数据很大,而且数据量多,我们首先对原始数据进行PCA降维

%%time
# 进行数据的降维
pca = PCA(n_components=0.95)
X_pca = pca.fit_transform(X)
display(X.shape,X_pca.shape)

结果展示:

svm定位人脸,机器学习,机器学习,支持向量机,sklearn,人工智能,python

然后对降维后的数据集进行训练和预测结果:

其中的C代表的是惩罚系数,用来防止过拟合,我们先用默认的初始值测试下性能

%%time
# 降维之后的数据
X_train,X_test,y_train,y_test, faces_train,faces_test = train_test_split(X_pca,y,faces)
# C为惩罚项,越大,容忍错误越小
# C越大,趋势:想方设发,把数据分开,容易造成过拟合
svc = SVC(C = 1) 
svc.fit(X_train,y_train)
# 训练数据效果很好,测试数据效果不好就是过拟合现象
print('训练数据的得分:',svc.score(X_train,y_train))
print('测试数据的得分:',svc.score(X_test,y_test))
# 算法的预测值
y_pred = svc.predict(X_test)

结果展示:

svm定位人脸,机器学习,机器学习,支持向量机,sklearn,人工智能,python

4、数据可视化

然后我们随机加载50张图片,并可视化查看预测结果:

plt.figure(figsize=(5 * 2, 10 * 3))
for i in range(50):
    plt.subplot(10,5,i + 1) # 子视图
    plt.imshow(faces_test[i],cmap = 'gray')
    plt.axis('off') # 刻度关闭
    # 贴上标签,并且对比实际数据和预测数据
    true_name = target_names[y_test[i]].split(' ')[-1]
    predict_name = target_names[y_pred[i]].split(' ')[-1]
    plt.title(f'True:{true_name}\nPred:{predict_name}')

结果展示:

svm定位人脸,机器学习,机器学习,支持向量机,sklearn,人工智能,python
svm定位人脸,机器学习,机器学习,支持向量机,sklearn,人工智能,python
svm定位人脸,机器学习,机器学习,支持向量机,sklearn,人工智能,python

从结果来看,预测效果并不是很好,红色框选出来的都是预测错误的名字,因此我们不得不对原来的性能优化。

5、网络搜索优化确定最佳性能

sklearn为我们集成好了网络搜索确定最佳性能的方法,只要吧要传进的参数填进去,它会为我们自动搭配获得最优参数。

%%time
svc = SVC()
# C为惩罚系数(防止过拟合),kernel为核函数类型,tol为停止训练的误差值、精度
params = {'C':np.logspace(-10,10,50),'kernel':['linear', 'poly', 'rbf', 'sigmoid'],'tol':[0.01,0.001,0.0001]}
gc = GridSearchCV(estimator = svc,param_grid = params,cv = 5)
gc.fit(X_pca,y)
gc.best_params_

结果展示:

svm定位人脸,机器学习,机器学习,支持向量机,sklearn,人工智能,python

6、使用最佳性能SVM建模

从上面的结果来看,获得的最优惩罚系数C为1.8420699693267165e-07,最优核函数类型是linear线性模型,最优精度为0.001.

基于上面的最优参数,对SVM进行优化建模

svc = SVC(C = 1.8420699693267165e-07,kernel='linear',tol = 0.001)
# 随机划分的
X_pca_train,X_pca_test,y_train,y_test, faces_train,faces_test = train_test_split(X_pca,y,faces)
svc.fit(X_pca_train,y_train)
print('训练数据得分:',svc.score(X_pca_train,y_train))
print('测试数据的得分:',svc.score(X_pca_test,y_test))

结果展示:

svm定位人脸,机器学习,机器学习,支持向量机,sklearn,人工智能,python

从这个结果来看,相比于普通的SVM建模,优化后的SVM在得分上明显有提高。

7、优化后的数据可视化

plt.figure(figsize=(5 * 2, 10 * 3))
for i in range(50):
    plt.subplot(10,5,i + 1) # 子视图
    plt.imshow(faces_test[i],cmap = 'gray')
    plt.axis('off') # 刻度关闭
    # 贴上标签,并且对比实际数据和预测数据
    true_name = target_names[y_test[i]].split(' ')[-1]
    predict_name = target_names[y_pred[i]].split(' ')[-1]
    plt.title(f'True:{true_name}\nPred:{predict_name}')

结果展示:

svm定位人脸,机器学习,机器学习,支持向量机,sklearn,人工智能,python
svm定位人脸,机器学习,机器学习,支持向量机,sklearn,人工智能,python
svm定位人脸,机器学习,机器学习,支持向量机,sklearn,人工智能,python
svm定位人脸,机器学习,机器学习,支持向量机,sklearn,人工智能,python

从优化后的结果来看,虽然还是有分错的结果,但是准确率较原来的准确率提高了很多。文章来源地址https://www.toymoban.com/news/detail-763233.html

8、完整代码

8.1未优化的完整代码

from sklearn.decomposition import PCA
import numpy as np
from sklearn.svm import SVC
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.decomposition import PCA
from sklearn.metrics import accuracy_score
from sklearn.linear_model import LogisticRegression
from sklearn import datasets
from sklearn.model_selection import GridSearchCV

# 加载人脸数据 lfw->labled faces wild:野外标记的人脸
data = datasets.fetch_lfw_people(resize = 1, min_faces_per_person = 70)
data

# 进行数据的降维
pca = PCA(n_components=0.95)
X_pca = pca.fit_transform(X)
display(X.shape,X_pca.shape)

# 降维之后的数据
X_train,X_test,y_train,y_test, faces_train,faces_test = train_test_split(X_pca,y,faces)
# C为惩罚项,越大,容忍错误越小
# C越大,趋势:想方设发,把数据分开,容易造成过拟合
svc = SVC(C = 1) 
svc.fit(X_train,y_train)
# 训练数据效果很好,测试数据效果不好就是过拟合现象
print('训练数据的得分:',svc.score(X_train,y_train))
print('测试数据的得分:',svc.score(X_test,y_test))
# 算法的预测值
y_pred = svc.predict(X_test)

plt.figure(figsize=(5 * 2, 10 * 3))
for i in range(50):
    plt.subplot(10,5,i + 1) # 子视图
    plt.imshow(faces_test[i],cmap = 'gray')
    plt.axis('off') # 刻度关闭
    # 贴上标签,并且对比实际数据和预测数据
    true_name = target_names[y_test[i]].split(' ')[-1]
    predict_name = target_names[y_pred[i]].split(' ')[-1]
    plt.title(f'True:{true_name}\nPred:{predict_name}')

8.2优化后的完整代码

from sklearn.decomposition import PCA
import numpy as np
from sklearn.svm import SVC
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.decomposition import PCA
from sklearn.metrics import accuracy_score
from sklearn.linear_model import LogisticRegression
from sklearn import datasets
from sklearn.model_selection import GridSearchCV

# 加载人脸数据 lfw->labled faces wild:野外标记的人脸
data = datasets.fetch_lfw_people(resize = 1, min_faces_per_person = 70)
data

# 进行数据的降维
pca = PCA(n_components=0.95)
X_pca = pca.fit_transform(X)
display(X.shape,X_pca.shape)

svc = SVC()
# C为惩罚系数(防止过拟合),kernel为核函数类型,tol为停止训练的误差值、精度
params = {'C':np.logspace(-10,10,50),'kernel':['linear', 'poly', 'rbf', 'sigmoid'],'tol':[0.01,0.001,0.0001]}
gc = GridSearchCV(estimator = svc,param_grid = params,cv = 5)
gc.fit(X_pca,y)
gc.best_params_

svc = SVC(C = 1.8420699693267165e-07,kernel='linear',tol = 0.001)
# 随机划分的
X_pca_train,X_pca_test,y_train,y_test, faces_train,faces_test = train_test_split(X_pca,y,faces)
svc.fit(X_pca_train,y_train)
print('训练数据得分:',svc.score(X_pca_train,y_train))
print('测试数据的得分:',svc.score(X_pca_test,y_test))

plt.figure(figsize=(5 * 2, 10 * 3))
for i in range(50):
    plt.subplot(10,5,i + 1) # 子视图
    plt.imshow(faces_test[i],cmap = 'gray')
    plt.axis('off') # 刻度关闭
    # 贴上标签,并且对比实际数据和预测数据
    true_name = target_names[y_test[i]].split(' ')[-1]
    predict_name = target_names[y_pred[i]].split(' ')[-1]
    plt.title(f'True:{true_name}\nPred:{predict_name}')

到了这里,关于机器学习实战-SVM模型实现人脸识别的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【机器学习】SVM支持向量机模型

     本站原创文章,转载请说明来自 《老饼讲解-机器学习》 ml.bbbdata.com 目录 一. SVM的目标和思想    1.1 SVM硬间隔模型的原始目的 1.2 SVM的直接目标 1.3 什么是支持向量  二. SVM的支持平面的表示方式 2.1 支持面表示方式的初步思路 2.2 初步思路的缺陷与改进 2.3 支持面的最终表示

    2023年04月23日
    浏览(171)
  • 机器学习实战-系列教程8:SVM分类实战3非线性SVM(鸢尾花数据集/软间隔/线性SVM/非线性SVM/scikit-learn框架)项目实战、代码解读

    本篇文章的代码运行界面均在Pycharm中进行 本篇文章配套的代码资源已经上传 SVM分类实战1之简单SVM分类 SVM分类实战2线性SVM SVM分类实战3非线性SVM 使用PolynomialFeatures模块进行预处理,使用这个可以增加数据维度 polynomial_svm_clf.fit(X,y)对当前进行训练传进去X和y数据 SVM分类实战

    2024年02月07日
    浏览(52)
  • 第29步 机器学习分类实战:支持向量机(SVM)建模

    支持向量机(SVM)建模。 先复习一下参数(传送门),需要调整的参数有: ① kernel:{‘linear’, ‘poly’, ‘rbf’, ‘sigmoid’, ‘precomputed’},默认为’rbf’。使用的核函数,必须是“linear”,“poly”,“rbf”,“sigmoid”,“precomputed”或者“callable”中的一个。 ② c:浮点

    2024年02月02日
    浏览(60)
  • 基于机器学习的情绪识别算法matlab仿真,对比SVM,LDA以及决策树

    目录 1.算法理论概述 2.部分核心程序 3.算法运行软件版本 4.算法运行效果图预览 5.算法完整程序工程        情绪识别是一种重要的情感分析任务,旨在从文本、语音或图像等数据中识别出人的情绪状态,如高兴、悲伤、愤怒等。本文介绍一种基于机器学习的情绪识别算法,

    2024年02月15日
    浏览(227)
  • 【Python机器学习】SVM——线性模型与非线性特征

    SVM(核支持向量机)是一种监督学习模型,是可以推广到更复杂模型的扩展,这些模型无法被输入空间的超平面定义。 线模型在低维空间中可能非常受限,因为线和平面的灵活性有限,但是有一种方式可以让线性模型更加灵活,那就是添加更多特征,比如输入特征的交互式或

    2024年01月21日
    浏览(47)
  • 基于python-opencv,svm的开源人脸识别项目

      前言       本项目是我自己在学校里完成的一个小项目,本项目为基于python-opencv,svm的人脸识别开源项目,不同于其他的直接从kaggle等获取划分好的数据集,本项目致力于从无到有的完成机器学习的所有步骤,即: 目录 项目展示: 一、数据采集 1.创建爬虫项目 2.修改set

    2024年02月08日
    浏览(45)
  • 基于机器学习算法:朴素贝叶斯和SVM 分类-垃圾邮件识别分类系统(含Python工程全源码)

    本项目采用朴素贝叶斯和支持向量机(SVM)分类模型作为基础,通过对垃圾邮件和正常邮件的数据进行训练,旨在实现垃圾邮件的自动识别功能。 通过训练这两个分类模型,我们的目标是建立一个高效准确的垃圾邮件识别系统。当接收到新的邮件时,系统将对邮件文本进行预

    2024年02月09日
    浏览(49)
  • 【机器学习】HOG+SVM实现行人检测

    任务:利用INRIA Person数据集,提取HOG特征并采用SVM方法实现图像中的行人检测。 本文将给出详细的操作步骤,以及可能会出现的坑点。 INRIA数据集含有直立或行走的人的图像,被Navneet Dalal用于训练发表在CVPR 2005的人类检测器。 坑点1 :官网http://pascal.inrialpes.fr/data/human/打开后

    2024年02月02日
    浏览(44)
  • 机器学习实战:Python基于支持向量机SVM-RFE进行分类预测(三)

    1.1 支持向量机的介绍 支持向量机( Support Vector Machine,SVM )是一种监督学习的分类算法。它的基本思想是找到一个能够最好地将不同类别的数据分开的超平面,同时最大化分类器的边际(margin)。SVM的训练目标是最大化间隔(margin),即支持向量到超平面的距离。 具体地,

    2024年02月05日
    浏览(59)
  • 【OpenCV-Python】——机器学习kNN算法&SVM算法&k均值聚类算法&深度学习图像识别&对象检测

    目录 前言: 1、机器学习 1.1 kNN算法 1.2 SVM算法(支持向量机)  1.3 k均值聚类算

    2024年02月05日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包