首页 > 其他 > 详细

matlab主成分分析PCA

时间:2020-05-15 11:57:07      阅读:48      评论:0      收藏:0      [点我收藏+]
%基于主成分分析的特征提取代码
%读取原始数据,调用三个子函数,输出主成分分析结果
%command
%[fid,vector,v1,result]=cwprint(data.txt,145,55)
function [fid,vector,v1,result]=cwprint(filename,a,b)
fid=fopen(filename,r)
vector=fscanf(fid,%g,[a,b]);
fprintf(标准化结果如下:\n)
v1=cwstd(vector)
result=cwfac(v1);   
%result为因子载荷矩阵;最终主成分变量解释通过载荷矩阵分析得出;

%对原始数据进行标准化
function std=cwstd(vector)   %矩阵标准化:消除量纲影响
cwsum=sum(vector,1);
[a,b]=size(vector);
for i=1:a
    for j=1:b
        std(i,j)=vector(i,j)/cwsum(j);
    end
end

%主成分分析
%cwfac()函数作用:
%计算相关系数矩阵
%计算特征值和特征向量
%对主成分进行排序
%计算个特征值贡献率及累计贡献率(由于限定主成分个数<10,所以设置为累计贡献率>80%%挑选主成分,输出主成分个数;
%计算主成分载荷(主成分和原特征之间的关系:后续分析主成分含义的依据)
function result=cwfac(vector)
fprintf(相关系数矩阵:\n)      
std=corrcoef(vector);          %求解相关系数矩阵(各个特证间的相关程度)
fprintf(特征向量(vec)及特征值(val):\n)
[vec,val]=eig(std);            %求解特征向量和特征值
newval=diag(val);              %特征值组成对角矩阵
[y,i]=sort(newval);            %特征值从大到小排序
fprintf(特征根排序:\n)
for z=1:length(y)
    newy(z)=y(length(y)+1-z);
end         
fprintf(%g\n,newy)
rate=y/sum(y);
fprintf(\n 贡献率:\n)
newrate=newy/sum(newy)
sumrate=0;
newi=[];
for k=length(y):-1:1
    sumrate=sumrate+rate(k);
    newi(length(y)+1-k)=i(k);
    if sumrate>0.8               %设定贡献率;>0.85为11个主成分
        break;
    end
end
fprintf(主成分数:%g\n\n,length(newi));
fprintf(主成分在和:\n)
for p=1:length(newi)
    for q=1:length(y)
        result(q,p)=sqrt(newval(newi(p)))*vec(q,newi(p));
    end
end
disp(result)
    
%坐标变换,得到回归用的输入数据:即:
%将原始数据用主成分(线性无关)表示,作为回归的输入。
function alldata_pca =x2z(v1,result)  
fprintf(原始数据用主成分表示:\n)
alldata_pca=v1*result     %坐标变换(原始数据用主成分表示)
end

 

参考资料:

https://wenku.baidu.com/view/239e277af02d2af90242a8956bec0975f465a484.html ,吕大兰

 

matlab主成分分析PCA

原文:https://www.cnblogs.com/feynmania/p/12893808.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!