2019-12-07

**

数学建模算法笔记(2)

主成分分析

**

降维:主成分分析法(原理、代码、实例)

一·主成分分析

1.目的:用较少的变量去解释原来资料中的大部分变异,将相关性很高的变量转化成彼此相互独立或不相关的变量。通常是选出比原始变量个数少,能解释大部分资料中的变异的几个新变量,即所谓主成分,并用以解释资料的综合性指标。

2.基本思想:
①分别求各特征(列)的均值并将各变量作标准化处理。
②求特征协方差矩阵。
③求协方差阵的特征值和特征向量。
④将特征值按照从大到小排序,选择其中最大的p个。将其对应的p个特征向量分别作为列向量组成特征向量矩阵。
⑤将样本点投影到选取的p个特征向量上。
这样,原始数据就由原来的n维特征变成了p维,而p维跟原始数据的维没有关系,是原始特征在p维上的投影。这p维特征基本上代表了原先的n个特征。

3.注意:①因子分析需要转轴,主成分分析不需要转轴
②特征值小于1,放弃主成分
③选取少量主成分(≤5.6)能解释变异的70%~80%即可

二·主成分估计

1.方法:①原来的回归自变量→另一组变量(主成分)
②选重要主成分→新自变量→最小二乘法处理
③变回原来的模型→参数估计

三·特征因子的筛选

将 X’X 的特征值按由大到小的次序排列之后,删去λr+1,λr+2,…,λp ,这些删去的特征值之和占整个特征值之和∑λi 的15%以下,即余下的特征值所占的比重(定义为累积贡献率)将超过85%。除此之外,还要考虑选择的主成分对原始变量的贡献值,用相关系数的平方和来表示。

四· Matlab相关函数

1、princomp函数:
①用zscore函数对原始数据S进行标准化。
②利用matlab自带的princomp函数直接求得其特征向量,新坐标下的数据,特征根(并且已经排列好了)。
③选择恰当的前几项主成分与标准化后的数据相乘。得到在新坐标下的数据。
④利用特征根算贡献率。

X=load('shuju.txt')
z=zscore(X)                  *%标准化*
[coef,score,eig,t]=princomp(z);*%利用princomp处理矩阵*
t            *%每一组数据在新坐标下到原点的距离*
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函数:
①用zscore函数对原始数据S进行标准化。
②用cov函数求出标准化后的数据的协方差。
③求出此协方差的特征向量与特征根(eig函数)。
④将产生的特征向量依据特征根大小从大到小进行排列(即将特征向量按列倒序)。
⑤依据需求取出倒序后的向量的前几列(一般根据特征根来算贡献率,使得累计贡献率大于85%),组成新的矩阵T
⑥做S*T得到分析后的新的数据。
⑦依据特征根算贡献率,并绘图。

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);                  *%画出贡献率的直方图*
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值