python代码:

from __future__ import print_function
from time import time
import logging
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.datasets import fetch_lfw_people
from sklearn.model_selection import GridSearchCV
from sklearn.metrics import classification_report
from sklearn.metrics import confusion_matrix
from sklearn.decomposition import PCA
from sklearn.svm import SVCdef main():logging.basicConfig( level=logging.INFO ,format='%(asctime)s %(message)s' )peoples = fetch_lfw_people( min_faces_per_person=70 )# 下面介绍数据预处理和分类# 返回多少个图shapes,h,w = peoples.images.shape# X是特征向量的矩阵,每一行是个实例,每一列是个特征值X = peoples.data# n_featers表示的就是维度n_features = X.shape[1]  # 维度:每个人会提取多少的特征值# 提取每个实例对应每个人脸,目标分类标记,不同的人的身份y = peoples.targettarget_names = peoples.target_namesn_classes = target_names.shape[0]    #多少行,shape就是多少行,多少个人,多少类# 下面开始拆分数据,分成训练集和测试集,有个现成的函数,通过调用train_test_split;来分成两部分X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25)# 数据降维,因为特征值的维度还是比较高n_components = 150t0 = time()  # 计算出打印每一步需要的时间pca = PCA(n_components=n_components, whiten=True).fit(X_train)eigenfaces = pca.components_.reshape((n_components, h, w))t0 = time()X_train_pca = pca.transform(X_train)  # 特征量中训练集所有的特征向量通过pca转换成更低维的矩阵X_test_pca = pca.transform(X_test)# param_grid把参数设置成了不同的值,C:权重;gamma:多少的特征点将被使用,因为我们不知道多少特征点最好,选择了不同的组合param_grid = {'C': [1e3, 5e3, 1e4, 5e4, 1e5],'gamma': [0.0001, 0.0005, 0.001, 0.005, 0.01, 0.1], }# 把所有我们所列参数的组合都放在SVC里面进行计算,最后看出哪一组函数的表现度最好clf = GridSearchCV(SVC(kernel='rbf'), param_grid)# 其实建模非常非常简单,主要是数据的预处理麻烦clf = clf.fit(X_train_pca, y_train)# 测试集预测看看准确率能到多少y_pred = clf.predict(X_test_pca)# print(classification_report(y_test, y_pred, target_names=target_names)) #预测精确度# print(confusion_matrix(y_test, y_pred, labels=range(n_classes))) #混淆矩阵# 把预测出来的人名存起来prediction_titles = [title(y_pred, y_test, target_names, i)for i in range(y_pred.shape[0])]plot_gallery(X_test, prediction_titles, h, w)# 降维后的图片eigenface_titles = ['eigenface %d' %i for i in range(eigenfaces.shape[0])]# 提取过特征向量之后的脸是什么样子plot_gallery(eigenfaces, eigenface_titles, h, w)# 把预测的函数归类标签和实际函数归类标签,比如布什
def title(y_pred, y_test, target_names, i):pred_name = target_names[y_pred[i]].rsplit(' ', 1)[-1]true_name = target_names[y_test[i]].rsplit(' ', 1)[-1]flag = "No"if pred_name == true_name:flag = "Yes"result = " flag:{0}\n predicted :{1} \n true : {2} ".format(flag,pred_name,true_name)return result#把数据可视化的可以看到,把需要打印的图打印出来
def plot_gallery(images,titles,h,w,n_row=3,n_col=4):"""Helper function to plot a gallery of portraits"""#在figure上建立一个图当背景plt.figure(figsize=(1.8*n_col,2.4*n_row))plt.subplots_adjust(bottom=0,left=.01,right=.99,top=.90,hspace=.35)for i in range(n_row * n_col):plt.subplot(n_row,n_col,i+1)plt.imshow(images[i].reshape((h,w)),cmap=plt.cm.gray)plt.title(titles[i],size=12)plt.xticks(())plt.yticks(())plt.show()main()

人脸识别结果:

降维后结果:

3.4 svm人脸识别相关推荐

  1. 第十九课.基于sklearn的SVM人脸识别

    目录 数据集 确定人脸的类别标记 划分训练集和测试集与训练 实验为基于sklearn的SVM人脸识别,使用 SVM 算法对戴眼镜的人脸和不戴眼镜的人脸进行分类,从而完成 识别戴眼镜的人脸 的任务:实验 ...

  2. 麦子学院深度学习视频SVM人脸识别课程代码修改及实现

    1.麦子学院深度学习SVM人脸识别原代码对应修改 2.代码实现 1.麦子学院深度学习SVM人脸识别原代码对应修改 1.1 from sklearn.cross_validation import tr ...

  3. 【机器学习超详细】机器学习案例之SVM人脸识别技术应用 PCA降维 结果可视化 支持向量机

    基础知识介绍: LFW人脸识别数据集(http://vis-www.cs.umass.edu/lfw/) 该实验可以在JupyterNotebook上运行,也可在其他Python程序上运行.(本人习惯 ...

  4. 【人脸识别】PCA+SVM人脸识别(准确率)【含GUI Matlab源码 823期】

    ⛄一.简介 1 PCA-SVM原理 1.1 主成分分析PCA 本文处理的所有原始图片都是112x 92大小的pgm格式图片, 每幅图片包含10304个像素点, 每一行代表一个样本,维数就是10304维 ...

  5. 【人脸识别】Gabor+SVM比较PCA+SVM人脸识别【含GUI Matlab源码 685期】

    ⛄一.简介 Gabor+SVM:利用Gabor程序实现对人脸的特征提取,然后用SVM进行分类: 1 Gabor Gabor 特征提取算法可以在不同方向上描述局部人脸特征,对光照.遮挡以及表情变换等情况 ...

  6. 【人脸识别】基于PCA+SVM人脸识别(准确率)matlab源码含GUI

    一.简介 1 PCA\ PCA(Principal Component Analysis)是常用的数据分析方法.PCA是通过线性变换,将原始数据变换为一组各维度线性无关的数据表示方法,可用于提取数据的 ...

  7. PCA主成分分析+SVM实现人脸识别

    原文地址: http://ihoge.cn/2018/PCA+SVM人脸识别.html 加载数据 这里使用的测试数据共包含40位人员照片,每个人10张照片.也可登陆http://www.cl.cam. ...

  8. 机器学习——SVM(支持向量机)与人脸识别

    目录 系列文章目录 一.SVM的概念与原理 1.SVM简介 2.SVM基本流程 3.SVM在多分类中的推广 二.经典SVM运用于图像识别分类 三.SVM运用于人脸识别 1.预处理 1.1 数据导入与处 ...

  9. 基于支持向量机 (SVM) 和稀疏表示理论 (SRC) 的人脸识别比较

    一 背景 1.1 支持向量机简介 支持向量机(Support Vector Machine,SVM)是AT&TBell 实验室的V.Vapnik等人提出的一种机器学习算法,是迄今为止最重要的机 ...

最新文章

  1. Redis的7000字笔记总结,超详细!
  2. 基于OpenCV的位姿估计
  3. mysql 返回最大值列名_多列求最大值列和列名
  4. linux 简介与安装(虚拟机安装)
  5. python集合类型_Python 的集合(set)类型
  6. js模块化与面向对象编程思考与实践
  7. 爬虫从网页中去取的数据中包含nbsp;空格
  8. 【Magick++透明图层合并】
  9. Fiddler代理设置
  10. ClickHouse可视化DBM Release 1.12.0
  11. 俞敏洪一分钟励志演讲稿
  12. dellr420部署os_Dell R420服务器手动安装centos7系统系列问题
  13. 数据库优化整理之:冷热分离
  14. Java学习07–前端基础之CSS
  15. android 登陆微信一直卡在验证身份,微信登录需要滑块验证的时候,闪退返回至登录界面...
  16. Kernel: printk: pr_debug:动态日志打印功能
  17. 实现nginx的https 功能报错:
  18. 洛谷 P5266 【深基17.例6】学籍管理 题解
  19. linux下 firefox安装flash插件
  20. 手动实现一年12个月的工作日日历

热门文章

  1. pythonjpg_使用python判断jpeg图片的完整性实例
  2. ssm 使用 PageHelper 插件分页
  3. 最全!最完整的递归下降分析法代码!!! (实验报告,代码)
  4. [leetcode] 3.无重复字符的最长子串
  5. python虚拟机优化_KVM虚拟机管理及性能优化
  6. linux c语言 信号,linux下基于C语言的信号编程实例
  7. linux驱动大小,为什么在Linux字符驱动程序读取调用中大小总是= 4096?
  8. An internal error occurred while showing an internal error.
  9. java多语言编程语言_为什么很多程序员信仰“Java是世界上最好的编程语言”
  10. jmeter 获取全部响应_Jmeter获取响应结果中参数出现的次数