特征降维必须在特征选择做完以后才能进行。
当特征选择完成后,可以直接可以进行训练模型了,但是可能由于特征矩阵过大,导致计算量比较大,训练时间长的问题,因此降低特征矩阵维度也是必不可少的。
常见的降维方法除了基于L1的惩罚模型外,还有主成分析法(PCA) 和 线性判别分析法(LDA),这两种方法的本质都是将原始数据映射到维度更低的样本空间中;
但是采用的方式不同,PCA是为了让映射后的样本具有更大的发散性,LDA是为了让映射后的样本有最好的分类性能。
除了使用PCA和LDA降维外,还可以使用主题模型来达到降维的效果。主题模型主要还是用在自然语言处理中的。如果找到一个互联网产品的用户日志还用主题模型去降维那效果就非常不好了,这个时候还是要用PCA和LDA来处理。
在实际的机器学习项目中,特征选择/降维是必须进行的,因为在数据中存在以下几个方面的问题:
1、数据的多重共线性:特征属性之间存在着相互关联关系。多重共线性会导致解的空间不稳定,从而导致模型的泛化能力弱;
2、高纬空间样本具有稀疏性,导致模型比较难找到数据特征;
3、过多的变量会妨碍模型查找规律;
4、仅仅考虑单个变量对于目标属性的影响可能忽略变量之间的潜在关系。
PCA降维: 新数据是原数据的一个线性表达,如下图:
通过降维的目的是:
1、减少特征属性的个数。
2、确保特征属性之间是相互独立的。
降维-PCA
主成分分析(PCA): 将高纬的特征向量合并成为低纬度的特征属性,是一种无监督的降维方法。
n_components:产生新特征的个数。
另外explained_variance_ratio_等重要方法,参考:scikit-learn PCA类介绍
PCA原理
PCA(Principal Component Analysis)是常用的线性降维方法,是一种无监督的降维算法。算法目标是通过某种线性投影,将高维的数据映射到低维的空间中表示,并且期望在所投影的维度上数据的方差最大(最大方差理论),以此使用较少的数据维度,同时保留较多的原数据点的特性。
通俗来讲的话,如果将所有点映射到一起,那么维度一定降低下去了,但是同时也会将几乎所有的信息(包括点点之间的距离等)都丢失了,而如果映射之后的数据具有比较大的方差,那么可以认为数据点则会比较分散,这样的话,就可以保留更多的信息。从而我们可以看到PCA是一种丢失原始数据信息最少的无监督线性降维方式。
在PCA降维中,数据从原来的坐标系转换为新的坐标系,新坐标系的选择由数据本身的特性决定。
第一个坐标轴选择原始数据中方差最大的方向,从统计角度来讲,这个方向是最重要的方向;
第二个坐标轴选择和第一个坐标轴垂直或者正交的方向;
第三个坐标轴选择和第一个、第二个坐标轴都垂直或者正交的方向;
该过程一直重复,直到新坐标系的维度和原始坐标系维度数目一致的时候结束计算。
而这些方向所表示的数据特征就被称为“主成分”。
PS: WTxi 中的WT是一个线性变换,通过这个向量,使得上图左边的样子变成了右边的样子。
假设X是已经中心化(z-score)过的数据矩阵,每列一个样本(每行一个特征);样本点xi在新空间中的超平面上的投影是:WTxi;若所有样本点的投影能够尽可能的分开,则表示投影之后的点在各个维度上的方差应该最大化,那么投影样本点的各个维度方差和可以表示为:
为什么要中心化?
从而我们可以得到PCA的最优目标函数是:
在PCA的目标函数基础上,带入拉格朗日求解最终,可以得到最终的拉格朗日函数函数为:
对拉格朗日函数求偏导数0:
可以发现如果,此时将XXT看成一个整体A,那么求解W的过程恰好就是求解矩阵A的特征向量的过程,所以我们可以认为PCA的计算其实就是对进行去中心化后的数据的协方差矩阵求解特征值和特征向量。
PCA的执行过程
输入: 样本集X={x1,x2,...,xn};每个样本有m维特征,X是一个m行n列的矩阵。
步骤:
1、数据中心化:对X中的每一行(即一个特征属性)进行零均值化,即减去这一行的均值。
2、求出数据中心化后矩阵X的协方差矩阵(即特征与特征之间的协方差构成的矩阵)
3、求解协方差矩阵的特征值和特征向量
4、将特征向量按照特征值从大到小按列进行排列称为矩阵,获取最前面的k列数据形成矩阵W。
5、利用矩阵W和样本集X进行矩阵的乘法得到降低到k维的最终数据矩阵。
PCA案例
PCA降维的SVD求解方式
PCA的求解相当于是求解XXT的特征向量和特征值的求解。
而且此时恰好XXT是对角矩阵,所以我们可以将其进行特征分解:
另外对矩阵X进行SVD矩阵分解,那么可以得到下列式子: