SVM在中等维度的分类问题中,有较好的表现,其在某种程度上构建了一个简单的网络结构,类似于神经网络中的RBF神经网络。
人脸数据集是经典的分类和聚类问题中经常使用的数据集,维度相对不高,灰度图像,这里选用64*64的人脸图像,将其reshape从1*64^2的一维数组,共40类样本,每组10个。
通常在SVM解决较高维度问题时,需要将其适度降维,这里选用传统的线性降维方法PCA(KPCA同样适用,只是人脸数据集PCA已经够用,不用换成更复杂的非线性降维)。
- 导入相关模块;
- 获取数据;
- 标准化(这里可以不用,图像数据一般已经是标准的)
- 比较降维到不同的维度下,各自的效果对比(这时SVM的参数不变,选用RBF核函数)
- 用网格搜索最佳的pca参数和SVM参数,效果演示。
以下为实验代码模块
(1)导入模块
# -*-encoding:utf-8-*-
'''
created by zwg in 2017-03-01
'''
import numpy,time
from sklearn import datasets
from sklearn import svm
from sklearn import decomposition
from sklearn import manifold
from sklearn.cross_validation import train_test_split as tts
from sklearn import svm,neural_network
from sklearn.metrics import classification_report,precision_score,recall_score,f1_score
from sklearn import pipeline
from sklearn.preprocessing import StandardScaler,MinMaxScaler
from sklearn.grid_search import GridSearchCV
from matplotlib import pyplot
import matplotlib.colors as colors
(2)获取数据
def get_data():
face_data=datasets.fetch_olivetti_faces()
#face_data=datasets.load_iris()
data=face_data.data
target=face_data.target
return data,target
(3)PCA函数
def pca(x,n):
pca_learner=decompositi