分享

matlab主成分分析

 昵称50123674 2018-07-15
一、关于数据处理
1、归一化:y=(ymax-ymin)*(x-xmin)/(xmax-xmin)+ymin
           mapminmax函数:   (y,ps)=mapinmax(x,ymin,ymax)
2、均值化:y=x/-X(-X为矩阵每列数据均值)
            y=x/mean([:,a])——a为矩阵列序号
3、标准化:
  zscore函数:     z=zscore(x)
均值化不会损失信息,标准化常用但会损失信息。可用均值化改进PCA)
主成分分析
特征向量求解
1、princomp函数:
X=load('shuju.txt')

z=zscore(X)                       %标准化

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

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

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-');


2、eig函数:
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);                  %画出贡献率的直方图



%主成分分析 PAC  的Matlab实现

clc

clear all

A=xlsread('D:\evaluation.xlsx',1,'B2:I16');   % 数据的输入及处理

%数据的标准化处理

a=size(A,1);%获得矩阵A的行大小

b=size(A,2);%获得矩阵A的列大小

for i=1:b

    SA(:,i)=(A(:,i)-mean(A(:,i)))/std(A(:,i));%std函数是用来求向量的标准差

end

% %计算相关系数矩阵的特征值和特征向量

CM=corrcoef(SA);%计算相关系数矩阵

[V,D]=eig(CM);%计算特征值和特征向量

for j=1:b

    DS(j,1)=D(b+1-j,b+1-j);%对特征值按降序排列

end

for i=1:b

    DS(i,2)=DS(i,1)/sum(DS(:,1));%贡献率

    DS(i,3)=sum(DS(1:i,1))/sum(DS(:,1));%累计贡献率

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

% % 计算各评价对象的主成分得分

new_score=SA*PV;

for i=1:a

    total_score(i,1)=sum(new_score(i,:));

    total_score(i,2)=i;

end

result_report=[new_score,total_score];%将各主成分得分与总分放在同一个矩阵中

result_report=sortrows(result_report,-4);%按总分降序排序

% % 输出模型及结果报告

disp('特征值及其贡献率,累加贡献率:')

DS

disp('信息保留率T对应的主成分数与特征向量:')

Com_num

PV

disp('主成分得分及排序(按第四列的总分进行排序,前三列为个主成分得分,第五列为企业编号)')

result_report


    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多