前言
前面介绍了SVM的基本概念和一般操作步骤,若如不理解请参考:
[机器学习]机器学习笔记整理08- SVM算法原理及实现
下面来介绍一下,利用SVM进行图像识别.
图像识别
人脸识别是一项实用的技术。但是这种技术总是感觉非常神秘,在sklearn中看到了人脸识别的example,代码网址如下:
http://scikit-learn.org/0.13/auto_examples/applications/face_recognition.html#example-applications-face-recognition-py
首先介绍一些PCA和SVM的功能,PCA叫做主元分析,它可以从多元事物中解析出主要影响因素,揭示事物的本质,简化复杂的问题。计算主成分的目的是将高维数据投影到较低维空间。
PCA降维
PCA 主要 用于数据降维,对于一系列例子的特征组成的多维向量,多维向量里的某些元素本身没有区分性,比如某个元素在所有的例子中都为1,或者与1差距不大,那么这个元素本身就没有区分性,用它做特征来区分,贡献会非常小。所以我们的目的是找那些变化大的元素,即方差大的那些维,而去除掉那些变化不大的维,从而使特征留下的都是精品,而且计算量也变小了。
SVM叫做支持向量机,之前的博客有所涉及有。SVM方法是通过一个非线性映射p,把样本空间映射到一个高维乃至无穷维的特征空间中,使得在原来的样本空间中非线性可分的问题转化为在特征空间中的线性可分的问题。
实验数据采集
再看看实验采用的数据集,数据集叫做Labeled Faces in the Wild。大约200M左右。整个有10000张图片,5700个人,1700人有两张或以上的照片。相关的网址:http://vis-www.cs.umass.edu/lfw/index.html
具体实现
1.导入模块
from __future__ import print_functionfrom time import timeimport loggingimport matplotlib.pyplot as pltfrom sklearn.cross_validation import train_test_splitfrom sklearn.datasets import fetch_lfw_peoplefrom sklearn.grid_search import GridSearchCVfrom sklearn.metrics import classification_reportfrom sklearn.metrics import confusion_matrixfrom sklearn.decomposition import RandomizedPCAfrom sklearn.svm import SVC# 显示进度和错误信息logging.basicConfig(level=logging.INFO, format='%(asctime)s %(message)s')123456789101112131415123456789101112131415
###############################################################################lfw_people = fetch_lfw_people(min_faces_per_person=70, resize=0.4)# 转换为数组n_samples, h, w = lfw_people.images.shape# 对于机器学习,我们直接使用2个数据(由于该模型忽略了相对像素位置信息)X = lfw_people.data
实验结果
顶
0