主成分分析法

主成分分析法(PCA)

在本篇博客中,我们将会介绍一种方法,叫做主成分分析法(PCA),这种方法试图确定数据接近位于的子空间。PCA相对于因子分析法将会更为直接,它仅仅需要进行特征向量的计算(在Matlab中使用eig函数),并不需要使用EM算法。
假设我们有这样的一个数据集 {x(i);i=1,...,m} 表示m个不同种类的汽车发动机的属性,例如他们的最大速度,选旋转半径等等。使得对于每个i 满足 x(i)R ( nm )。但是对于我们不知道的是——对于两个不同的属性,例如 xi xj ——分别代表车的最大速度由英里/小时和千米/小时测量的结果。这两个属性几乎是线性相关的,仅仅是由于mph和kph之间凑整导致的误差。因此,因此这个数据实际上是位于一个接近n-1维的子空间。那么,我们如何自动检测,或者是移除这个冗余呢?
考虑一个更加自然的例子,这些数据是通过调查无线操控直升飞机的飞行员得到的,其中 x(i)1 代表飞行员i的驾驶技能,而 x(i)2 代表他们对飞行的喜欢程度。由于RC直升飞机非常难操控,只有正真喜欢它的学生才能成为好的飞行员。所以两个属性 x1 x2 高度相关。确实,我们可能假设这些数据为于一些斜线上( u1 )方向,捕获了一个人的内在驾驶”因素”,同时伴随着一些小的噪声因素(见下图)。我们如何自动地计算出 u1 方向呢?
主成分分析法_第1张图片
我们将会介绍PCA算法,但是在运行PCA算法之前,一般情况下我们会先预处理这些数据,以标准化其均值和方差,如下:
1.让 μ=1mmi=1x(i)
2.用 x(i)μ 代替 x(i)
3.使得 σ2j=1mi(x(i)j)2
4.用 x(i)j/σj 代替 x(i)j
如果我们知道数据的均值为0那么步骤(1-2)可以被省略,如果不同属性的有相同的取值规模,那么步骤(3-4)可以被省略。
那么,在进行完正则化之后,我们如何计算主轴线的计算主轴线的方向呢?一种解决问题的方法是我们要找到单位向量 u 以至于当我们把数据投影到 u 对应的方向时,满足投影数据的方差最大化。
考虑如下的数据集,其已经进行完正则化了:
主成分分析法_第2张图片
现在,假设我们选择了下图中直线对应的方向为u。黑点表示原始数据在这条直线上的投影。主成分分析法_第3张图片
我们可以看到投影数据有一个相当大的方差,并且这些点倾向于远离0。相反的,如果我们选择下图所示的方向:
主成分分析法_第4张图片
这里投影点的方差相当小,并且这些点很接近原点。我们倾向于选择第一张图的方向。为了正式化这些,如果给定一个单位向量u和一个点x,x在u上的投影长度是由 xTu 给出的。也就是说 x(i) 是我们数据里的点(图中×所代表的一个点),它在u上的投影点到原点的距离就是 xTu ,因此,为了最大化投影点的方差,我们将要选择能使最大化下式的单位长度向量u:
主成分分析法_第5张图片
我们可以很容易识别在条件 ||u||2=1 的情况下最大化目标函数就是找到 =1mmi=1x(i)x(i)T 的主特征向量,也就是我们要找到的u。
总结:如果我们想要找到一个1维子空间用来接近数据,我们应该选择u,这个u是 的主成特征向量。一般的,如果我们想要投影我们的数据到一个K维的子空间( k<n )我们应该选择 最主要的K个特征向量作为 u1,..,uk ,所有的 ui 形成了一个新的,正交的基础系。
所以,为了在新的坐标系中表示 x(i) ,我们只需要计算对应的向量
主成分分析法_第6张图片
这里 x(i)Rn ,向量 y(i) 给出了一个更低的,k维的,用来接近或者代表 x(i) 的表示。PCA同时也被认为是一种降维算法,向量 u1,...,uk 也被叫做数据的K个首要的元素。

你可能感兴趣的:(机器学习)