摘要:
本文主要讨论的对象是PCA(主成分分析)。
PCA是什么?
PCA(主成分分析)在机器学习中的应用很广泛,通常PCA可以用来对数据进行降维,或者说将数据从高维的空间映射到低维的空间。简单来说,所谓的降维其实就是这么一个过程:
假设原始数据有 n n 个样例, 个特征,也就是 n×m n × m 的矩阵。把这个 n×m n × m 的规模的矩阵映射成一个 n×k n × k 的矩阵过程就是一个降维的过程,特征维度从 m m 降到了 。
那很自然地会有一个问题,为什么要降维,也就是维度太高有哪些不好的地方?
1.数据维度太高的时候采用树模型的话就不太合适,因为这个时候特征维度高,特征之间可能存在相关性,一方面数据存在冗余信息,另一方面很多的特征都将得不到使用。
2.数据维度太高时会导致模型变的复杂(因为需要学习的参数变多了,模型自然就变得复杂了)
3.对机器的性能要求也提高了,当数据的特征维度比较高时,这个时候不仅需要更多空间来存储数据,模型的训练也会变慢。
其实上面都是从模型的角度来看的,如果从数据本身来看的话,做降维其实就是为了得到一个质量更加好的数据集。举一个简单的例子,比如有一个数据集如下:
上面的数据集中有4条样本,每条样本有3个特征。可以看到对于feature1,其取值全部都是1,很明显,这一个维度其实是冗余的,因为在这个维度上其方差为0,也就是任何样本对于这个特征的取值都是一样,模型在这个维度上学习不到任何的东西,因此我们完全可以把这个维度去掉。
那我们是直接把feature1去掉,然后保留feature2和feature3吗?
这里其实涉及到和 降维很类似的东西 特征选择。
PCA与特征选择
我们知道,特征选择是机器学习一个很重要的步骤。我们有许多做特征选择的方法。
其中判断某一个特征的方差也是一个常用而简单的方法。对于上面的数据集,如果我们进行特征选择的话,很容易就会把feature1去掉,保留feature2,feauture3而且 数值不变,即为下面的数据集:
这个时候,特征维度也从3维减少为2维,这里其实也是一个降维的过程。但是其与PCA是完全不一样的结果,如果利用PCA的话,上面数据缩减为2维时的结果如下:
可以看到,相比直接的特征选择,其缩减为2维的时候,feature2和feature3在数值是会变化的。
当然原因是因为特征选择是在经过某个指标的分析对比后,直接删掉某个维度的特征来实现特征维度的降低,数值上前后当然不发生变化。而PCA是通过一个映射的关系来实现特征维度的降低,既然经过了映射数值发生变化了是很自然的。
PCA如何实现降维?
上面简单谈了下什么是PCA,以及为何做PCA后,下面就开始分析PCA是如何实现降维的。
PCA的思想其实简单的概括就是:选取包含信息量最多的方向对数据进行投影,其投影方向可以从最大化方差或者最小化投影误差两个角度来理解。
比如说,对二维平面上的点按照下图方向投影时(叉号是原来的点,实心点是投影后的点)
对比另外一个投影方向:
可以看到,对于第一个投影,投影后的点更加的分散,对于第二个投影,投影后的点相对比较集中。按照最大化方差,第一个投影的效果会更好,更加的分散意味着投影后的方差更大。
可能刚学习PCA的时候都会对为何要最大化方差产生疑问。其实这个问题很好理解,我们可以考虑两个极端的情况,一个就是空间中的点投影后全部到落在了一个点上,另外一个就是空间中的点投影后每一个点都不一样。同时,我们可以把投影后产生的点看成一维新的特征,那么对于前者,既然特征的取值全部都为一样了,这个时候即使降维了,模型也无法从这一个维度中学习到任何的信息。相反,对于后者,由于投影后每一个点都一样,说明这个特征具有一定区分度,同时方差大说明包含的信息量大。
所以PCA的思想就是通过最大化方差来找到合适的投影方向。
下面就是开始用数学的语言来描述PCA的整个过程:
既然我们希望投影后的投影值尽可能的分散,也就是说:
投影后样本点的方差: ∑iUTxixTiU ∑ i U T x i x i T U 。
尽可能的分散等价于最大化方差: Max(∑iWTxixTiW) M a x ( ∑ i W T x i x i T W ) 。
这里简单解释一下为什么投影后的样本点方差是 ∑iUTxixTiU ∑ i U T x i x i T U 。
在空间中的一点 x x ,若往方向单位向量
上投影,其投影后的坐标为 xTu x T u 或者 uTx u T x 。
假如我们的数据集 X X 用矩阵表示如下:
每一行代表某一个特征,每一列代表一条样本。
那么假设投影向量为P
将数据集X在P方向上投影: