主成分分析(多元分析方法之一)
2015-09-02 21:39
211 查看
主成分分析的主要目的是希望用较少的变量去解释原来资料中的大部分变异,将我们手中许多相关性很高的变量转化成彼此独立或者不相关的变量。通常是选出比原始变量个数少,能解释大部分资料中的变异的几个新变量,即所谓主成分,并用以解释资料的综合性指标。主成分分析实际上是一种降维方法。
也是为了方便自己,举例。
举例:下面是y和x1、x2、x3、x4之间的关系数据共13组,见表。对数据实施标准化得到数据矩阵A,则A‘*A/12就是样本相关系数阵。
![](http://img.blog.csdn.net/20150902184810790?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
计算的Matlab程序如下:
主成分个数的选取,根据相关系数阵的特征值进行初步判断,四个值分别是:2.2357,1.5761,0.1866,0.0016,因为最后一个接近于0,前三个累计贡献率达到0.999594,因此我们选择3个。
运行结果:
![](http://img.blog.csdn.net/20150902192647755?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
![](http://img.blog.csdn.net/20150902192338129?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
![](http://img.blog.csdn.net/20150902192342924?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
因为rmse1<rmse2,所以发现主成分回归均方误差更小,因而更稳定。而且Hald线性回归系数无法通过显著性检验,一般对多元回归系数进行t检验。
曲线对比图像:
也是为了方便自己,举例。
举例:下面是y和x1、x2、x3、x4之间的关系数据共13组,见表。对数据实施标准化得到数据矩阵A,则A‘*A/12就是样本相关系数阵。
计算的Matlab程序如下:
clc,clear; load ch.txt; %把原始数据的x1,x2,x3,x4,y的数据保存在纯文本文件ch.txt中 [m,n]=size(ch); x0=ch(:,[1:n-1]);y0=ch(:,n); hg1=[ones(m,1),x0]\y0; %计算普通最小二乘法回归系数 hg1=hg1' %变成行向量显示回归系数,其中第一个分量是常数项,其他按x1,x2,...,xn排序 fprintf('对Hald数据做线性回归的经验回归方程:\n'); %开始显示普通最小二乘法回归结果 fprintf('y=%f',hg1(1)); for i=2:n if hg1(i)>0 fprintf('+%f*x%d',hg1(i),i-1); else fprintf('%f*x%d',hg1(i),i-1); end end fprintf('\n'); r=corrcoef(x0); %计算相关系数 xd=zscore(x0); %对设计矩阵进行标准化处理 yd=zscore(y0); %对y0进行标准化处理 [vec1,lamda,rate]=pcacov(r); f=repmat(sign(sum(vec1)),size(vec1,1),1); vec2=vec1.*f; contr=cumsum(rate)/sum(rate); df=xd*vec2; num=input('请选择主成分的个数:'); fprintf('主成分回归方程系数:\n'); hg21=df(:,1:num)\yd fprintf('化成标准量的回归方程系数:\n'); hg22=vec2(:,1:num)*hg21 hg23=[mean(y0)-std(y0)*mean(x0)./std(x0)*hg22,std(y0)*hg22'./std(x0)]; fprintf('恢复到原始的自变量,得到的主成分回归分析方程:\n'); fprintf('y=%f',hg23(1)); for i=2:n %开始显示主成分回归结果 if hg23(i)>0 fprintf('+%f*x%d',hg23(i),i-1); else fprintf('%f*x%d',hg23(i),i-1); end end fprintf('\n'); %下面计算两种回归分析的剩余标准差 rmse1=sqrt(sum((hg1(1)+x0*hg1(2:end)'-y0).^2)/(m-n-1)) rmse2=sqrt(sum((hg23(1)+x0*hg23(2:end)'-y0).^2)/(m-num))
主成分个数的选取,根据相关系数阵的特征值进行初步判断,四个值分别是:2.2357,1.5761,0.1866,0.0016,因为最后一个接近于0,前三个累计贡献率达到0.999594,因此我们选择3个。
运行结果:
因为rmse1<rmse2,所以发现主成分回归均方误差更小,因而更稳定。而且Hald线性回归系数无法通过显著性检验,一般对多元回归系数进行t检验。
曲线对比图像:
相关文章推荐
- AlertDialog中EditText输入法调不出 edittext调用输入法等问题
- HDOJ 4468 Spy KMP
- 写给计算机的大学生
- 详解Android中AsyncTask的使用
- POJ 2362 Square
- HDU 5423 Rikka with Tree(简单DFS+枚举)
- PAT(B) 1005. 继续(3n+1)猜想
- 机器学习(五)—朴素贝叶斯
- 如果你的生活以金钱为中心
- JRE 和 JDK 的区别
- 把Edit with Sublime Text加入右键菜单
- linux命令之cut_v1
- uvalive6938
- Java并发编程(三) 并发类库中的常用类
- Redis使用总结之与Memcached异同
- PEP8 Python 编码规范
- application,requset,session三个对象的用法
- Oracle查询表空间使用情况
- LA_3213_AncientCipher
- TCP的三路握手和四路挥手及其临界条件(结合系统调用)