一、 降维
在许多机器学习或者信号处理问题中都会涉及大量特征,特征数量过多会导致训练速度缓慢,难以找到解决方案。因此我们可以采用降维手段,降维虽然会丢失一些信息,但可以加快训练速度。在微弱信号检测提取上有重要作用意义。
目前数据两种降维方式——投影和流形。
二、 主成分分析
主成分分析(PCA)是目前最流行的降维技术,属于投影方式。 它是通过寻找某种空间上的正交变换,将高维数据映射到低维空间中,或者理解为低维坐标。并使其在所投影的空间或坐标上有最大方差。方差最大的目的是使其保留最大的信息量。因此,PCA降维的目的就是在“尽量不丢失信息量”的前提下,对原始特征进行降维,将原始数据投影到某个维度上,把信息损失降到最少。
这里重点解释下方差的意义:
我们在讲一个东西的稳定性的时候,往往说要减小方差,如果一个模型的方差很大,那就说明模型不稳定了。但在描述一个变量的信息量的时候,方差大才有意义,不然输入的数据都是同一个点,那方差就为0了,这样输入的多个数据就等同于一个数据了。以下面这张图为例子:
假设我们需要用一条直线去拟合这些点,应该怎么选择呢?是用x轴还是y轴?显然都不合适,因为我们把这些点单纯的投影到x轴或者y轴上,最后在x轴与y轴上得到的方差是相似的(因为这些点的趋势是在45度左右的方向,所以投影到x轴或者y轴上都是类似的),如果我们使用原来的xy坐标系去看这些点,容易看不出来这些点真正的方向是什么。但我们把坐标变换到(signal,noise)方向,就很容易发现哪个方向上方差大,哪个方向上方差小。一般来说,方差大的方向是信号的方向,方差小的方向是噪声的方向,我们在数据挖掘中或者数字信号处理中,往往要提高信号与噪声的比例,也就是信噪比。对上图来说,如果我们只保留signal方向的数据,也可以对原数据进行不错的近似了。
投影
投影比较好理解,用一个低纬度的取切高纬度空间,然后高纬度的所有点投影达到低纬度上就好了。三维空间上的点如图
将所有点落到灰色平面上:
三、求解步骤
- 去均值
- 计算协方差矩阵
- 计算协方差矩阵的特征值和特征向量
- 将特征值排序
- 保留前N个最大的特征值对应的特征向量(即降维后保留的成分)
- 将原始特征转换到上面得到的N个特征向量构建的新空间中
第一步去均值过程并不是独立于PCA之外的步骤,而是首要且必不可少的步骤;第四步中, 选取最大的前k个特征值和相对应的特征向量,并进行投影的过程,就是降维的过程;这就实现了主成分分析的特征压缩。
四、Python实现主成分分析
使用sklearn库
from sklearn.decomposition import PCA
# n_components设置保留的分量个数
# 假设X是个三维数组
pca = PCA(n_components=2)
# 降维后的二维X
X2D = pca.fit_transform(X)
# 降维后的数据转换为原始数据
X3D_inv = pca.inverse_transform(X2D)