• 大小: 3.63MB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2023-10-23
  • 语言: Python
  • 标签: pca算法  

资源简介

本实验,利用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个文件信息

评论

共有 条评论