主成分分析MATLAB

        

计算步骤

主成分分析的具体计算步骤如下:

  1. 数据标准化:为了消除不同变量量纲的影响,将每个变量标准化,使其均值为0,标准差为1。
  2. 计算协方差矩阵:计算标准化数据的协方差矩阵,以了解各变量之间的关系。
  3. 求解特征值和特征向量:通过特征值分解协方差矩阵,得到特征值和特征向量。特征值表示主成分的方差,特征向量表示主成分的方向。
  4. 选择主成分:根据特征值的大小选择主要的几个主成分,这些主成分解释了数据的大部分方差。
  5. 计算主成分得分:将标准化后的数据投影到选定的主成分上,得到每个样本的主成分得分。
实例分析:消费支出数据

为了展示主成分分析的实际应用,我们使用1999年全国31个省份城镇居民家庭平均每人全年消费性支出数据进行分析。数据包括食品、衣着、家庭设备、医疗、交通、娱乐、居住和杂项八个方面的支出



% 数据导入
provinces = {'Beijing', 'Tianjin', 'Hebei', 'Shanxi', 'InnerMongolia', 'Liaoning', 'Jilin', 'Heilongjiang', 'Shanghai'};
food = [2959.19, 2459.77, 1495.63, 1406.33, 1303.97, 1730.84, 1561.86, 1410.11, 3712.31];
clothing = [730.79, 495.47, 515.9, 477.77, 524.29, 553.9, 492.42, 510.71, 550.74];
household = [749.41, 697.33, 362.37, 290.15, 254.83, 246.91, 200.49, 211.88, 893.37];
medical = [513.34, 302.87, 285.32, 208.57, 192.17, 279.81, 218.36, 277.11, 346.93];
transport = [467.87, 284.19, 272.95, 201.5, 249.81, 239.18, 220.69, 224.65, 527];
recreation = [1141.82, 735.97, 540.58, 414.72, 463.09, 445.2, 459.62, 376.82, 1034.98];
housing = [478.42, 570.84, 364.91, 281.84, 287.87, 330.24, 360.48, 317.61, 720.33];
miscellaneous = [457.64, 305.08, 188.63, 212.1, 192.96, 163.86, 147.76, 152.85, 462.03];

x = [food', clothing', household', medical', transport', recreation', housing', miscellaneous'];

% 第一步:数据标准化
X = zscore(x);

% 第二步:计算样本相关系数矩阵
R = corrcoef(X);
disp('样本相关系数矩阵为:');
disp(R);

% 第三步:计算R的特征值和特征向量
[V, D] = eig(R);
lambda = diag(D); 
lambda = lambda(end:-1:1); % 调整特征值顺序
V = fliplr(V); % 调整特征向量顺序

% 第四步:计算主成分贡献率和累计贡献率
contribution_rate = lambda / sum(lambda); 
cum_contribution_rate = cumsum(lambda) / sum(lambda);

disp('特征值为:');
disp(lambda');
disp('贡献率为:');
disp(contribution_rate');
disp('累计贡献率为:');
disp(cum_contribution_rate');
disp('与特征值对应的特征向量矩阵为:');
disp(V);

% 第五步:计算所需的主成分的值
[n, p] = size(x); 
m = input('请输入需要保存的主成分的个数: '); % 这里可以选择保存的主成分个数,如2或3
F = zeros(n, m); 

for i = 1:m
    ai = V(:, i)'; 
    Ai = repmat(ai, n, 1); 
    F(:, i) = sum(Ai .* X, 2); 
end

disp('主成分得分为:');
disp(F);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值