模式识别与机器学习(作业4)

简介: 基于PCA降维的人脸识别

大致步骤:

  • 导入数据

一共有40个人脸,每个人脸10张图片,8张用于训练,2张用于测试。所以训练集有320张图片,测试集有80张图片。图像的分辨率为112*92,我们将其reshape为(1,10304)。由此得到训练集(320,10304),测试集(180,10304)

PCA降维

在训练时,最初采用的是特征值分解的方法,但是存在的问题是,因为维度较高,特征分解时间较长,并且分解后的特征向量存在虚数,不利于识别。因此,我采用了第二种方法,SVD分解的方法,具体的步骤请参照李航博士《统计学习原理》第二版一书(page336),这里不再一一赘述。

KNN分类

在程序中我使用Sklearn的封装包,并遍历的特征向量所取个数与精度的关系,以寻找精度与速度的最佳平衡点。

#%%导入数据
import numpy as np
import cv2
import os.path as osp
import os
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import accuracy_score
#训练集路径
osp.abspath(".")
#导入训练数据
train_x,train_y = [],[]
for i in os.listdir(osp.join(osp.realpath("."),"train_1")):
    img = cv2.imread(osp.join(osp.realpath("."),"train_1",i),0)
    train_x.append(np.reshape(img,(1,-1)))
    a,_ = i.split("_")
    train_y.append(a)
test_x,test_y = [],[]
for i in os.listdir(osp.join(osp.realpath("."),"test")):
    img = cv2.imread(osp.join(osp.realpath("."),"test",i),0)
    test_x.append(np.reshape(img,(1,-1)))
    a,_ = i.split("_")
    test_y.append(a)
train_x = np.array(train_x,dtype = np.float32).squeeze(1)
train_y = np.array(train_y)
test_x = np.array(test_x,dtype = np.float32).squeeze(1)
test_y = np.array(test_y)
#%%
class PCA:
    #定义K近邻的值必须大于1
    def __init__(self):
        self.x_train_fit = None
        self.y_train_fit = None
        self.u = None
        self.s = None
        self.vh = None
    def fit(self,x_train,y_train):
        self.x_train_fit = x_train
        self.y_train_fit = y_train
        return self
    #中心化,建立模型
    def Centralization(self,X):
        Centra = X - np.mean(self.x_train_fit,axis = 0)
        return Centra
    def model(self):
         #定义一个新矩阵
         X_ = (1/np.sqrt(len(self.Centralization(self.x_train_fit))))*self.Centralization(self.x_train_fit)
         #进行奇异值分解
         self.u, self.s, self.vh = np.linalg.svd(X_)
     #降维
    def transform(self,X,K):
        X = self.Centralization(X)
        X_dunction = (((self.vh).T[:,:K]).T).dot(X.T).T
        return X_dunction
#%%
pca = PCA()
pca.fit(train_x,train_y)
pca.model()
#%%
for k in range(1,320):
    X_test_dunction_1 = pca.transform(test_x,k)
    X_train_dunction_1 = pca.transform(train_x,k)
    knn_clf1 = KNeighborsClassifier()
    knn_clf1.fit(X_train_dunction_1, train_y)
    y_pre = knn_clf1.predict(X_test_dunction_1)
    print("准确率为:",accuracy_score(y_pre,test_y))

结果

准确率为: 0.1
准确率为: 0.3875
准确率为: 0.5625
准确率为: 0.625
准确率为: 0.7
准确率为: 0.7625
准确率为: 0.8
准确率为: 0.825
准确率为: 0.8375
准确率为: 0.825
准确率为: 0.85
准确率为: 0.8875
准确率为: 0.875
准确率为: 0.8875
准确率为: 0.8875
准确率为: 0.875
准确率为: 0.875
准确率为: 0.875
准确率为: 0.9
准确率为: 0.9
准确率为: 0.9
准确率为: 0.9125
准确率为: 0.9125
准确率为: 0.925
准确率为: 0.925
准确率为: 0.925
准确率为: 0.925
准确率为: 0.925
准确率为: 0.925
准确率为: 0.925
准确率为: 0.925
准确率为: 0.925
准确率为: 0.925
准确率为: 0.9125
准确率为: 0.9125
准确率为: 0.9125
准确率为: 0.925
准确率为: 0.925
准确率为: 0.925
准确率为: 0.925
准确率为: 0.925
准确率为: 0.925
准确率为: 0.925
准确率为: 0.925
准确率为: 0.925
准确率为: 0.925
准确率为: 0.925
准确率为: 0.925
准确率为: 0.925
准确率为: 0.925
准确率为: 0.925
准确率为: 0.925
准确率为: 0.925
准确率为: 0.925
准确率为: 0.9375
准确率为: 0.9375
准确率为: 0.9375
准确率为: 0.9375
准确率为: 0.9375
准确率为: 0.9375
准确率为: 0.9375
准确率为: 0.9375
准确率为: 0.9375
准确率为: 0.9375
准确率为: 0.9375
准确率为: 0.9375
准确率为: 0.9375
准确率为: 0.9375
准确率为: 0.9375
准确率为: 0.9375
准确率为: 0.9375
准确率为: 0.9375
准确率为: 0.9375
准确率为: 0.9375
准确率为: 0.9375
准确率为: 0.9375
准确率为: 0.9375
准确率为: 0.9375
准确率为: 0.9375
准确率为: 0.9375
准确率为: 0.925
准确率为: 0.9125
准确率为: 0.9125
准确率为: 0.925
准确率为: 0.925
准确率为: 0.925
准确率为: 0.925
准确率为: 0.925
准确率为: 0.925
准确率为: 0.925
准确率为: 0.925
准确率为: 0.925
准确率为: 0.925
准确率为: 0.925
准确率为: 0.9375
准确率为: 0.925
准确率为: 0.925
准确率为: 0.925
准确率为: 0.9375
准确率为: 0.9375
准确率为: 0.9375
准确率为: 0.9375
准确率为: 0.9375
准确率为: 0.9375
准确率为: 0.9375
准确率为: 0.9375
准确率为: 0.9375
准确率为: 0.9375
准确率为: 0.9375
准确率为: 0.9375
准确率为: 0.9375
准确率为: 0.9375
准确率为: 0.9375
准确率为: 0.9375
准确率为: 0.9375
准确率为: 0.9375
准确率为: 0.9375
准确率为: 0.9375
准确率为: 0.9375
准确率为: 0.9375
准确率为: 0.9375
准确率为: 0.95
准确率为: 0.9375
准确率为: 0.9375
准确率为: 0.9375
准确率为: 0.9375
准确率为: 0.9375
准确率为: 0.9375
准确率为: 0.9375
准确率为: 0.9375
准确率为: 0.95
准确率为: 0.95
准确率为: 0.95
准确率为: 0.95
准确率为: 0.95
准确率为: 0.9375
准确率为: 0.9375
准确率为: 0.9375
准确率为: 0.9375
准确率为: 0.925
准确率为: 0.925
准确率为: 0.9375
准确率为: 0.9375
准确率为: 0.9375
准确率为: 0.9375
准确率为: 0.95
准确率为: 0.9375
准确率为: 0.95
准确率为: 0.95
准确率为: 0.9375
准确率为: 0.9375
准确率为: 0.9375
准确率为: 0.9375
准确率为: 0.9375
准确率为: 0.9375
准确率为: 0.9375
准确率为: 0.9375
准确率为: 0.925
准确率为: 0.9375
准确率为: 0.9375
准确率为: 0.925
准确率为: 0.925
准确率为: 0.925
准确率为: 0.925
准确率为: 0.925
准确率为: 0.925
准确率为: 0.925
准确率为: 0.925
准确率为: 0.925
准确率为: 0.9375
准确率为: 0.9375
准确率为: 0.9375
准确率为: 0.95
准确率为: 0.95
准确率为: 0.95
准确率为: 0.95
准确率为: 0.95
准确率为: 0.95
准确率为: 0.95
准确率为: 0.95
准确率为: 0.95
准确率为: 0.95
准确率为: 0.95
准确率为: 0.95
准确率为: 0.95
准确率为: 0.95
准确率为: 0.95
准确率为: 0.95
准确率为: 0.95
准确率为: 0.95
准确率为: 0.95
准确率为: 0.95
准确率为: 0.95
准确率为: 0.95
准确率为: 0.95
准确率为: 0.95
准确率为: 0.95
准确率为: 0.95
准确率为: 0.95
准确率为: 0.95
准确率为: 0.95
准确率为: 0.95
准确率为: 0.95
准确率为: 0.9375
准确率为: 0.9375
准确率为: 0.9375
准确率为: 0.9375
准确率为: 0.95
准确率为: 0.95
准确率为: 0.95
准确率为: 0.95
准确率为: 0.95
准确率为: 0.95
准确率为: 0.95
准确率为: 0.95
准确率为: 0.95
准确率为: 0.95
准确率为: 0.95
准确率为: 0.95
准确率为: 0.95
准确率为: 0.95
准确率为: 0.95
准确率为: 0.95
准确率为: 0.95
准确率为: 0.95
准确率为: 0.95
准确率为: 0.95
准确率为: 0.95
准确率为: 0.95
准确率为: 0.95
准确率为: 0.95
准确率为: 0.95
准确率为: 0.95
准确率为: 0.95
准确率为: 0.95
准确率为: 0.95
准确率为: 0.95
准确率为: 0.95
准确率为: 0.95
准确率为: 0.95
准确率为: 0.95
准确率为: 0.95
准确率为: 0.95
准确率为: 0.95
准确率为: 0.95
准确率为: 0.95
准确率为: 0.95
准确率为: 0.95
准确率为: 0.95
准确率为: 0.95
准确率为: 0.95
准确率为: 0.95
准确率为: 0.95
准确率为: 0.95
准确率为: 0.95
准确率为: 0.95
准确率为: 0.95
准确率为: 0.95
准确率为: 0.95
准确率为: 0.95
准确率为: 0.95
准确率为: 0.95
准确率为: 0.95
准确率为: 0.95
准确率为: 0.95
准确率为: 0.95
准确率为: 0.95
准确率为: 0.95
准确率为: 0.95
准确率为: 0.95
准确率为: 0.95
准确率为: 0.95
准确率为: 0.95
准确率为: 0.95
准确率为: 0.95
准确率为: 0.95
准确率为: 0.95
准确率为: 0.95
准确率为: 0.95
准确率为: 0.95
准确率为: 0.95
准确率为: 0.95
准确率为: 0.95
准确率为: 0.95
准确率为: 0.95
准确率为: 0.95
准确率为: 0.95
准确率为: 0.95
准确率为: 0.95
准确率为: 0.95
准确率为: 0.95
准确率为: 0.95
准确率为: 0.95
准确率为: 0.95
准确率为: 0.95
准确率为: 0.95
准确率为: 0.95
准确率为: 0.95
准确率为: 0.95
准确率为: 0.95
准确率为: 0.95
准确率为: 0.95
准确率为: 0.95
准确率为: 0.95
准确率为: 0.95
准确率为: 0.95
准确率为: 0.95
准确率为: 0.95
准确率为: 0.95
准确率为: 0.95
准确率为: 0.95
准确率为: 0.95
准确率为: 0.95
准确率为: 0.95
准确率为: 0.95
准确率为: 0.95
准确率为: 0.95
准确率为: 0.95
准确率为: 0.95
相关文章
|
9天前
|
机器学习/深度学习 算法 数据挖掘
机器学习第五次作业
机器学习第五次作业包含三个题目。第一题实现高斯贝叶斯分类和高斯朴素贝叶斯分类,分别用于判断瓜的好坏。第二题使用EM算法对数据进行聚类,输出两个类别的均值、方差和先验概率。第三题内容未完整展示。
32 0
机器学习第五次作业
|
9天前
|
机器学习/深度学习 计算机视觉 Python
坐标下降求解人脸表示(机器学习作业04)
这是机器学习第四次作业的解答,包含两道题目。第一题涉及数学推导,给出了详细的求解过程。第二题则通过 Python 代码实现图像处理,包括读取单张图片和批量读取文件夹中的图片,并将图像数据转换为矩阵形式。
11 0
坐标下降求解人脸表示(机器学习作业04)
|
9天前
|
机器学习/深度学习 算法 数据处理
EM算法对人脸数据降维(机器学习作业06)
本文介绍了使用EM算法对人脸数据进行降维的机器学习作业。首先通过加载ORL人脸数据库,然后分别应用SVD_PCA、MLE_PCA及EM_PCA三种方法实现数据降维,并输出降维后的数据形状。此作业展示了不同PCA变种在人脸数据处理中的应用效果。
13 0
|
机器学习/深度学习 算法 数据可视化
模式识别与机器学习--决策树实战
模式识别与机器学习--决策树实战
210 0
模式识别与机器学习--决策树实战
|
机器学习/深度学习 人工智能 并行计算
机器学习/人工智能 大作业:手写数字识别系统
机器学习/人工智能 大作业:手写数字识别系统
929 0
机器学习/人工智能 大作业:手写数字识别系统
|
机器学习/深度学习 存储 关系型数据库
【吴恩达课后编程作业】第三周作业 (附答案、代码)隐藏层神经网络 神经网络、深度学习、机器学习
【吴恩达课后编程作业】第三周作业 (附答案、代码)隐藏层神经网络 神经网络、深度学习、机器学习
433 0
【吴恩达课后编程作业】第三周作业 (附答案、代码)隐藏层神经网络 神经网络、深度学习、机器学习
|
机器学习/深度学习 存储 移动开发
【吴恩达课后编程作业】第二周作业 (附答案、代码) Logistic回归 神经网络、深度学习、机器学习
【吴恩达课后编程作业】第二周作业 (附答案、代码) Logistic回归 神经网络、深度学习、机器学习
376 0
【吴恩达课后编程作业】第二周作业 (附答案、代码) Logistic回归 神经网络、深度学习、机器学习
|
机器学习/深度学习 数据挖掘 Python
模式识别与机器学习(作业6)基于聚类的图片分割
流程: 读图片(512, 512, 3)–>下采样,降低维度(256, 256, 3)–>将通道展平,data = (65536, 3)–>归一化
96 0
模式识别与机器学习(作业6)基于聚类的图片分割
|
机器学习/深度学习 编解码 计算机视觉
模式识别与机器学习(作业5)基于PCA–LDA的人脸识别
本次的实验是在模式识别与机器学习(作业4),PCA降维的基础上加入了线性判别分析,对维度进行了进一步的降低。
182 0
|
12天前
|
机器学习/深度学习 人工智能 自然语言处理
【MM2024】阿里云 PAI 团队图像编辑算法论文入选 MM2024
阿里云人工智能平台 PAI 团队发表的图像编辑算法论文在 MM2024 上正式亮相发表。ACM MM(ACM国际多媒体会议)是国际多媒体领域的顶级会议,旨在为研究人员、工程师和行业专家提供一个交流平台,以展示在多媒体领域的最新研究成果、技术进展和应用案例。其主题涵盖了图像处理、视频分析、音频处理、社交媒体和多媒体系统等广泛领域。此次入选标志着阿里云人工智能平台 PAI 在图像编辑算法方面的研究获得了学术界的充分认可。
【MM2024】阿里云 PAI 团队图像编辑算法论文入选 MM2024