精华内容
下载资源
问答
  • 主成分分析matlab源代码(带注释,带例题数据)
  • 主成分分析 matlab

    2018-01-08 12:05:01
    使用matlab进行 主成分分析 PCA,代码能够运行 使用matlab进行 主成分分析 PCA,代码能够运行
  • PCA,主成分分析,包括了matlab程序代码,附赠详细练习数据,指导手册可以为小白进行很好的指导,同时为有需要的同学提供帮助
  • 线性降维主成分分析PCA的matlab图像压缩仿真代码,还包括了与奇异值分解进行对比的程序,基于matlab2018写的,可直接运行。
  • dataset=[ 263.862 1.61144 2.75468 0.266575 268.764 2.07218 2.61756 0.182597 261.196 1.59769 2.35037 0.182114 248.708 2.09609 2.85279 0.257724 253.365 1.69457 2.9492 0.189702 268.434 1.56819 2.78113 0
  • 主成分分析算法的MATLAB代码实现,可以帮助理解主成分分析算法的计算过程,比直接调用MATLAB函数更利于学习。
  • 主成分分析MATLAB程序

    2016-06-05 22:11:30
    主成分分析MATLAB程序代码
  • 主成份分析(PCA)中关于协方差矩阵实现的两种方法MATLAB代码详解
  • 关于主成分分析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数据作的进一步处理,找到其中相互独立的部分。

    2:princomp函数与eig函数的不同

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

    原始数据:

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

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

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

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

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

     

    3:PCA与ICA的异同

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

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


    展开全文
  • 主成分分析法,使用python实现。应对非线性数据,先使用核技巧映射高维使之线性可分,之后再用PCA方法将高维降到低维,理论上可从无穷维降到一维或二维,将数据变为线性可分。此程序中既包含了手工制作的KPCA全...
  • 主成分分析(内含完整的PCA的MATLAB代码以及原理讲解的Word文档)
  • 主成分分析法原理及matlab代码Kmeans聚类 这是 [Coursera Machine Learning] () 课程的第 7 周作业。 概括 在该程序的第一部分中,实现了 K-means 聚类算法并将其应用于压缩图像。 在第二部分中,进行主成分分析以...
  • 主成分分析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(r) 									%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。

    展开全文
  • 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')  
    本文转载自: 点击打开链接
    展开全文
  • 主成分分析matlab代码实现

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

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

    方法一:
    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-');
    
    展开全文
  • 主成分分析 matlab code

    2014-06-10 05:08:57
    我自己的PCA code,前面是产生数据部分,后面是应用pca的简单的程序,比较好理解
  • 这个程序代码很可靠哦,可以直接用matlab实现操作
  • PCA主成分分析实现方法Matlab;详细请查看博客资料:http://blog.csdn.net/guyuealian/article/details/68487833
  • 主成分分析KPCA,核主成分分析 matlab,Python源码
  • 用简单易懂的方法讲解了主成分分析的原理,并给出了MATLAB实现程序
  • 数学建模之主成分分析matlab

    千次阅读 2019-08-18 15:17:13
    数学建模之主成分分析 主要步骤: 一、相关系数矩阵方法 对原始数据进行标准化处理(单位化和归一化) 计算样本相关系数矩阵 计算相关系数矩阵R的特征值和相应的特征向量 选择重要的主成分(求各个主成分的贡献率...
  • PCA是根据特征相关程度即协方差值加上线性变换的原理,得到的变换特征向量对应的特征值代表特征成分贡献值大小。 协方差只对特征之间的线性关系敏感,协方差越大,就越可能被去除,所以PCA只能去掉线性相关特征。
  • 关于主成分分析,内含数据源,代码。且matlab代码解释非常详细,结果易懂
  • Matlab 编程实现主成分分析 . 程序结构及函数作用 在软件 Matlab 中实现主成分分析可以采取两种方式实现一是通过编程来 实现二是直接调用 Matlab 种自带程序实现下面主要主要介绍利用 Matlab 的矩阵计算功能编程实现...
  • 主成分分析(Principal Component Analysis,PCA), 是一种统计方法。通过正交变换将一组可能存在相关性的变量转换为一组线性不相关的变量,转换后的这组变量叫主成分。
  • pca主成分分析Matlab源码.pdf
  • 数模比赛经典算法,主成分分析代码,供广大学生参考学习!
  • 基于matlab实现PCA降维算法,可用于多维数据的损失最小化压缩,内附全代码
  • PCA主成分分析MATLAB实现代码

空空如也

空空如也

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

主成分分析matlab

matlab 订阅