主成分分析法原理与MATLAB实现
1:主成分分析原理:
主成分分析法是利用降维的思想,把多指标转化为少数几个综合指标(即主成分),其中每个主成分都能够反映原始变量的大部分信息,且所含信息互不重复。这种方法在引进多方面变量的同时将复杂因素归结为几个主成分,使问题简单化,同时得到的结果更加科学有效的数据信息。例如,做一件上衣需要测量很多尺寸,如身高,袖长,腰围,胸围,肩宽等十几项指标,但是厂家不可能把尺寸型号分这么多,而是从这十几种指标中综合成几个少数的综合指标作为分类型号,例如综合成反映身高,反映胖瘦和反应特体的三项指标,这就是主成分的思想。主要的方法有特征值分解,SVD(奇异值分解)和NMF(非负矩阵分解);
2:步骤:
参考:http://wiki.mbalib.com/wiki/%E4%B8%BB%E6%88%90%E5%88%86%E5%88%86%E6%9E%90%E6%B3%95
第一步采用的是中心化标准化,即元素值减去均值除以标准差,得到的结果服从标准正态分布;
3:matlab代码实现:
- x=[1.2,3,-1.1,17;
- 1.5,5,-3,22;
- 1.3,4.0,-2,19;
- 0.7,3,-2.3,11
- 1,4,-1.2,20.8];
- stdr=std(x); %求各变量的标准差;
- [n,m]=size(x); %矩阵的行与列
- sddata=x./stdr(ones(n,1),:); %标准化变换
- [p,princ,egenvalue]=princomp(sddata); %调用主成分
- p=p(:,1:3); %输出前3主成分系数;
- sc=princ(:,1:3); %前3主成分量;
- egenvalue; %相关系数矩阵的特征值,即各主成分所占比例;
- per=100*egenvalue/sum(egenvalue); %各个主成分所占百分比;
运行结果:
前3主成分系数:
特征值矩阵:
百分比:
所以前3主成分就是:z1=0.5403x1+0.5792x2-0.2966x3+0.5334x4; z2=0.1824x1-0.1325x2+0.8686x3+0.4419x4; z3=0.802x1-0.4998x2-0.0838x3-0.3162x4;
上述数据就可以按照这前3主成分进行描述了。
主成分分析法是利用降维的思想,把多指标转化为少数几个综合指标(即主成分),其中每个主成分都能够反映原始变量的大部分信息,且所含信息互不重复。这种方法在引进多方面变量的同时将复杂因素归结为几个主成分,使问题简单化,同时得到的结果更加科学有效的数据信息。例如,做一件上衣需要测量很多尺寸,如身高,袖长,腰围,胸围,肩宽等十几项指标,但是厂家不可能把尺寸型号分这么多,而是从这十几种指标中综合成几个少数的综合指标作为分类型号,例如综合成反映身高,反映胖瘦和反应特体的三项指标,这就是主成分的思想。主要的方法有特征值分解,SVD(奇异值分解)和NMF(非负矩阵分解);
2:步骤:
参考:http://wiki.mbalib.com/wiki/%E4%B8%BB%E6%88%90%E5%88%86%E5%88%86%E6%9E%90%E6%B3%95
第一步采用的是中心化标准化,即元素值减去均值除以标准差,得到的结果服从标准正态分布;
3:matlab代码实现:
- x=[1.2,3,-1.1,17;
- 1.5,5,-3,22;
- 1.3,4.0,-2,19;
- 0.7,3,-2.3,11
- 1,4,-1.2,20.8];
- stdr=std(x); %求各变量的标准差;
- [n,m]=size(x); %矩阵的行与列
- sddata=x./stdr(ones(n,1),:); %标准化变换
- [p,princ,egenvalue]=princomp(sddata); %调用主成分
- p=p(:,1:3); %输出前3主成分系数;
- sc=princ(:,1:3); %前3主成分量;
- egenvalue; %相关系数矩阵的特征值,即各主成分所占比例;
- per=100*egenvalue/sum(egenvalue); %各个主成分所占百分比;
运行结果:
前3主成分系数:
特征值矩阵:
百分比:
所以前3主成分就是:z1=0.5403x1+0.5792x2-0.2966x3+0.5334x4; z2=0.1824x1-0.1325x2+0.8686x3+0.4419x4; z3=0.802x1-0.4998x2-0.0838x3-0.3162x4;
上述数据就可以按照这前3主成分进行描述了。