精华内容
下载资源
问答
  • MATLAB自带工具箱实现PCA降维代码
    2021-04-18 08:43:06

    PCA基本流程:

    1、训练集矩阵算协方差矩阵A;

    2、算协方差矩阵特征值与特征向量;

    3、按特征值的大小排列特征矩阵,得B,对应的特征值(按从大到小排列)组成向量a;

    4、A*B得到去关联的新矩阵C,A与C的对应位置物理意义相同(指样本维度和样本数),但是去掉了关联,并且按特征贡献度大小排列;

    5、选贡献度百分比或降维后的维度。例如百分之90,则是取满足sum(a(1:n))/sum(a)>90%的最小的n;如果直接定降维后的维度,则直接设置个n;

    6、任一样本的降维公式相同,对于样本x:x*B(1:n,:)。

    原理说明:

    步骤3,4本质上是基变换原理。4可以去关联的原理与马氏距离相仿。贡献度的原理与协方差矩阵的数学意义相关。转换矩阵相关的计算必须在训练集上完成是因为协方差矩阵的计算需要一个样本集,如将测试集样本加入这个样本集,则训练集中已经包含了测试集信息(例如某一维特征的均值)。

    matlab函数说明:

    [coeff,score,latent,tsquare] = pca(feature);%我们这里需要他的pc和latent值做分析

    feature是被降维的特征,每一行是一个特征,列数代表总的特征个数,比如一个图片的HOG特征是96维,总共有8000个HOG特征,那么feature的维度是8000×96,我们的目标就是将其降维(假设将96维降到50维,)那么我们期望的降维后feature就变成了我们需要的feature_after_PCA:8000×50

    coeff:步骤3算出来的矩阵B,本质上是一个基变换矩阵。数学意义是协方差矩阵按特征值的大小排列的特征矩阵。

    score:步骤4算出来的矩阵C,与A同维同物理意义。

    latent:步骤3算出来的向量a,存储了贡献度,数学意义是协方差矩阵特征值从大到小排列。

    用途:

    根据latent计算满足某贡献度所需的样本维度,或直接定一个样本维度,然后feature*coeff(1:n,:)降维。把训练集中所有样本计算feature*coeff就是score,当然,feature*coeff(1:n,:)这个式子更大的用途是计算测试集中的样本。

    重点!!!

    pca内建函数在算协方差的时候先减了个样本均值,所以这里feature*coeff不是score,需要先算:

    x0 = bsxfun(@minus,feature,mean(feature,1));

    然后x0*coeff才是score。

    更多相关内容
  • PCA降维MATLAB程序

    2018-11-05 11:00:14
    PCA降维MATLAB程序,主要用于光谱的降维PCA降维MATLAB程序,主要用于光谱的降维
  • (如果对你有帮助记得点赞分享)数据集和详细介绍见博客:https://blog.csdn.net/weixin_43863744/article/details/106062212
  • 整理了各位博主的伪代码,并写成matlab程序,然后自己利用matlab自带的pca函数进行计算,两种方法进行比较,程序只需要导入自己数据就能运行。
  • lda降维matlab代码硅Craft.io SiProcess是图像处理实验室存储库。 在这里,您会发现一些Matlab / Python算法可以对数据进行线性分类。 分类 分类代码导入您的数据(矢量化图像的矩阵),使用进行降维,并使用/分隔...
  • 光谱数据降维处理,结合了主成分分析和LDA方法,可直接运行
  • 新手教程,含搜集资料加代码。高光谱图像分类是高光谱遥感对地观测技术的一项重要内容,在军事及民用领域都有着重要的应用。然而,高光谱图像的高维特性、波段间高度相关性、光谱混合等使高光谱图像分类面临巨大挑战...
  • 由于本人最近需要处理的数据特征太多,导致分类不准确,...整理了各位博主的伪代码,并写成matlab程序,然后自己利用matlab自带的pca函数进行计算,两种方法进行比较,程序已全副武装,只需要导入自己数据就能运行。
  • matlab代码步骤 pca-svm pca+svm+matlab for face detection demo.m包含每个步骤的详细解释 我在博客中对该代码的条理进行了整理,具体可以看我的博客。博客地址: 如果觉得对你有帮助,请给个star支持下作者~
  • 主成分分析PCA降维MATLAB程序实现代码

    千次下载 热门讨论 2011-03-09 20:41:54
    MATLAB中实现用主成分分析(PCA)的方法对矩阵的降维.其中包括具体程序实现代码,为了增加程序的可读性,对程序的主要步骤都进行了解释。
  • matlab鸢尾花降维代码
  • PCA降维代码

    2021-04-18 08:43:04
    function y = pca(mixedsig)if nargin == 0error('You must supply the mixed data as input argument.');endif length(size(mixedsig))>2error('Input data can not have more than two dimensions. ');endif an...

    function y = pca(mixedsig)

    if nargin == 0

    error('You must supply the mixed data as input argument.');

    end

    if length(size(mixedsig))>2

    error('Input data can not have more than two dimensions. ');

    end

    if any(any(isnan(mixedsig)))

    error('Input data contains NaN''s.');

    end

    %——————————————去均值————————————

    meanValue = mean(mixedsig')';

    mixedsig = mixedsig - meanValue * ones(1,size(meanValue,2));

    [Dim,NumofSampl] = size(mixedsig);

    oldDimension = Dim;

    fprintf('Number of signals: %d\n',Dim);

    fprintf('Number of samples: %d\n',NumofSampl);

    fprintf('Calculate PCA...');

    firstEig = 1;

    lastEig = Dim;

    covarianceMatrix = cov(mixedsig',1);    %计算协方差矩阵

    [E,D] = eig(covarianceMatrix);          %计算协方差矩阵的特征值和特征向量

    %———计算协方差矩阵的特征值大于阈值的个数lastEig———

    rankTolerance = 1e-5;

    maxLastEig = sum(diag(D)) > rankTolerance;

    lastEig = maxLastEig;

    %——————————降序排列特征值——————————

    eigenvalues = flipud(sort(diag(D)));

    %—————————去掉较小的特征值——————————

    if lastEig < oldDimension

    lowerLimitValue = (eigenvalues(lastEig) + eigenvalues(lastEig + 1))/2;

    else

    lowerLimitValue = eigenvalues(oldDimension) - 1;

    end

    lowerColumns = diag(D) > lowerLimitValue;

    %—————去掉较大的特征值(一般没有这一步)——————

    if firstEig > 1

    higherLimitValue = (eigenvalues(firstEig - 1) + eigenvalues(firstEig))/2;

    else

    higherLimitValue = eigenvalues(1) + 1;

    end

    higherColumns = diag(D) < higherLimitValue;

    %—————————合并选择的特征值——————————

    selectedColumns =lowerColumns & higherColumns;

    %—————————输出处理的结果信息—————————

    fprintf('Selected[ %d ] dimensions.\n',sum(selectedColumns));

    fprintf('Smallest remaining (non-zero) eigenvalue[ %g ]\n',eigenvalues(lastEig));

    fprintf('Largest remaining (non-zero) eigenvalue[ %g ]\n',eigenvalues(firstEig));

    fprintf('Sum of removed eigenvalue[ %g ]\n',sum(diag(D) .* (~selectedColumns)));

    %———————选择相应的特征值和特征向量———————

    E = selcol(E,selectedColumns);

    D = selcol(selcol(D,selectedColumns)',selectedColumns);

    %——————————计算白化矩阵———————————

    whiteningMatrix = inv(sqrt(D)) * E';

    dewhiteningMatrix = E * sqrt(D);

    %——————————提取主分量————————————

    y = whiteningMatrix * mixedsig;

    %——————————行选择子程序———————————

    function newMatrix = selcol(oldMatrix,maskVector)

    if size(maskVector,1)~ = size(oldMatrix,2)

    error('The mask vector and matrix are of uncompatible size.');

    end

    numTaken = 0;

    for i = 1:size(maskVector,1)

    if maskVector(i,1) == 1

    takingMask(1,numTaken + 1) == i;

    numTaken = numTaken + 1;

    end

    end

    newMatrix = oldMatrix(:,takingMask);

    用2010版本运行出错

    ??? Error using ==> pca at 8

    You must supply the mixed data as input argument.

    该如何修改

    展开全文
  • PCA降维MATLAB使用案例

    千次阅读 2018-12-26 10:23:55
    已经不是一次使用PCA了,但是这么多...首先使用MATLAB自带的PCA函数 [pc,score,latent,tsquare] = pca(feature) %feature是799*216的矩阵 用latent来计算降维后取多少维度能够达到自己需要的精度 cumsum(latent)....

    已经不是一次使用PCA了,但是这么多参数一眼看去还是不能很快的明白,如果我想对一个二维特征矩阵降维,到底应该怎么做,这里作为备忘记录一下。
    在这里插入图片描述

    • 首先使用MATLAB自带的PCA函数
      [pc,score,latent,tsquare] = pca(feature) %feature是799*216的矩阵

    • 用latent来计算降维后取多少维度能够达到自己需要的精度
      cumsum(latent)./sum(latent)
      一般取到高于95%就可以了,这里我们取前40维,精度达到了0.9924

    • pca函数已经给出了所有的转换后矩阵表示,也就是输出的score项,取出前40维就是降维后特征
      feature_after_PCA=score(:,1:40)

    • 精度分析

    ExFeatureACCSRCC
    1216维10.8552
    240维0.99240.8494
    330维0.98440.8577
    4*20维0.96420.8839
    515维0.94180.8811
    610维0.89720.7155

    可见也不是取得维数越多效果越好,降维不仅能起到加快计算速度的作用,说不定还能去除一些冗余干扰提高拟合效果呢

    展开全文
  • svd算法matlab代码主成分分析(PCA)实验 主成分分析(PCA)非常有用,并且是统计和机器学习中常用的算法之一。 该工具被广泛用于各种应用中,例如用于可视化和分析的降维,压缩,离群值检测和图像处理。 PCA是我最...
  • pca降维matlab代码KDE - 内核本地描述符 这是一个 Matlab 包,它实现了 ICMR 2015 上的“具有隐式旋转匹配的内核本地描述符”中介绍的内核本地描述符。 它是什么? 此代码实现: 提取我们的本地描述符 描述符后...
  • lda降维matlab代码降维pca-lda CS的PCA和LDA分析:551​​模式重建过程hw3 为输出运行patternHw3_main脚本 随代码一起附上报告,该报告分析作业中的给定数据 LDA代码来自Matlab工具箱,用于降维 该工具箱可以从以下...
  • PCA降维算法原理及代码实现(python和matlab

    千次阅读 多人点赞 2019-04-19 19:46:44
    PCA降维的基本思想:通过计算数据矩阵的协方差矩阵,然后得到协方差矩阵的特征值、特征向量、选择特征值最大(即方差最大)的K个特征所对应的特征向量组成的矩阵,这样可以将数据矩阵转换到新的空间当中,实现数据...

     

    常见的数据降维算法有:奇异值分解(SVD)、主成分分析(PCA)、因子分析(FA)、独立成分分析(ICA)。

    PCA降维的基本思想:通过计算数据矩阵的协方差矩阵,然后得到协方差矩阵的特征值、特征向量、选择特征值最大(即方差最大)的K个特征所对应的特征向量组成的矩阵,这样可以将数据矩阵转换到新的空间当中,实现数据特征的降维。

    PCA降维有两种思路:一种是特征值分解协方差矩阵,一种是奇异值分解协方差矩阵。下面介绍基于奇异值分解的方法

    一:关于特征值分解

    a)特征值与特征向量

    如果一个向量v是矩阵A的特征向量,将一定可以表示成下面的形式

    其中,λ是特征向量v对应的特征值,一个矩阵的一组特征向量是一组正交向量。

    b)特征值分解矩阵

    对于矩阵A,有一组特征向量v,将这组向量进行正交化单位化,就能得到一组正交单位向量。特征值分解,就是将矩阵A分解为如下式:

    其中,Q是矩阵A的特征向量组成的矩阵,则是一个对角阵,对角线上的元素就是特征值。

    二:SVD分解矩阵原理

    奇异值分解是一个能适用于任意矩阵的一种分解的方法,对于任意矩阵A总是存在一个奇异值分解:

    假设A是一个m*n的矩阵,那么得到的U是一个m*m的方阵,U里面的正交向量被称为左奇异向量。Σ是一个m*n的矩阵,Σ除了对角线其它元素都为0,对角线上的元素称为奇异值,是v的转置矩阵,是一个n*n的矩阵,它里面的正交向量被称为右奇异值向量。而且一般来讲,我们会将Σ上的值按从大到小的顺序排列。

    SVD分解矩阵A的步骤:

    (1) 求的特征值和特征向量,用单位化的特征向量构成 U。

    (2) 求的特征值和特征向量,用单位化的特征向量构成 V。

    (3) 将或者的特征值求平方根,然后构成 Σ

    三:实现PCA算法的步骤:

    (1)去均值(即去中心化)每一位特征减去各自的平均值。

    (2)计算协方差矩阵1/n*xx'

       (3)   用奇异值分解法求协方差矩阵1/n*xx'的特征值与特征向量

    (4)对特征值从大到小排序,选择其中最大的k个,然后将其对应的k个特征向量分别作为行向量组成特征向量矩阵P

    (5)将数据转换到K个特征向量构建的新空间中即Y=PX

    如何选择主成分个数K

    1-    <=t

    Sii为SVD分解时产生的S矩阵

    t的值可以自己设置,t取0.01则代表PCA保留了99%的信息。

    最好的K维特征是将n维样本点转换为K维后,每一维上的样本方差都很大。

     

    补:matlab自带的mean函数用法。mean(x)默认求矩阵列的平均值。mean(x,2)求矩阵行的平均值。

    std函数:求矩阵的标准差

    std(A)是最常见的求标准差的函数,除以的是N-1

    std(A,flag)代表的是用哪一个标准差函数,如果取0则代表除以N-1,如果1代表的是除以N

    std(A,flag,dim)第三个参数代表的是按照列求标准差,还是按照行求标准差。

    repmat函数处理大矩阵且内容重复时会用到

    eg  B=repmat([1 2;3 4],2,3)

    B= 1 2  1 2 1 2

          3 4  3 4 3 4

          1 2  1 2 1 2

          3 4  3 4 3 4  

    length(x)矩阵   M行N列返回M和N这两个数的最大值。

    归一化(按列减均值)

    标准化(按列缩放到指定范围)

    正则化(范数)

    eig函数的用法

    a=[-1,1,0;-4,3,0;1,0,2]

    eig(a)= [2,1,1]'

    [v,d]=eig(a)

    v =

             0    0.4082    0.4082
             0    0.8165    0.8165
        1.0000   -0.4082   -0.4082

    d =

         2     0     0
         0     1     0
         0     0     1

    v是特征向量对应的特征矩阵。d是特征向量组成的矩阵。

    rot函数的用法

    b=rot90(a)逆时针旋转90度

    b=rot90(a,-1)顺时针旋转90度

    matlab代码实现(待改进:此方法采用的是基于特征值分解的方法,改进为用奇异值分解的方法

    function S=princa(X)
    [m,n]=size(X); %计算矩阵的行m和列n
     
    %-------------第一步:标准化矩阵-----------------%
    mv=mean(X); %计算各变量的均值
    st=std(X); %计算各变量的标准差
    X=X-repmat(mv,m,1); %标准化矩阵X
     
    %-------------第二步:计算相关系数矩阵-----------------%
    % R1=X'*X/(m-1); %方法一:协方差矩阵计算公式
    % R2=cov(X);     %方法二:协方差矩阵计算函数
    R=corrcoef(X); %方法三:相关系数矩阵函数
     
    %-------------第三步:计算特征向量和特征值-----------------%
    [V,D]=eig(R);       %计算矩阵R的特征向量矩阵V和特征值矩阵D,特征值由小到大
          %将特征向量矩阵V从大到小排序
      %将特征值矩阵由大到小排序
    E=diag(D);          %将特征值矩阵转换为特征值向量
     
    %-------------第四步:计算贡献率和累计贡献率-----------------%
    ratio=0; %累计贡献率
    for k=1:n
        r=E(k)/sum(E);   %第k主成份贡献率
        ratio=ratio+r;  %累计贡献率
        if(ratio>=0.8)  %取累计贡献率大于等于90%的主成分
            q=k;
            break;
        end
    end
     
    %-------------第五步:计算得分-----------------%
    V=V(:,1:q);
    S=X*V;

    python代码实现

    import numpy as np
    def pca(X,k):
        n_samples, n_features = X.shape
        mean=np.array([np.mean(X[:,i]) for i in range(n_features)])
        norm_X=X-mean
        scatter_matrix=np.dot(np.transpose(norm_X),norm_X)
        eig_val, eig_vec = np.linalg.eig(scatter_matrix)
        eig_pairs = [(np.abs(eig_val[i]), eig_vec[:,i]) for i in range(n_features)]
        eig_pairs.sort(reverse=True)
        feature=np.array([ele[1] for ele in eig_pairs[:k]])
        data=np.dot(norm_X,np.transpose(feature))
        return data
        #print(eig_pairs)
    X = np.array([[-1, 1], [-2, -1], [-3, -2], [1, 1], [2, 1], [3, 2]])
    print(pca(X,1))

    利用sklearn中的PCA函数实现

    from sklearn.decomposition import PCA
    import numpy as np
    X = np.array([[-1, 1], [-2, -1], [-3, -2], [1, 1], [2, 1], [3, 2]])
    pca=PCA(n_components=1)
    pca.fit(X)
    print(pca.transform(X))
    #ske

    参考资料:写得巨好超级推荐https://blog.csdn.net/program_developer/article/details/80632779

    展开全文
  • 稀疏降维matlab代码重新讨论稀疏PCA 稀疏主成分分析(PCA)是一种流行的无监督方法,用于尺寸缩减和特征选择。 与标准PCA相比,稀疏PCA的主要优点是通过在加载矢量的元素(即权重)上施加零强制约束而获得了更高的...
  • L1_PCA降维
  • PCA降维也称为主成分分析法,是一种使用最广泛的数据降维算法。PCA的主要思想是将n维特征映射到k维上,这k维是全新的正交特征也被称为主成分,是在原有n维特征的基础上重新构造出来的k维特征。 01实例分析 本篇...
  • PCA降维算法总结以及matlab实现PCA

    万次阅读 多人点赞 2017-03-09 09:12:14
    http://blog.csdn.net/watkinsong/article/details/8234766 ... PCA的一些基本资料 最近因为最人脸表情识别,提取的gabor特征太多了,所以需要用PCA进行对提取的特征进行降维
  • 我现在找到一些相关代码但不...代码为%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%function [Wpca,Xpca, mPca, eigNum] = PCA1( X,dimPara )%%%%%%%%%%%%%%%%%%%%%%%%%%%...
  • matlab实现PCA降维

    千次阅读 2018-09-18 20:28:22
    利用PCA,把二维数据降为一维数据 load ('ex7data1.mat'); %变成一维 K = 1; %对数据归一化 means = mean(X); X_means = bsxfun(@minus, X, means); sigma = std(X_means); X_std = bsxfun(@rdivide, X_means, ...
  • 本学期有一门《超高维度数据分析》的课程,老师给了一些代码有助于我们消化理论知识
  • 主成分分析(PrincipalComponents Analysis,PCA)作为降维中最经典的方法,至今已有100多年的历史,它属于一种线性、非监督、全局的降维算法。 PCA旨在找到数据中的主成分,并利用这些主成分表征原始数据,从而达到降维...
  • Iris数据集PCA降维显示

    2016-03-15 10:06:41
    对IRIS数据集进行协方差分析,降维,二维显示分类。
  • matlab 中自带的函数就不必怀疑。princomp:principal componet analysis (PCA).[COEFF,SCORE,latent,tsquare]=princomp(X);参数:%%%%%%%%%%%%%%%%%%INPUT: X是数据:n*p,其中n代表样本个数,p代表特征维数%%%%%%%%...
  • PCA故障诊断matlab代码,只需输入训练数据和测试数据即可。
  • PCA降维MATLAB实践)

    万次阅读 2017-08-25 17:00:55
    PCA原理PCA的原理就是将原来的样本数据投影到一个新的空间中,相当于我们在矩阵分析里面学习的将一组矩阵映射到另外的坐标系下。通过一个转换坐标,也可以理解成把一组坐标转换到另外一组坐标系下,但是在新的坐标系...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,580
精华内容 1,032
关键字:

pca降维matlab代码

matlab 订阅