精华内容
下载资源
问答
  • 主成分分析 matlab

    2018-01-08 12:05:01
    使用matlab进行 主成分分析 PCA,代码能够运行 使用matlab进行 主成分分析 PCA,代码能够运行
  • 主成分分析matlab

    2014-08-17 17:00:16
    对图像进行主成分分析,来提取重要的信息。适用于变化检测
  • PCA主成分分析MATLAB实现代码
  • 主成分分析MATLAB程序

    2016-06-05 22:11:30
    主成分分析MATLAB程序代码
  • pca kernel pca principal component analysis kernel principal component analysis 主成分分析主成分分析 Matlab算法源代码
  • 文章目录美国国债主成分分析 Matlab1.读入数据2.PCA3.主成分和宏观变量 美国国债主成分分析 Matlab 1.读入数据 [data,txt,raw] = xlsread('feds200628.csv'); [GDP,GDP_txt,~] = xlsread('US_GDP_growth_quaterly....

    美国国债主成分分析 Matlab

    1.读入数据

    [data,txt,raw]  = xlsread('feds200628.csv');
    [GDP,GDP_txt,~] = xlsread('US_GDP_growth_quaterly.CSV','F173:G295');
    [Gap,Gap_txt,~] = xlsread('Output_Gap.CSV','A166:G288');
    
    VIX = log(data(:,1));
    y   = data(:,2:end);
    
    

    2.PCA

    cov   =  nancov(y);
    [A,B] =  eig(cov);
    A     =  flip(A,2);
    B     =  flip(B,2);
    s     =  sum(B);
    exp   =  s/sum(s);
    cum   =  cumsum(exp);
    
    % plot PCA loadings
    figure(1)
    plot([A(:,1) A(:,2) A(:,3)*(-1)]);
    legend('PC1','PC2','PC3');
    ylabel('Loadings');xlabel('Maturities')
    title ('Principal Components Loadings')
    

    在这里插入图片描述
    Figure 1: Loadings of the first three principal components

    PC        =  y*A;
    rawdata   =  PC*A';
    PC(:,2:3) =  PC(:,2:3)*(-1);
    PCs       =  [PC(:,1) PC(:,2) PC(:,3)];
    
    % plot PCA level
    figure(2)
    t1    =  datenum(txt(2:end,1),'yyyy/mm/dd');
    
    subplot(3,1,1);plot(t1,PCs(:,1));
    datetick('x','yyyy');
    recessionplot
    title('First principal component levels')
    
    subplot(3,1,2);plot(t1,PCs(:,2));
    datetick('x','yyyy');
    recessionplot
    title('Second principal component levels')
    
    subplot(3,1,3);plot(t1,PCs(:,3));
    recessionplot
    title('Third principal component levels');
    datetick('x','yyyy');
    
    % test stationary
    [test1,p1] = adftest(PCs(:,1))
    [test2,p2] = adftest(PCs(:,2))
    [test3,p3] = adftest(PCs(:,3))
    

    在这里插入图片描述
    Figure 2: Time series levels of the first three principal components

    3.主成分和宏观变量

    % plot output gap,GDP,PC1
    G = [Gap GDP];
    figure(3)
    t = datenum(Gap_txt,'yyyy/mm/dd');
    plot(t,G,t1,VIX,t1,PCs(:,1));
    datetick('x','yyyy');
    recessionplot
    legend('The Output Gap','GDP growth','VIX','PC1');
    

    在这里插入图片描述
    Figure 3: PC1 related with macro variables

    % plot output gap,GDP,PC2
    figure(4)
    plot(t,G,t1,PCs(:,2)*(-1));
    datetick('x','yyyy');
    recessionplot
    legend('The Output Gap','GDP growth','PC2(inverse)');
    

    在这里插入图片描述
    Figure 4: Inverted PC2 related with macro variables

    
    % plot VIX and PC 2
    % calculated max. correlation
    
    for i = 1:40
        nMonth = i
        lag = 20*nMonth;
        lagVIX = [VIX(lag+1:end,1);nan(lag,1)];
        cov = nancov(lagVIX,PCs(:,2));
        c(i) = -cov(1,2);
    end
    % plot(c)
    [m,nMonth] = max(c)
    lag = 20*nMonth;
    lagVIX = [VIX(lag+1:end,1);nan(lag,1)];
    
    % figure(5)
    % plot(t1,lagVIX,t1,PCs(:,2)*(-1));
    % datetick('x','yyyy');
    % recessionplot
    % legend('VIX 34M lagged','PC2 inverse');
    
    figure(5)
    PC2 = PCs(:,2);
    shiftPC2 = [nan(lag,1);PC2(1:end-lag,1)];
    plot(t1,VIX,t1,shiftPC2*(-1));
    datetick('x','yyyy');
    recessionplot
    legend('VIX','PC2 inv. shift 34M','Location','east');
    

    在这里插入图片描述
    Figure 5: Inverted PC2 shift 34 M VS. VIX

    % plot output gap,GDP,PC3
    figure(6)
    plot(t,G,t1,PCs(:,3)*(-1));
    datetick('x','yyyy');
    recessionplot
    legend('The Output Gap','GDP growth','PC3 inv.');
    

    在这里插入图片描述
    Figure 6: Inverted PC3 related with macro variables

    figure(7)
    plot(t1,VIX,t1,PCs(:,3));
    datetick('x','yyyy');
    recessionplot
    legend('VIX','PC3','Location','east');
    

    在这里插入图片描述
    Figure 7: PC3 VS. VIX

    展开全文
  • 主成分分析matlab源代码(带注释,带例题数据)
  • Matlab 编程实现主成分分析 . 程序结构及函数作用 在软件 Matlab 中实现主成分分析可以采取两种方式实现一是通过编程来 实现二是直接调用 Matlab 种自带程序实现下面主要主要介绍利用 Matlab 的矩阵计算功能编程实现...
  • PCA主成分分析Matlab代码实现

    万次阅读 2018-04-12 21:43:30
    主成分分析是一种数据降维方法。什么时候要降维呢? 当需要对一个样本集中的样本进行排序时,可能有多个维度可以对这些样本进行评价,但维度过多会造成...(公式参考) PCA主成分分析Matlab实现数据要求: m∗n(除...

    主成分分析是一种数据降维方法。

    什么时候要降维呢?

    当需要对一个样本集中的样本进行排序时,可能有多个维度可以对这些样本进行评价,但维度过多会造成不变,因此我们希望能够用更少的维度评价,同时尽量减少评价的准确度损失。

    主成分分析,简单来说,就是直接选择对评价结果贡献度较高的几个维度,或者直接去掉对评价结果贡献度较低的几个维度;(公式参考

    PCA主成分分析Matlab实现

    数据要求:

    mn(除去表头)的矩阵,样本集大小为n,属性个数为m;或说有n个待评价目标,评价因子个数为m。

    %读入数据
    x=xlsread('data');
    
    %求算标准差
    sd=std(x);
    
    %对原始数据标准化
    n=size(x,1);    %读出x第一维的长度
    jj=ones(n,1);
    jj=jj*sd;
    x=zscore(x);
    
    %对x数据进行主成分分析
    [t,score,r]=princomp(x);
    
    %%以下为绘图示例2例
    %%例1
    x=score(:,1:2);%取前两个主成分(的得分)
    idx=kmeans(x,5);%用k-means法聚类(分为5类)
    %绘图
    str=num2str([1:n]');
    figure(1),clf
    plot(x(:,1),x(:,2),'o')
    text(x(:,1),x(:,2)+.5,str,'fontsize',12)
    hold on
    for i=1:n
        if idx(i)==1
            plot(x(i,1),x(i,2),'o','markerfacecolor','b')
        elseif idx(i)==2
            plot(x(i,1),x(i,2),'o','markerfacecolor','g')
        elseif idx(i)==3
            plot(x(i,1),x(i,2),'o','markerfacecolor','c')
        elseif idx(i)==4
            plot(x(i,1),x(i,2),'o','markerfacecolor','r')
        else
            plot(x(i,1),x(i,2),'o','markerfacecolor','m')
        end
    end
    
    %%例2
    x=score(:,1:3);%取前三个主成分(的得分)
    x(:,3)=x(:,3)-min(x(:,3));
    idx=kmeans(x,4);
    %绘图(3D)
    str=num2str([1:n]');
    figure(1),clf
    plot3(x(:,1),x(:,2),x(:,3),'o')
    stem3(x(:,1),x(:,2),x(:,3))
    text(x(:,1),x(:,2),x(:,3)+.5,str,'fontsize',12)
    hold on
    for i=1:n
        if idx(i)==1
            plot3(x(i,1),x(i,2),x(i,3),'o','markerfacecolor','b')
        elseif idx(i)==2
            plot3(x(i,1),x(i,2),x(i,3),'o','markerfacecolor','g')
        elseif idx(i)==3
            plot3(x(i,1),x(i,2),x(i,3),'o','markerfacecolor','c')    
        else
            plot3(x(i,1),x(i,2),x(i,3),'o','markerfacecolor','m')
        end
    end
    xlabel('PC1'),ylabel('PC2'),zlabel('PC3')  
    本文转载自:点击打开链接
    展开全文
  • 线性降维主成分分析PCA的matlab图像压缩仿真代码,还包括了与奇异值分解进行对比的程序,基于matlab2018写的,可直接运行。
  • 关于主成分分析matlab代码实现的总结

    千次阅读 多人点赞 2019-04-01 10:19:18
    转自:... 关于主成分分析matlab代码实现的总结 2018年05月18日 15:51:11 It_BeeCoder 阅读数:3375 ...

    转自:https://blog.csdn.net/It_BeeCoder/article/details/80365563

    关于主成分分析matlab代码实现的总结

    一:具体过程

    方法一:

    1:用zscore函数对原始数据S进行标准化。

    2:用cov函数求出标准化后的数据的协方差。

    3:求出此协方差的特征向量与特征根(eig函数)。

    4:将产生的特征向量依据特征根大小从大到小进行排列(即将特征向量按列倒序)。

    5:依据需求取出倒序后的向量的前几列(一般根据特征根来算贡献率,使得累计贡献率大于85%),组成新的矩阵T

    6:做S*T得到分析后的新的数据。

    7:依据特征根算贡献率,并绘图。

    代码如下:

    X=load('shuju.txt')

    z=zscore(X)               %数据标准化

    M=cov(z)                  %协方差

    [V,D]=eig(M);             %求出协方差矩阵的特征向量、特征根

    d=diag(D);                %取出特征根矩阵列向量(提取出每一主成分的贡献率)

    eig1=sort(d,'descend')      %将贡献率按从大到小元素排列

    v=fliplr(V)                %依照D重新排列特征向量

    S=0;

    i=0;

    while S/sum(eig1)<0.85

        i=i+1;

        S=S+eig1(i);

    end                         %求出累积贡献率大于85%的主成分

    NEW=z*v(:,1:i)              %输出产生的新坐标下的数据

    W=100*eig1/sum(eig1)

    figure(1)

    pareto(W);                  %画出贡献率的直方图

     

     

    方法二:

    1:用zscore函数对原始数据S进行标准化,(同上)。

    2:利用matlab自带的princomp函数直接求得其特征向量,新坐标下的数据,特征根(并且已经排列好了)。

    3:选择恰当的前几项主成分与标准化后的数据相乘。得到在新坐标下的数据。

    4:如方法一,利用特征根算贡献率。

    代码如下:

    X=load('shuju.txt')

    x=zscore(X)                       %标准化

    [coef,score,eig,t]=princomp(x);   %利用princomp处理矩阵

    t                                 %每一组数据在新坐标下到原点的距离

    s=0;

    i=1;

    while s/sum(eig)<0.85

        s=s+eig(i);

        i=i+1;

    end                              %获得累计贡献率大于85%几组数据

    NEW=x*coef(:,1:i-1)              %输出新的数据

    figure

    pareto(eig/sum(eig));          %输出贡献率直方图

    figure(2)

    plot(eig,'r+');

    hold on

    plot(eig,'b-');


    二:令我纠结的一些东西

    1:归一化、均值化、标准化、白化

      归一化:将数据归结到某两个数之间。

    计算公式:y = (ymax - ymin)*(x - xmin)/(xmax - xmin) + ymin

    Matlab实现方法:利用mapminmax函数,具体格式为[y,ps] = mapminmax(x,ymin,ymax)(矩阵中以行来归一化)。

    均值化:将数据中的每一个数除以其相应指标的平均值(数据矩阵中由于一般每一列描述一个特征,matlab处理时要按列处理)(这种方法可以说修正了常用的标准化会浪费部分数据的情况,可以替代标准化对数据进行预处理)。

    标准化:使数据均值为0方差为1,即将每一个数据减去所在列的均值后对数据矩阵每一列除以其对应的方差。

    Matlab实现方法:使用zscore函数。

    主成分分析中,原始数据的单位不同,需要使用一种数据处理方法使其转换为无量纲数,归一化与标准化都有消除量刚的作用,但是,主成分分析根据方差来建立新坐标系的,所以归一化矩阵可能不适用于PCA中,所以,基本上主成分分析在数据预处理上都用的是标准化,但是,标准化矩阵本身会损失一部分信息,而均值化不会损失信息,均值化可以更好的改进PCA算法(网上找到的一篇论文中说到的)。

    白化:白化通常为独立成分分析中的数据处理方式,其与PCA处理方式基本一致,个人理解ICA就是对PCA数据作的进一步处理,找到其中相互独立的部分。

    2princomp函数与eig函数的不同

      在开始我一直以为利用princomp函数与eig函数产生的特征向量只有顺序有所不同,但是我发现,即使是同一组数据,其产生的特征向量也有所不同,表现为某几个数据正负号不同,具体如下:

    原始数据:

    关于主成分分析matlab代码实现的总结

    使用eig函数的得到的特征向量:

    关于主成分分析matlab代码实现的总结
    使用princomp函数的特征向量:

    关于主成分分析matlab代码实现的总结

    可以看出,不仅是列的位置有所不同,某些数据的正负情况也有所不同,这也是我的一个疑惑:相同数据的特征向量为什么会有正负号的偏差?为保险起见,我觉得matlab自带的princomp函数可能更准确。

     

    3PCAICA的异同

    几何意义上:PCA是在找寻保留最大信息的方向,而ICA是在找寻各个独立的分量,也就是说PCA的第一主成分贡献率永远最大并且贡献率主成分次数增高逐渐降低,而ICA并没有,他只是将原有的信号解混,并不考虑信息量的大小。

    处理方式上:处理ICA时要先用PCA做白化处理,因为PCA协方差矩阵为对角阵,其必不相关,独立必不相关,所以通过PCA使数据之间没有相关性,之后再进行迭代操作,求出相互独立的分量。


    展开全文
  • PCA,主成分分析,包括了matlab程序代码,附赠详细练习数据,指导手册可以为小白进行很好的指导,同时为有需要的同学提供帮助
  • 数模比赛经典算法,主成分分析代码,供广大学生参考学习!
  • 主成分分析Matlab代码

    2019-08-19 20:35:09
    主成分分析模型代码(Matlab): %主成分分析,求取主要指标 clc,clear load demo1.txt %把原始数据保存在纯文本文件demo1.txt中 demo1=zscore(demo1); %数据标准化 r=corrcoef(demo1); %计算相关系数...

    主成分分析模型代码(Matlab):
    %主成分分析,求取主要指标
    clc,clear
    load demo1.txt %把原始数据保存在纯文本文件demo1.txt中
    demo1=zscore(demo1); %数据标准化
    r=corrcoef(demo1); %计算相关系数矩阵
    %下面利用相关系数矩阵进行主成分分析,vec1的列为r的特征向量,即主成分的系数
    [vec1,lamda,rate]=pcacov® %lamda为r的特征值,rate为各个主成分的贡献率
    f=repmat(sign(sum(vec1)),size(vec1,1),1); %构造与vec1同维数的元素为±1的矩阵
    vec2=vec1.f %修改特征向量的正负号,使得每个特征向量的分量和为正
    num=4; %num为选取的主成分的个数
    df=demo1
    vec2(:,1:num); %计算各个主成分的得分
    tf=df*rate(1:num)/100; %计算综合得分
    [stf,ind]=sort(tf,‘descend’); %把得分按照从高到低的次序排列
    stf=stf’, ind=ind’

    将数据保存在demo1.txt文件中,运行MATLAB程序源代码,x为标准化后的数据,根据标准化后的数据的相关系数矩阵r,特征值lamda以及累积贡献率rate,来选择主成分的个数,该程序结果选择的主成分个数为4,根据所选主成分,得出了综合评价值stf,以及名次ind。

    展开全文
  • 主成分分析(Principal Component Analysis,PCA), 是一种统计方法。通过正交变换将一组可能存在相关性的变量转换为一组线性不相关的变量,转换后的这组变量叫主成分。
  • 主成分分析matlab程序

    2014-10-08 09:17:57
    文件包括对主成分分析法的原理介绍,程序代码,以及实例分析,很详尽。
  • 主成分分析matlab源码

    2011-10-30 17:26:17
    这个是主成分分析matlab实现的源码,用于对数据进行降维处理的。
  • 主成分分析matlab代码

    2012-10-17 11:45:37
    此代码主要是根据主成分分析原理编写的,对了解主成分分析的概念有一定的帮助,能够运行,我用的实验数据是遥感数据
  • #1 主成份分析和因子分析简介...Stata中相关命令主要包括:pca: principle components analysis,主成分分析factor:因子分析,用于提取不同类型的因子screeplot:根据pca或factor画出碎石图(scree graph,也叫特征...
  • PCA 主成分分析 Matlab

    2021-03-31 09:52:02
    %累计贡献率 end %% 选择主成分及对应的特征向量 T = 0.9; %主成分保留率 for K = 1:b if DS(K,3) >= T Com_num = K; break end end %% 提取主成分对应的特征向量 for j = 1:Com_num PV(:,j)=V(:,b+1-j); end %...
  • 主成分分析 matlab code

    2014-06-10 05:08:57
    我自己的PCA code,前面是产生数据部分,后面是应用pca的简单的程序,比较好理解
  • 主成分分析Matlab源程序,结合具体数据进行了实验.
  • 主成分分析 matlab实现

    2012-12-07 20:43:25
    matlab实现的pca算法,基于协方差矩阵的方法。
  • 数学建模之主成分分析matlab

    千次阅读 2019-08-18 15:17:13
    数学建模之主成分分析 主要步骤: 一、相关系数矩阵方法 对原始数据进行标准化处理(单位化和归一化) 计算样本相关系数矩阵 计算相关系数矩阵R的特征值和相应的特征向量 选择重要的主成分(求各个主成分的贡献率...
  • % PCA主成分分析函数 % dataSet 原始数据(即需要降维的数据,n维,列为维数) % k 需要降到的维数 % FinalData 降维后的数据 % reconData 降维后的数据恢复得到的原始数据 % function [ FinalData,reconData ] = ...
  • 主成分分析matlab代码实现

    千次阅读 2020-03-31 13:05:39
    方法一: 1:用zscore函数对原始数据S进行标准化。 2:用cov函数求出标准化后的数据的协方差。 3:求出此协方差的特征向量与特征根(eig函数)。...6:做S*T得到分析后的新的数据。 7:依据特征根算贡献率...
  • 数模专用,经过验证,绝对可靠数模专用,经过验证,绝对可靠数模专用,经过验证,绝对可靠数模专用,经过验证,绝对可靠

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 759
精华内容 303
关键字:

主成分分析matlab

matlab 订阅