MATLAB初学_数据降维_2.0

一 主成分分析(PAC)

    遇到由多个变量决定的问题的时候,其变量之间存在相互关系,分析问题难度很大。因此我们可以找到具有代表性的几个变量,且变量之间不存在联系。由这几个代表性变量分析与建模解决该问题,这就是主成分分析法。

1.1 PAC基本原理

   将相互关联的数据通过线性组合为互不相关的新的综合变量,在新的变量中我们要找到尽可能多的代表原变量。而在数据的处理过程中方差越大,则表示原数据波动越大,覆盖范围更广,因此选择方差最大的F_{1}作为第一主成分。但是F_{1}并不能有效代表原变量,因此需要找到第二主成分、第三主成分……直至有效代表原变量。并且第一主成分与第二主成分之间满足Cov(F_{1},F_{2})=0,即第二主成分中不包含第一主成分代表的变量。

1.2 PAC步骤

(1)对原数据进行标准化处理。假设数据样本:

 X=\left [\begin{matrix} \right x_{11}& x_{12} & \cdots & x_{1p} \\ x_{21} & x_{22} &\cdots & x_{2p} \\ \vdots &\vdots &\ddots &\vdots \\ x_{n1} & x_{n2} & \cdots & x_{np} \end{matrix}\right ]

将数据进行如下处理:

 x_{ij}^{\ast }= \frac{x_{ij}-\bar{x}_{j}}{\sqrt{Var(x_{j})}}(i=1,2,\cdots ,n;j=1,2,\cdots ,p)

其中,

\bar{x}_{j}=\frac{1}{n}\sum_{i=1}^{n}x_{ij}     ,    Var(x_{j})=\frac{1}{n-1}\sum _{i=1}^{n}(x_{ij}-\bar{x}_{j})^{2}(j=1,2,\cdots ,p)

(2)计算样本相关系数矩阵。假设原始数据标准化(去关联)后仍用X表示,则相关系数为:

R=\left [\begin{matrix} \right r_{11}& r_{12} & \cdots & r_{1p} \\ r_{21} & r_{22} &\cdots & r_{2p} \\ \vdots &\vdots &\ddots &\vdots \\ r_{n1} & r_{n2} & \cdots & r_{np} \end{matrix}\right ]

其中:

r_{ij}=\frac{Cov(x_{i},x_{j})}{\sqrt{Var(x_{1})}\sqrt{Var(x_{2})}}=\frac{\sum_{k-1}^{n}(x_{ki}-\bar{x}_{i})(x_{kj}-\bar{x}_{j})}{\sqrt{\sum_{k=1}^{n}(x_{ki}-\bar{x}_{i})^{2}\sqrt{\sum_{k=1}^{n}(x_{kj}-\bar{x}_{j})^{2}}}}

(3)计算相关系数矩阵R的特征值和相应的特征向量:

\lambda_{i}=(\lambda_{1},\lambda_{2},\cdots ,\lambda_{p})

a_{i}=(a_{i1},a_{i2},\cdots ,a_{ip})(i=1,2,\cdots ,p)

(4)根据贡献率的大小选取k个主成分并写出表达式:

CR =\frac{\lambda _{i}}{\sum_{k=1}^{n}\lambda _{i}}

k值得选取由累计贡献率决定,累计贡献率一般为85%:

CCR =\frac{\sum_{i=1}^{k}\lambda _{i}}{\sum_{k=1}^{n}\lambda _{i}}

(5)计算主成分得分。

\left [\begin{matrix} \right F_{11}& r_{12} & \cdots & F_{1k} \\ F_{21} & F_{22} &\cdots & F_{2k} \\ \vdots &\vdots &\ddots &\vdots \\ F_{n1} & F_{n2} &\cdots & F_{nk} \end{matrix}\right ]

其中:

F_{ij}=a_{j1}x_{i1}+a_{j2}x_{i2}+\cdots +a_{jp}x_{ip}(i=1,2,\cdots ,n;j=1,2,\cdots ,k)

(6)依据主成分得分的数据,进一步对问题进行后续分析和建模。

1.3 MATLAB仿真练习

clc,clear,close all
X=xlsread('F:\MATLAB_test\data_test_a.xlsx');
Y=xlsread('F:\MATLAB_test\data_test_a.xlsx',1,'A1:F6');
N=size(Y,1);
M=size(Y,2);

for i=1:M
    Eg(:,i)=(Y(:,i)-mean(Y(:,i)))/std(Y(:,i));
    if i==M
        op=std(Y(:,i));
    end
end
CM=corrcoef(Eg);
[V,eValue]=eig(Eg);
for j=1:M
    DeValue(j,1)=eValue(j,j);
end
SV=sort(DeValue(:,1),'descend');
for k=1:M
    k_value(k,1)=k;
    SV(k,2)=SV(k,1)/sum(SV(:,1));
    SV(k,3)=sum(SV(1:k,1))/sum(SV(:,1));
end

程序如上图所示,没有选择好的数据,因此结果并不是很适合该题。注重运算过,其结果如下

相关系数矩阵:

特征值矩阵:

特征向量矩阵:

特征值&贡献率&累计贡献率:

可以看出计算结果在特征值得筛选上并没有效果,因此用1到6代替特征值,然后进行筛选;


s_value=sort(k_value(:,1),'descend');
for m=1:M
    s_value(m,2)=s_value(m,1)/sum(s_value(:,1));
    s_value(m,3)=sum(s_value(1:m,1))/sum(s_value(:,1));
end
T=0.7;
t=0;
for n=1:M
    if s_value(n,3)>=T
        Com_num=n;
        break;
    end
end

计算贡献率和累计贡献率:

将保留率设置为0.7,则可以得到结果为3,也就是所需提取的特征向量有三个,按原数据特征值向量从大到小选择:

for t_nump=1:6
    if DeValue(t_nump,1)>=SV(3,1)
        t=t+1;
        need_n(t,1)=t_nump;
    end
end
for t_num=1:3
    need_p(:,t_num)=V(:,need_n(t_num,1));
end

选取结果:

然后根据公式就可以计算出主成分得分情况。

for t_num=1:3
    need_p(:,t_num)=V(:,need_n(t_num,1));
    need_q(:,t_num)=Eg(:,need_n(t_num,1));
end
new_score=Eg*need_q;
for i=1:N
    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);

得到结果如下:


Cov:统计学中表示协方差。

    在概率论和统计学中协方差表示两个变量的总体误差,期望与协方差满足一下关系式:

Cov(X,Y)=E(XY)-E(X)E(Y)

当两个变量的线性无关时满足E(XY)=E(X)E(Y),因此当Cov(F_{1},F_{2})=0F_{1},F_{2}线性无关。


[1]卓金武,王鸿钧等,《MATLAB数学建模方法与实践》(第三版)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值