首页 > 编程 > Python > 正文

特征脸(Eigenface)理论基础之PCA主成分分析法

2020-02-22 23:27:45
字体:
来源:转载
供稿:网友

在之前的博客 人脸识别经典算法一:特征脸方法(Eigenface)里面介绍了特征脸方法的原理,但是并没有对它用到的理论基础PCA做介绍,现在做补充。请将这两篇博文结合起来阅读。以下内容大部分参考自斯坦福机器学习课程:http://cs229.stanford.edu/materials.html

假设我们有一个关于机动车属性的数据集{x(i);i=1,...,m}(m代表机动车的属性个数),例如最大速度,最大转弯半径等。假设x(i)本质上是n维的空间的一个元素,其中n<<m,但是n对我们来说是未知的。假设xi和xj分别代表车以英里和公里为单位的最大速度。显然这两个属性是冗余的,因为它们两个是有线性关系而且可以相互转化的。因此如果仅以xi和xj来考虑的话,这个数据集是属于m-1维而不是m维空间的,所以n=m-1。推广之,我们该用什么方法降低数据冗余性呢?

首先考虑一个例子,假设有一份对遥控直升机操作员的调查,用x(i)1(1是下标,原谅我这操蛋的排版吧)表示飞行员i的飞行技能,x(i)2表示飞行员i喜欢飞行的程度。通常遥控直升飞机是很难操作的,只有那些非常坚持而且真正喜欢驾驶的人才能熟练操作。所以这两个属性x(i)1和x(i)2相关性是非常强的。我们可以假设两者的关系是按正比关系变化的,如下图里的u1所示,数据散布在u1两侧是因为有少许噪声。

接下来就是如何计算u1的方向了。首先我们需要预处理数据。

1.令

2.用x(i)-μ替代x(i)

3.求

4.用x(i)j/σj替代x(i)j

步骤1-2其实是将数据集的均值归零,也就是只取数据的偏差部分,对于本身均值为零的数据可以忽略这两步。步骤3-4是按照每个属性的方差将数据重新度量,也可以理解为归一化。因为对于不同的属性(比如车的速度和车座数目)如果不归一化是不具有比较性的,两者不在一个量级上。如果将pca应用到图像上的话是不需要步骤3-4的,因为每个像素(相当于不同的属性)的取值范围都是一样的。

数据经过如上处理之后,接下来就是寻找数据大致的走向了。一种方法是找到一个单位向量u,使所有数据在u上的投影之和最大,当然数据并不是严格按照u的方向分布的,而是分布在其周围。考虑下图的数据分布(这些数据已经做了前期的预处理)。

下图中,星号代表数据,原点代表数据在单位向量u上的投影(|x||u|cosΘ)

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表