• 基于PCA的特征提取


    图像处理方面的知识也学了一段时间了,总是光看理论的话,感觉联系不上实际,第一次把理论综合的实现出来,对这些理论的印象才感觉的更深刻,也能够为后续的学习打下良好的基础。

    PCA是比较老的算法,但是可靠性挺好,对于我这种新手,练练手还是不错的。

    下面开始对这些算法说一说我自己的理解,如果有不正确的地方还请各位牛人指点。

    主成分分析(PCA)是多变量分析中一项很老的技术,源于通信理论中的K-L变换,它考虑的是对于d维空间中的n个向量X1,X2......Xn,如何在低维空间中进行表示,这需要对其空间进行变换。

    变换具体的表示如下:


    其中即为对样本的一种近似表示,是样本的均值,

    就是在d'维空间中的主成份分量,也就是经过PCA提取后的一组特征。

    是这d'维空间的一组基。

    这样即为原样本在d'维空间的一种近似。

    看到这,还不知道是如何计算得到的,具体的推理过程就不细说了,想知道的可以自行查阅相关资料,我只写一下他们的计算公式。

    是散布矩阵S的前d‘个特征向量,是散布矩阵S的前d‘个特征值,而散布矩阵S为,其中Z为样本矩阵X中的每个样本减去样本均值后得到的矩阵。


    S是d*d的矩阵,计算量很大,幸运的是有一种快速计算的方法,这里我们考虑,一般情况下样本数目n原小于样本维数d,所以R的尺寸远小于散布矩阵S。

    设是R的特征向量为,则有

                                            

    对上式两边同时左乘,得

                                         

    说明为散布矩阵S的特征值,至此,可以计算小矩阵R的特征向量来得到散布矩阵S的特征向量。

    当计算出散布矩阵S的特征向量和特征值时,就可以对样本进行表示了。

    假设计算的是前20个特征值和特征向量,那么样本就可以用这20个特征值对其进行表示,这也就是样本的主成份。


    快速PCA计算的matlab实现代码如下:


    function [ pcaA   V] =fastPCA( A,k )

    %输入:A------样本矩阵,每行为一个样本
    %         k------降维至k维
    %输出:pcaA----降维后K维样本特征向量组成的矩阵,每行一个样本,列数k为降维后的样本特征维数
    %     V-------主成分分量
    [r,c]=size(A);
    %样本均值
    meanVec = mean(A);
    %计算协方差矩阵的转置 covMatT
    Z=(A-repMat(meanVec,r,1));
    covMatT =Z*Z';
    %计算covMatT的前k个本征值和本征向量
    [V D] = eigs(covMatT,k);
    %得到协方差矩阵covMatT'的本征向量
    V = Z'*V;
    %本征向量归一化为单位本征向量
    for i=1:k
        V(:,i)=V(:,i)/norm(V(:,i));
    end


    pcaA = Z*V;


    end

  • 相关阅读:
    进程(二)
    操作系统简介-计算机历史、进程(一)
    MemCahce For Java
    fiddler:工具栏介绍
    fiddler相关
    HTTP:Cookie
    在eclipse中开发servlet流程
    servlet 开发入门&生命周期
    HTTP响应
    HTTP:请求头信息
  • 原文地址:https://www.cnblogs.com/anyuan9/p/6171579.html
Copyright © 2020-2023  润新知