MATLAB实现主成分分析(PCA)

function [ DS,Com_num,PV,new_score,new_score_s ] = PCA_dr( A,T )
%PCA_dr 主成分降维及分析函数
% 输入变量
%   A:原始数据(未标准化处理)
%   T:设置累积贡献率的阈值
% 输出变量
%   DS:特征值及贡献率
%   Com_num:阈值T对应的主成分数
%   PV:阈值T对应的特征向量
%   new_score:主成分分数(筛选出来的主成分向量的各样本分数)
%   new_score_s:主成分分数排序(第一列为原样本的排名,第二列为该样本主成分总分)
%% 原始数据的标准化处理(Transfer orginal data to standard data)
a = size(A,1);   % Get the row number of A
b = size(A,2);   % Get the column number of A
SA = zeros(size(A));
for i = 1:b
    SA(:,i) = (A(:,i)-mean(A(:,i)))/std(A(:,i));  % Matrix normalization(标准化后的矩阵)
end
%% 计算样本相关系数矩阵(Calculate correlation matrix of A.)
CM = corrcoef(SA);  %CM为相关系数矩阵
%% 计算相关系数矩阵的特征值和特征向量
% Calculate eigenvectors and eigenvalues of correlation matrix.
[V, D] = eig(CM);   %V为特征向量,D为特征值(对角线)
%% 选择重要的主成分
% Get the eigenvalue sequence according to descending and the corrosponding
% attribution rates and accumulation rates.
% 1.根据下降以及相应的归属率和累积率得到特征值序列。
DS = zeros(b,3);
for j=1:b
    DS(j,1) = D(b+1-j, b+1-j);    %DS第一列是D中对角线从右下向左上排列后的值
end
for i=1:b
    DS(i,2) = DS(i,1)/sum(DS(:,1)); %DS第二列是该特征值占特征值总和的百分比
    DS(i,3) = sum(DS(1:i,1))/sum(DS(:,1));  %累积贡献率
end

% 2.计算主成分数量(Calculate the numvber of principal components.)
for K = 1:b
    if DS(K,3)>=T
        Com_num = K;  %主成分的个数
        break;
    end
end

% 3.获取特征向量(Get the eigenvectors of the Com_num principal components)
for j = 1:Com_num
    PV(:,j) = V(:,b+1-j);   %对应主成分个数的几个特征向量
end
%% 计算主成分得分(Calculate the new socres of the orginal items)
new_score = SA*PV;
for i=1:a
    total_score(i,2) = sum(new_score(i,:));
    total_score(i,1) = i;
end
new_score_s = sortrows(total_score,-2); %-2表示按第二列进行降序排序
%% 输出样式举例
disp('特征值及贡献率(DS):')
disp(DS)
disp('阈值T对应的主成分个数(Com_num)与特征向量(PV):')
disp(Com_num)
disp(PV)
disp('样本的主成分分数(new_score):')
disp(new_score)
disp('样本的主成分分数排序(new_score_s):')
disp(new_score_s)
end

 

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值