PCA(主成分分析法)
1. PCA(最大化方差定义或者最小化投影误差定义)是一种无监督算法,也就是我们不需要标签也能对数据做降维,这就使得其应用范围更加广泛了。那么PCA的核心思想是什么呢?
例如D维变量构成的数据集,PCA的目标是将数据投影到维度为K的子空间中,要求K<D且最大化投影数据的方差。这里的K值既可以指定,也可以利用主成分的信息来确定。
PCA其实就是方差与协方差的运用。
降维的优化目标:将一组 N 维向量降为 K 维,其目标是选择 K 个单位正交基,使得原始数据变换到这组基上后,各变量两两间协方差为 0,而变量方差则尽可能大(在正交的约束下,取最大的 K 个方差)。
2. PCA存在的问题:
原来的数据中比如包括了年龄,性别,身高等指标降维后的数据既然维度变小了,那么每一维都是什么含义呢?这个就很难解释了,所以PCA本质来说是无法解释降维后的数据的物理含义,换句话说就是降维完啦计算机能更好的认识这些数据,但是咱们就很难理解了。
PCA对数据有两个假设:数据必须是连续数值型;数据中没有缺失值。
过拟合:PCA 保留了主要信息,但这个主要信息只是针对训练集的,而且这个主要信息未必是重要信息。有可能舍弃了一些看似无用的信息,但是这些看似无用的信息恰好是重要信息,只是在训练集上没有很大的表现,所以 PCA 也可能加剧了过拟合;
3. PCA的作用:
缓解维度灾难:PCA 算法通过舍去一部分信息之后能使得样本的采样密度增大(因为维数降低了),这是缓解维度灾难的重要手段;
降噪:当数据受到噪声影响时,最小特征值对应的特征向量往往与噪声有关,将它们舍弃能在一定程度上起到降噪的效果;
特征独立:PCA 不仅将数据压缩到低维,它也使得降维之后的数据各特征相互独立;
4. 方差的作用:咱们可以想象一下,如果一群人都堆叠在一起,我们想区分他们是不是比较困难,但是如果这群人站在马路两侧,我们就可以很清晰的判断出来应该这是两伙人。所以基于方差我们可以做的就是让方差来去判断咱们数据的拥挤程度,在这里我们认为方差大的应该辨识度更高一些,因为分的比较开(一条马路给隔开啦)。方差可以度量数值型数据的离散程度,数据若是想要区分开来,他那他们的离散程度就需要比较大,也就是方差比较大。
5. 协方差的作用:
6. 计算过程:(下图为采用特征值分解的计算过程,若采用SVM算法,则无需计算协方差矩阵!)
为什么我们需要协方差矩阵?我们最主要的目的是希望能把方差和协方差统一到一个矩阵里,方便后面的计算。
假设我们只有 a 和 b 两个变量,那么我们将它们按行组成矩阵 X:(与matlab不同的是,在numpy中每一列表示每个样本的数据,每一行表示一个变量。比如矩阵X,该矩阵表示的意义为:有m个样本点,每个样本点由两个变量组成!)
然后:
我们可以看到这个矩阵对角线上的分别是两个变量的方差,而其它元素是 a 和 b 的协方差。两者被统一到了一个矩阵里。
7. 特征值与特征向量的计算方法-----特征值分解与奇异值分解法(SVD)(有关特征值与奇异值可见我的博文!)
(1) 特征值分解的求解过程较为简单,以下图为例子