资源简介
本实验,利用PCA 算法,对据人脸数据集进行特征提取,选择少量特征便能得到理想的结果,实验验证采用欧式距离
代码片段和文件信息
# -*- coding: utf-8 -*-
#include “ml.hpp“
import numpy as np
import os glob random cv2
#定义 特征值大小排序方法;
def percentage2n(eigValspercentage1):
sortArray=np.sort(eigVals) #升序
sortArray=sortArray[-1::-1] #逆转,即降序
arraySum=sum(sortArray)
tmpSum=0
num=0
for i in sortArray:
tmpSum+=i
num+=1
if tmpSum>=arraySum*percentage1:
return num
print num
#定义PCA 方法
def pca(datap): # 输入量为data:数据,k:
data = np.float32(np.mat(data)) #将输入数据转换为浮点型(相当于将图片转换成数字型)
rows cols = data.shape # 取数据大小(也就是图片的大小)(输入为200行,10304列)
data_mean = np.mean(data 0) # 求均值,axis = 0:压缩行,对各列求均值,返回 1* n 矩阵,也就是说,对
Z = data - np.tile(data_mean (rows 1)) #row =200 np.tile(b (2 1))#沿X轴复制1倍(相当于没有复制),再沿Y轴复制2倍也就是说Z 是减去均值后的值
D V = np.linalg.eig(Z * Z.T) # 特征值与特征向量
eigValIndice = np.argsort(D) #对特征值进行排序
n = percentage2n(D p)
print u‘向量n的数量为:‘
print n
n_eigValIndice=eigValIndice[-1:-(n+1):-1] #最大的n个特征值的下标
V1= V [:n_eigValIndice] #最大的n个特征值对应的特征向量
V1 = Z.T * V1
for i in xrange(n): # 特征向量归一化
V1[: i] /= np.linalg.norm(V1[: i])
return np.array(Z * V1) data_mean V1 #返回值
#数据读取
def loadImageSet(folder=u‘att_faces‘ sampleCount=5): # 加载图像集,随机选择sampleCount张图片用于训练,注意根据自己文件的文件进行修改
trainData = [] #将4个数据改变设定列表的形式进行存储
testData = []
yTrain = []
yTest = []
for k in range(40): #y一共有40个文件夹
folder2 = os.path.join(folder ‘s%d‘ % (k + 1)) #从第一个文件夹开始遍历查找,能够得到40个文件夹的名称
data = [cv2.imread(d.encode(‘gbk‘) 0) for d in glob.glob(os.path.join(folder2 ‘*.pgm‘))] #将获取的每一个图片都转换为列表的形式。每一幅图均为(112行,92列)
sample = random.sample(range(10) sampleCount)
trainData.extend([data[i].ravel() for i in range(10) if i in sample]) #训练集,随机抽取5个作为训练集
testData.extend([data[i].ravel() for i in range(10) if i not in sample]) # 10个数据当中,另外几个作为测试集
yTest.extend([k] * (10 - sampleCount)) # yTest增加 5位数值从0到10
yTrain.extend([k] * sampleCount) # yTrain增加 5位数值
print yTestyTrain
return np.array(trainData) np.array(yTrain) np.array(testData) np.array(yTest) #将获取并转变得到的数据转换np.array的格式
#定义主函数
def main():
xTrain_ yTrain xTest_ yTest = loadImageSet() #获取数据集,利用loadImageSet()
num_train num_test = xTrain_.shape[0] xTest_.shape[0] #获取数据集维度
print xTrain_.shapexTest_.shape # 结果为(200,10304) ,一共有200条输入数据,每一条有10304个输入值(而一张图片相当于具备 112行*92 列数据)
xTrain data_mean V = pca(xTrain_ 0.5) #,将训练数据集输入到PCA方法当中,得到新生成的数据集xT
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2018-05-31 15:43 pca算法实验\
目录 0 2018-05-31 15:40 pca算法实验\att_faces\
文件 1579 1995-02-23 18:13 pca算法实验\att_faces\README
目录 0 2018-05-31 15:40 pca算法实验\att_faces\s1\
文件 10318 1994-04-18 14:17 pca算法实验\att_faces\s1\1.pgm
文件 10318 1994-04-18 14:07 pca算法实验\att_faces\s1\10.pgm
文件 10318 1994-04-18 14:17 pca算法实验\att_faces\s1\2.pgm
文件 10318 1994-04-18 14:17 pca算法实验\att_faces\s1\3.pgm
文件 10318 1994-04-18 14:17 pca算法实验\att_faces\s1\4.pgm
文件 10318 1994-04-18 14:17 pca算法实验\att_faces\s1\5.pgm
文件 10318 1994-04-18 14:07 pca算法实验\att_faces\s1\6.pgm
文件 10318 1994-04-18 14:07 pca算法实验\att_faces\s1\7.pgm
文件 10318 1994-04-18 14:07 pca算法实验\att_faces\s1\8.pgm
文件 10318 1994-04-18 14:07 pca算法实验\att_faces\s1\9.pgm
目录 0 2018-05-31 15:40 pca算法实验\att_faces\s10\
文件 10318 1994-04-18 14:18 pca算法实验\att_faces\s10\1.pgm
文件 10318 1994-04-18 14:07 pca算法实验\att_faces\s10\10.pgm
文件 10318 1994-04-18 14:18 pca算法实验\att_faces\s10\2.pgm
文件 10318 1994-04-18 14:18 pca算法实验\att_faces\s10\3.pgm
文件 10318 1994-04-18 14:18 pca算法实验\att_faces\s10\4.pgm
文件 10318 1994-04-18 14:18 pca算法实验\att_faces\s10\5.pgm
文件 10318 1994-04-18 14:07 pca算法实验\att_faces\s10\6.pgm
文件 10318 1994-04-18 14:07 pca算法实验\att_faces\s10\7.pgm
文件 10318 1994-04-18 14:07 pca算法实验\att_faces\s10\8.pgm
文件 10318 1994-04-18 14:07 pca算法实验\att_faces\s10\9.pgm
目录 0 2018-05-31 15:40 pca算法实验\att_faces\s11\
文件 10318 1994-04-18 14:18 pca算法实验\att_faces\s11\1.pgm
文件 10318 1994-04-18 14:07 pca算法实验\att_faces\s11\10.pgm
文件 10318 1994-04-18 14:18 pca算法实验\att_faces\s11\2.pgm
文件 10318 1994-04-18 14:18 pca算法实验\att_faces\s11\3.pgm
文件 10318 1994-04-18 14:18 pca算法实验\att_faces\s11\4.pgm
............此处省略414个文件信息
评论
共有 条评论