数学建模算法与应用学习(二)
降维:主成分分析法(原理、代码、实例)(《数学建模与应用》)
一、主成分分析原理
1.主成分分析定义
主成分分析法(Principal Component Analysis,PCA)就是一种运用线性代数的知识来进行数据降维的方法,它将多个变量转换为少数几个不相关的综合变量来比较全面地反映整个数据集。这是因为数据集中的原始变量之间存在一定的相关关系,可用较少的综合变量来综合各原始变量之间的信息。这些综合变量称为主成分,各主成分之间彼此不相关,即所代表的的信息不重叠。
2.如何降维
坐标变换:把观测点在原坐标轴的坐标转换到新坐标系下,同时也把原始变量转换为了长轴的变量和短轴的变量,这种转换是通过对原始变量进行线性组合的方式而完成的。
3.线性代数解法
假设一份数据集,有m个样本,每个样本由n个特征(变量)来描述,那么我们可以按照以下的步骤进行降维:
1、将数据集中的每个样本作为列向量,按列排列构成一个n行m列的矩阵;
2、将矩阵的每一个行向量(每个变量)都减去该行向量的均值,从而使得新行向量的均值为0,得到新的数据集矩阵X;
3、求X的协方差矩阵,并求出协方差矩阵的特征值λ和单位特征向量e;
4、按照特征值从大到小的顺序,将单位特征向量排列成矩阵,得到转换矩阵P,并按PX计算出主成分矩阵;
5、用特征值计算方差贡献率和方差累计贡献率Vi;Vi=xi/(x1+x2+…),取方差累计贡献率超过85%的前k个主成分,或者想降至特定的k维,直接取前k个主成分。
二、Matlab实现
1.princomp实现
主成分分析函数:
[coeff,score,letent]=princomp(x);
供献率:每一维数据对于区分全部数据的供献,供献率最大的显然是主成分,第二大的是次主成分…
[coef,score,latent,t2] = princomp(x);
x:为要输入的n维原始数据。带入这个matlab自带函数,将会生成新的n维加工后的数据(即score)。此数据与之前的n维原始数据一一对应。
score:生成的n维加工后的数据存在score里。它是对原始数据进行的解析,进而在新的坐标系下获得的数据。他将这n维数据按供献率由大到小分列。(即在改变坐标系的景象下,又对n维数据排序)
latent:是一维列向量,每一个数据是对应score里响应维的供献率,因为数占领n维所以列向量有n个数据。由大到小分列(因为score也是按供献率由大到小分列)。
coef:是系数矩阵。经由过程cofe可以知道x是如何转换成score的。但这个转换不是单纯的转换,必须使用下列计算方法,即score(:,i)=coef*(x(:,i)-mean(x(:,i))),这样才能得到。
用你的原矩阵x*coeff(:,1:n)才是你要的的新数据,其中的n是你想降到多少维。而n的取值取决于对特征值的累计贡献率的计算。
2.函数作用
Cwstd.m——用总和标准化法标准化矩阵
Cwfac.m——计算相关系数矩阵;计算特征值和特征向量;对主成分进行排序;计算各特征值贡献率;挑选主成分(累计贡献率大于85%),输出主成分个数;计算主成分载荷
Cwscore.m——计算各主成分得分、综合得分并排序
Cwprint.m——读入数据文件;调用以上三个函数并输出结果
3.实例
cwstd.m总和标准化法标准化矩阵