3.4 svm人脸识别
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人脸识别相关推荐
- 第十九课.基于sklearn的SVM人脸识别
目录 数据集 确定人脸的类别标记 划分训练集和测试集与训练 实验为基于sklearn的SVM人脸识别,使用 SVM 算法对戴眼镜的人脸和不戴眼镜的人脸进行分类,从而完成 识别戴眼镜的人脸 的任务:实验 ...
- 麦子学院深度学习视频SVM人脸识别课程代码修改及实现
1.麦子学院深度学习SVM人脸识别原代码对应修改 2.代码实现 1.麦子学院深度学习SVM人脸识别原代码对应修改 1.1 from sklearn.cross_validation import tr ...
- 【机器学习超详细】机器学习案例之SVM人脸识别技术应用 PCA降维 结果可视化 支持向量机
基础知识介绍: LFW人脸识别数据集(http://vis-www.cs.umass.edu/lfw/) 该实验可以在JupyterNotebook上运行,也可在其他Python程序上运行.(本人习惯 ...
- 【人脸识别】PCA+SVM人脸识别(准确率)【含GUI Matlab源码 823期】
⛄一.简介 1 PCA-SVM原理 1.1 主成分分析PCA 本文处理的所有原始图片都是112x 92大小的pgm格式图片, 每幅图片包含10304个像素点, 每一行代表一个样本,维数就是10304维 ...
- 【人脸识别】Gabor+SVM比较PCA+SVM人脸识别【含GUI Matlab源码 685期】
⛄一.简介 Gabor+SVM:利用Gabor程序实现对人脸的特征提取,然后用SVM进行分类: 1 Gabor Gabor 特征提取算法可以在不同方向上描述局部人脸特征,对光照.遮挡以及表情变换等情况 ...
- 【人脸识别】基于PCA+SVM人脸识别(准确率)matlab源码含GUI
一.简介 1 PCA\ PCA(Principal Component Analysis)是常用的数据分析方法.PCA是通过线性变换,将原始数据变换为一组各维度线性无关的数据表示方法,可用于提取数据的 ...
- PCA主成分分析+SVM实现人脸识别
原文地址: http://ihoge.cn/2018/PCA+SVM人脸识别.html 加载数据 这里使用的测试数据共包含40位人员照片,每个人10张照片.也可登陆http://www.cl.cam. ...
- 机器学习——SVM(支持向量机)与人脸识别
目录 系列文章目录 一.SVM的概念与原理 1.SVM简介 2.SVM基本流程 3.SVM在多分类中的推广 二.经典SVM运用于图像识别分类 三.SVM运用于人脸识别 1.预处理 1.1 数据导入与处 ...
- 基于支持向量机 (SVM) 和稀疏表示理论 (SRC) 的人脸识别比较
一 背景 1.1 支持向量机简介 支持向量机(Support Vector Machine,SVM)是AT&TBell 实验室的V.Vapnik等人提出的一种机器学习算法,是迄今为止最重要的机 ...
最新文章
- Redis的7000字笔记总结,超详细!
- 基于OpenCV的位姿估计
- mysql 返回最大值列名_多列求最大值列和列名
- linux 简介与安装(虚拟机安装)
- python集合类型_Python 的集合(set)类型
- js模块化与面向对象编程思考与实践
- 爬虫从网页中去取的数据中包含nbsp;空格
- 【Magick++透明图层合并】
- Fiddler代理设置
- ClickHouse可视化DBM Release 1.12.0
- 俞敏洪一分钟励志演讲稿
- dellr420部署os_Dell R420服务器手动安装centos7系统系列问题
- 数据库优化整理之:冷热分离
- Java学习07–前端基础之CSS
- android 登陆微信一直卡在验证身份,微信登录需要滑块验证的时候,闪退返回至登录界面...
- Kernel: printk: pr_debug:动态日志打印功能
- 实现nginx的https 功能报错:
- 洛谷 P5266 【深基17.例6】学籍管理 题解
- linux下 firefox安装flash插件
- 手动实现一年12个月的工作日日历
热门文章
- pythonjpg_使用python判断jpeg图片的完整性实例
- ssm 使用 PageHelper 插件分页
- 最全!最完整的递归下降分析法代码!!! (实验报告,代码)
- [leetcode] 3.无重复字符的最长子串
- python虚拟机优化_KVM虚拟机管理及性能优化
- linux c语言 信号,linux下基于C语言的信号编程实例
- linux驱动大小,为什么在Linux字符驱动程序读取调用中大小总是= 4096?
- An internal error occurred while showing an internal error.
- java多语言编程语言_为什么很多程序员信仰“Java是世界上最好的编程语言”
- jmeter 获取全部响应_Jmeter获取响应结果中参数出现的次数