• 大小: 4KB
    文件类型: .m
    金币: 1
    下载: 0 次
    发布日期: 2021-06-14
  • 语言: Matlab
  • 标签: pca  

资源简介

由于本人最近需要处理的数据特征太多,导致分类不准确,特此学习了两天的PCA,找了许多资料。整理了各位博主的伪代码,并写成matlab程序,然后自己利用matlab自带的pca函数进行计算,两种方法进行比较,程序已全副武装,只需要导入自己数据就能运行。

资源截图

代码片段和文件信息

%%   感谢@chenyu19880302 博主的博客内容,它用通俗易懂的语言介绍了pca算法的原理和代码,
%%%   本人将它的代码进行整理,并换成自己的数据进行运算,发现它没有用matlab自带的pca函数
%%%   由于本人研究的是ERP内容,数据格式可能不一样,所以运行的时候请自行修改一些参数
%%%   版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
%%%   本文链接:https://blog.csdn.net/chenyu19880302/article/details/9163303
%%%    导入数据格式为n*m,n为样本数,m为特征数
%% 第一步:输入样本矩阵%%%%%%%%%%%%%%  500个样本 62导联 24个维度
vector=dataA;    %  此为导入数据,只需要修改dataA为自己的数据即可运行
newfeature=[];
%现对其进行pca降维  
for chan=1:62
%第二步:计算样本中每一维的均值,然后计算观察值与均值之间的偏差,再计算协方差矩阵
     feature=vector(:(chan-1)*24+1:(chan*24));  % 按导联分开
    s=sum(feature1);%计算每一列的均值
    [nSmpnFea] = size(feature);
    feature=feature-repmat(mean(feature)nSmp1);%把每一维的均值复制成nSmp*nFea矩阵,然后计算偏差
    W=zeros(nFeanFea);%建立一个nFea*nFea的零矩阵
    W=W+feature‘*feature;
    W=W/(nSmp-1);%根据协方差公式计算协方差,得到协方差矩阵W
%第三步:计算协方差矩阵的特征值和特征向量矩阵
    fprintf(1‘Calculating generalized eigenvectors and eigenvalues...\n‘);
    [eigvectors eigvalues] = eig(W);%eigvectors为特征向量组成的矩阵,eigvalues特征值组成的对角矩阵
    fprintf(1‘Sorting eigenvectors according to eigenvalues...\n‘);
    d1=diag(eigvalues);%返回对角矩阵上的值
    [d2index]=sort(d1); %以升序排序,d2为排列后的值,index为索引值
    cols=size(eigvectors2);% 特征向量矩阵的列数
    for i=1:cols
    vsort(:i) = eigvectors(: index(cols-i+1) ); % vsort 是一个M*col(注:col一般等于M)阶矩阵,保存的是按降序排列的特征向量每一列构成一个特征向量
    dsort(i) = d1( index(cols-i+1) ); % dsort 保存的是按降序排列的特征值,是一维行向量
    end %完成降序排列
%第四步:计算总能量,并选取贡献率最大的特征值
    dsum = sum(dsort);%对所有的特征值求和
    dsum_extract = 0;%求前几个特征值之和当前几个特征值之和大于预设值时,可以认为这几个特征值可以表征当前矩阵
    p = 0;
  

评论

共有 条评论