主分量分析PCA

主分量分析PCA

摘要:本次实验分为两部分,第一部分:利用PCA,通过自定义函数PCA_two(MU,SIGMA,N)进行特征空间的规整化。第二部分:利用PCA,通过自定义函数PCA_three(MU,SIGMA,N)进行特征空间降维。PCA方法是一种处理数据过多维数的方法,它的目的是寻找在最小均方意义下最能代表原始数据的投影方法。经过本次实验,了解了PCA主分量分析的基本概念,学习和掌握了PCA主分量分析的方法。

一、 实验原理

1、统计分析方法中的降维思想

在模式识别的研究过程中,往往需要对反映事物的多个变量进行大量的观测,收集大量数据以便进行统计分析。多变量大样本为研究者提供了丰富的信息,但也在一定程度上增加了统计分析的运算量。而在多数情况下,变量与变量之间存在着相关性,因而又增加了问题分析的复杂性。如果分别对每个指标进行分析,分析往往是孤立的,而不是综合的。盲目减少数据会损失很多信息,容易产生错误的判决结果。
因此需要找到一个合理的方法,在减少需要分析的信息和保证分析质量两者中取得平衡。前面说到由于各变量间存在一定的相关关系,这使得这种思想成为可能。可以采用特征线性组合的方法减少特征空间中的特征维数。将高维数据投影到较低维空间上。主成分分析(Principal Component Analysis)和Fisher判别分析法是两类有效的线性组合变换方法。

2、主分量分析(PCA)

假设有n个d维的样本X1,X2,...,Xn,希望仅使用一个d维的向量X0来表示这n个样本,并希望这个代表向量X0与各个样本Xk(k=1,...,n)的距离的平方之和越小越好。定义平方误差准则函数J0(X0)如下:

在向量 分别为散布矩阵的d’个最大特征值所对应的特征向量时,平方误差准则函数取得最小值。因散布矩阵是实对称矩阵,因此这些特征向量都是相互正交的,构成了任一向量X的基向量。系数ai对应于基ei的系数,成为主分量。

从几何上说,样本点 在d维空间形成了一个d维椭球形状的云团,散布矩阵的特征向量就是这个云团的主轴。主成分分析通过提取云团散布最大的方向达到了对特征空间进行降维的目的。

二、 实验布骤及实验结果

1、 利用PCA进行特征空间的规整化

(a) 给定均值矢量mu=[5 7],sigma=[9 2.4;2.4 1],生成N=100个高斯分布的二维样本矢量。绘出样本集合X的二维散点图,如下图3所示;

(b) 利用式(2)和式(7)计算上述样本集合X的均值向量m和散布矩阵S,使用Matlab中的eig()函数,计算X的散布矩阵S的特征值和特征向量,得到的实验结果见表1、表2、表3、表4;

(c)假设数据集合X的均值向量为m,散布矩阵S的特征向量矩阵为V=[e1 e2]T,将集合X中的每一个向量x变换为向量y, y=V(x-m),生成集合Y, 。绘出集合Y的二维散点图,如下图3所示:

(d) 调用自定义函数PCA_two(MU,SIGMA,N),改变样本总数,分别令N=10、1000、10000、100000,重复上述实验(a) (b) (c),得到的均值向量m与散布矩阵S及S的特征值与特征向量见表1、表2、表3、表4,实验结果图如下图1~图10所示:

三、 讨论与分析

1、 将集合X与集合Y画在同一个图中(以N=1000为例),如下图26所示,经观察可以发现,集合Y是集合X经过平移旋转后得到的散点图,集合Y的分布与集合X正交。该试验中PCA方法的意义是:利用PCA可以对数据集合在特征空间中进行平移和旋转,进行规整化。

2.PCA降维的基本思想是采取特征线性组合的方式减少特征空间中的维数,将高维数据投影到低维空间中,减少问题分析的复杂度。将样本集合Z与集合X的三维数据散点图(以N=1000为例)进行适度的旋转得到图27,经观察可知集合Z是集合X在某方向上的垂直投影,该方向是由集合X在其散布矩阵S的最大特征值d1与次大特征值d2所对应的特征向量e1、e2构成的基向量形成的平面。

3、观察表1、表2,表5、表6可知,样本的数量越大,估计得到的样本均值向量m越接近给定的均值矢量,散布矩阵S也越接近给定的协方差矩阵的(N-1)倍,信息损失越小。

附录:MATLAB代码

(1)利用PCA进行特征空间的规整化
PCA_two([5,7],[9,2.4;2.4,1],10)
PCA_two([5,7],[9,2.4;2.4,1],100)
PCA_two([5,7],[9,2.4;2.4,1],1000)
PCA_two([5,7],[9,2.4;2.4,1],10000)
PCA_two([5,7],[9,2.4;2.4,1],100000)

%格式:如PCA_two([5,7],[9,2.4;2.4,1],100000),输入参数可变
% MU;样本的均值矢量,本次程序中取[5,7]
% SIGMA;样本的协方差矩阵,本次程序中取[9,2.4;2.4,1]
% N;样本数量,本次程序中取可变值
function PCA_two(MU,SIGMA,N)
X=mvnrnd(MU,SIGMA,N);%产生N个高斯分布的二维样本矢量
figure(1);
subplot(121)
plot(X(:,1),X(:,2),‘ro‘);%画出集合X的二维散点图
grid on
title([num2str(N),‘个高斯分布的样本集合X二维散点图‘]);
X_aver=sum(X)./N;%求样本数据的均值矢量
S=zeros(2);
% 第一种方法注求散布矩阵S
% for i=1:N
%     S=S+((X(i,:)-X_aver)‘*(X(i,:)-X_aver));
% end
% 第二种方法注求散布矩阵S
for i=1:2
    for j=1:2
        S(i,j)=sum((X(:,i)-X_aver(:,i)).*(X(:,j)-X_aver(:,j)));
    end
end
[V,D]=eig(S);%计算X的散布矩阵S的特征值和特征向量
for m=1:N
    Y(m,:)=(V*(X(m,:)-MU)‘)‘;
end
subplot(122)
plot(Y(:,1),Y(:,2),‘g*‘);%%画出集合Y的二维散点图
grid on
title([num2str(N),‘个样本集合Y的二维散点图‘]);
figure(2)
plot(X(:,1),X(:,2),‘ro‘,Y(:,1),Y(:,2),‘g*‘);
grid on
title([num2str(N),‘个样本集合X与集合Y的二维散点图‘])

(2)利用PCA进行特征空间降维
PCA_three([10,15,15],[90,2.5,1.2;2.5,35,0.2;1.2,0.2,0.02],10)
PCA_three([10,15,15],[90,2.5,1.2;2.5,35,0.2;1.2,0.2,0.02],20)
PCA_three([10,15,15],[90,2.5,1.2;2.5,35,0.2;1.2,0.2,0.02],50)
PCA_three([10,15,15],[90,2.5,1.2;2.5,35,0.2;1.2,0.2,0.02],100)
PCA_three([10,15,15],[90,2.5,1.2;2.5,35,0.2;1.2,0.2,0.02],1000)

%格式:PCA_three([10,15,15],[90,2.5,1.2;2.5,35,0.2;1.2,0.2,0.02],100),参数可变
% MU;样本的均值矢量,本次程序中取[10,15,15]
% SIGMA;样本的协方差矩阵,本次程序中取[90,2.5,1.2;2.5,35,0.2;1.2,0.2,0.02]
% N:样本数量,本次程序中取可变值
function PCA_three(MU,SIGMA,N)
X=mvnrnd(MU,SIGMA,N);
figure(1);
plot3(X(:,1),X(:,2),X(:,3),‘ro‘,‘markersize‘,6);%画出集合X的三维散点图
grid on
title([‘N=‘,num2str(N),‘时,集合X的三维散点图‘]);
X_aver=sum(X)./N;%求样本数据的均值矢量
S=zeros(3);
% 第一种方法注求散布矩阵S
for i=1:N
    S=S+((X(i,:)-X_aver)‘*(X(i,:)-X_aver));
end
% 第二种方法注求散布矩阵S
% for i=1:3
%     for j=1:3
%         S(i,j)=sum((X(:,i)-X_aver(:,i)).*(X(:,j)-X_aver(:,j)));
%     end
% end
[V,D]=eig(S);%计算X的散布矩阵S的特征值和特征向量
d=sum(D);
[c1,n1]=max(d);%c1为d的最大值,n1为最大值对应的列
n2=find(d==median(d));%求中间值所在的列
e1=V(:,n1);%最大特征值对应的特征向量
e2=V(:,n2);%次大特征值对应的特征向量
for i=1:N
    y1(i,:)=(X(i,:)-X_aver)*e1;
    y2(i,:)=(X(i,:)-X_aver)*e2;
end
Y=[y1 y2];%集合Y
figure(2);
plot(Y(:,1),Y(:,2),‘g.‘);%集合Y的二维散点图
title([‘N=‘,num2str(N),‘时,集合Y的二维散点图‘]);
grid on
V_inv=inv(V);%特征向量矩阵V的逆矩阵
W=[V_inv(:,1) V_inv(:,2)];
for j=1:N
    Z(j,:)=(W*(Y(j,:))‘)‘+X_aver;
end
figure(3);%在一幅图上画出集合X和Z的三维散点图
plot3(X(:,1),X(:,2),X(:,3),‘b.‘,‘markersize‘,6);
hold on
plot3(Z(:,1),Z(:,2),Z(:,3),‘ro‘,‘markersize‘,6);
hold on
title([‘N=‘,num2str(N),‘时,集合Z与集合X的三维散点图‘]);
legend(‘集合Z‘,‘集合X‘);
grid on
for i=1:N
    plot3([Z(i,1) X(i,1)],[Z(i,2) X(i,2)],[Z(i,3) X(i,3)],‘color‘,‘g‘)
    %找出X与Z的对应关系并用绿线连接起来
end
grid on
E=(Z-X).^2;
E_sum=sum(E(:,1)+E(:,2)+E(:,3));%误差平方之和
E_mean=E_sum/N;%均方误差
时间: 2024-11-03 05:39:08

主分量分析PCA的相关文章

模式识别:PCA主分量分析与Fisher线性判别分析

本实验的目的是学习和掌握PCA主分量分析方法和Fisher线性判别方法.首先了解PCA主分量分析方法的基本概念,理解利用PCA 分析可以对数据集合在特征空间进行平移和旋转.实验的第二部分是学习和掌握Fisher线性判别方法.了解Fisher线性判别方法找的最优方向与非最优方向的差异,将高维分布的数据进行降维,并通过Fisher线性判别方法实现高维数据在一维中分类. 一.技术论述 1.统计分析方法中的降维思想 在模式识别的研究过程中,往往需要对反映事物的多个变量进行大量的观测,收集大量数据以便进行

机器学习:Principal components analysis (主分量分析)

Principal components analysis 这一讲,我们简单介绍Principal Components Analysis(PCA),这个方法可以用来确定特征空间的子空间,用一种更加紧凑的方式(更少的维数)来表示原来的特征空间.假设我们有一组训练集{x(i);i=1,...m},含有m个训练样本,每一个训练样本x(i)∈Rn,其中(n?m),每一个n维的训练 样本意味着有n个属性,一般来说,这n个属性里面,会有很多是存在一定相关性的,也就是很多属性是冗余的,这就为特征的降维提供了

stata学习笔记(四):主成份分析与因子分析

1.判断是否适合做主成份分析,变量标准化 Kaiser-Meyer-Olkin抽样充分性测度也是用于测量变量之间相关关系的强弱的重要指标,是通过比较两个变量的相关系数与偏相关系数得到的. KMO介于0于1之间.KMO越高,表明变量的共性越强.如果偏相关系数相对于相关系数比较高,则KMO比较低,主成分分析不能起到很好的数据约化效果. 根据Kaiser(1974),一般的判断标准如下: 0.00-0.49,不能接受(unacceptable); 0.50-0.59,非常差(miserable): 0

PCA主成份分析

1   背景介绍 真实的训练数据总是存在各种各样的问题: 1. 比如拿到一个汽车的样本,里面既有以“千米/每小时”度量的最大速度特征,也有“英里/小时”的最大速度特征,显然这两个特征有一个多余. 2. 拿到一个数学系的本科生期末考试成绩单,里面有三列,一列是对数学的兴趣程度,一列是复习时间,还有一列是考试成绩.我们知道要学好数学,需要有浓厚的兴趣,所以第二项与第一项强相关,第三项和第二项也是强相关.那是不是可以合并第一项和第二项呢? 3. 拿到一个样本,特征非常多,而样例特别少,这样用回归去直接

图像识别概念入门之“基于主成份分析的人脸识别学习”

最近看到一篇介绍利用“主成份分析实现人脸识别”的matlab应用实例. 学习了一遍,对主成份分析和图像识别有了一个概念性的认识. 这个例子可能是最简单的人脸识别例子了,暂且不考虑实用性,单单起到认识和了解. 下面matlab程序进行学习注释,希望能帮助记忆.同时加强交流. 程序使用的人脸库来自Essex大学的人脸数据库的face94部分.选择了10个人,每人选择3张照片.1张放入测试集合. 2张放入训练集合.照片比较理想化,绿色背景的大头照片,表情略有不同,光照均匀. 程序的链接如下: http

主成份分析(Principal Components Analysis)

因子分析是基于概率模型的基础上,利用EM算法的迭代,对参数进行估计.主成份分析(Principal Components Analysis, PCA)仅仅通过的线性变幻,用少数几个主分量来近似的表示所有的变量,以达到降低维度的目的. 一.  规范化(normalize) 规范化的目的是将不同尺度的数据化为同一尺度.规范化的步骤如下: (1)令 : (2)将所有替换为: (3)令: (4)将所有替换为. 其中,步骤(1)和步骤(2)将数据的均值转换为零:步骤(3)和步骤(4)使得数据都为单位方差,

uboot主Makefile分析(t配置和编译过程详解)

1.编译uboot前需要三次make make distcleanmake x210_sd_configmake -j4 make distclean为清楚dist文件. make x210_sd_config  跳转执行mkconfig用来配置并生成config.mk(board/samsung/x210目录下为指定链接地址的与主uboot目录的config.mk不同) autuconfig.mk 2.框图 3.uboot主Makefile分析 3.1.uboot version确定(Make

<01>主函数分析+创建一个新的Target+C语言程序执行流程

1.C语言的源程序的后缀:.c格式 2.C语言源程序: 1)由函数构成 2)在一个程序中,只有一个主函数(主函数由系统调用) 3)函数只有被调用的时候,才执行 4)如果没有主函数程序无法运行 5) C语言中语句结束一定要有分号 3.主函数的写法: int main(){ printf("hello world"); return 0; } 4.C语言程序的执行 1)command+r 2)点击左上角的 三角 符号 //Program ended with exit code: 0  程

uboot总结:uboot配置和启动过程1(主Makefile分析)

说明:文件位置:在uboot的目录下,文件名为:Makefile 从文件的头部开始分析 1.24-29行,配置uboot的版本信息. VERSION = 1 PATCHLEVEL = 3 SUBLEVEL = 4 EXTRAVERSION = U_BOOT_VERSION = $(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION) VERSION_FILE = $(obj)include/version_autogenerated.h 2.主机的环