降维 Dimensionality Reduction
自变量维度过多会给所有数据挖掘方法带来麻烦:(1)自变量过多会导致建模算法的运行速度慢。(2)自变量的维度增加时,过度拟合的可能性也会随之增大。(3)自变量维度越多,数据在整个输入空间的分布越稀疏,越难以获得对整个输入空间有代表性的样本。例如,如果只有一个均匀分布的二分自变量,那么1000个观测意味着平均每种取值对应于500个观测;但如果有10个均匀分布的二分自变量,总共有210=1024种取值,同样1000个观测却意味着平均而言每种取值对应于不到1个观测。
最近做的分类问题,训练数据的维度很大,且具有稀疏性,而且样本不是很多。所以现在的情况是,特征维度p >> n样本量。这种情况,使用pca做了测试试验,效果并不好,在知乎上有人说这种情况可以尝试sparse pca,如果有lable的话,还可以尝试supervised降维方法(比如将要介绍的LDA)。这里先把这两个功课补一下。
Sparse PCA
先说一下pca:
通过正交变换(线性)将一组可能存在相关性的变量转换为一组线性不相关的变量,转换后的这组变量叫主成分,同时要使主成分保留尽可能多的原数据信息且彼此不相关。这里的信息通常用方差衡量。
普通pca通过向量间的空间转化降维,依据输入变量间的线性关系并把它们转换成新的变量(即主成分),转换的目标是最大化数据方差。普通pca的一个明显不足就是,最终得到的主成分只是所有(稀疏不稀疏的差别正是在于此)输入变量间的线性组合
v=Σa_i_ * x_i_
,这里所有的系数a_i_不为0,这也使得pca找到的主成分难于解释。
而Spase pca:
使用的是输入变量的一小部分,找到这一小部分输入向量间的线性组合v=Σa_i_* x_i_
,a_i_的大部分为0.在某种程度上说就是做了feature selection,这能清楚的指出是原始特征中的哪一个对样本的差异性贡献最大。这样做克服了普通pca的缺点。
简单说就是,sparse pca通过在输入端加入稀疏限制(L1正则)扩展了普通pca;如果熟悉回归问题,换一种说法:sparse pca就把pca转换成在L1约束下的线性回归最优化问题。现在来看一下sparse pca的算法。
有一个 N x P 的矩阵 X,N代表样本个数,P代表每个特征的维度。并假设X是去中心化的(在pca中也有相关操作),也就是现在X的每列的均值为0.
求X的协方差矩阵.
Σ=X^T^X, ∑是pxp维的。
Sparse PCA可以形式化为(step1):
含义就是,最大化向量v方向上(v∈R^p^)的方差,同时有两个限制:第一个二范数限制向量是单位向量,第二个0范数限制v稀疏,这里的k应该远远小于p,当k=p时,该算法就退化成了普通pca。式子中使用的了L0正则,方便理解,但是在实际优化计算过程,使用的是L1正则代替L0正则。
插入一点个人理解:上式如果没有L0正则的限制,就是一个简单的等式约束下的最优化问题,比较容易求解。因为L0正则的限制,使得该为题成为NP-hard问题。
解上述优化问题,一方面得到最优解,即最大化的那个东西,称为k-sparse的最大特征值。同时也得到了特征向量v,据此可以对Σ实施缩减操作(step2):
然后用Σ 1替代step1中的Σ,迭代上两步操作,即可得到主成分(类似pca)。需要注意的是,得到的主成分并不是正交的(pca得到的是正交的)。
从这个过程可以看出,sparse pca每次迭代得到的都是当前最大特征值对应的特征向量;pca是同时得到所有特征值,选取前k个较大的。
理论如此,然而step1的求解并不是很容易的。因为它是一个NP-hard问题。有一些方法尝试解决了该问题,这里介绍
(1)Semidefinite programming relaxation(半定规划松弛)
原sparse pca问题可以用semidefinite programming(SDP)近似:
Tr代表矩阵的迹。 V=vvT 是p*p的对称矩阵。
这时候,如果丢掉rank=1的约束,再放松稀疏约束(因为原来的这两个约束使非凸的),就是Semidefinite programming relaxation了:
该问题可以在多项式时间内求解。
1代表p*1的元素都为1的向量。|V|是V中的元素取绝对值。
(2)python sk-learn中的解法
该方法来自“Structured Sparse Principal Component Analysis” R. Jenatton, G. Obozinski, F. Bach, 2009
把原问题形式化为添加了L1正则的pca问题:
使用sklearn,有人说并不用去中心化
To clarify: PCA is mathematically defined as centering the data (removing the mean value to each feature) and then applying truncated SVD on the centered data.
As centering the data would destroy the sparsity and force a dense representation that often does not fit in memory any more, it is common to directly do truncated SVD on sparse data (without centering). This resembles PCA but it’s not exactly the same.
我的试验结果也显示,不去中心话的效果更好,而且计算时间缩短了4~5倍。
sk-learn中sparse pca的参数及使用参考官方文档http://scikit-learn.org/stable/modules/generated/sklearn.decomposition.SparsePCA.html
Linear Discriminant Analysis
这篇值简单说一下对LDA的感性认识,详细请参考http://blog.csdn.net/qq_14975217/article/details/51720757;
LDA是一种有监督的线性降维方法。与PCA保持数据信息不同,LDA是为了使得降维后的数据点尽可能的容易被区分。所以LDA是找出与类别最相关的特征,也相当于做了特征选择。
在有监督学习的一面理解,LDA与Logistic regression很相似,是为了分类;在计算降维后的特征方面,与PCA后factor analysis很相似,都是用原特征的某种线性组合来更好的拟合数据。
优化目标是:最大化类间方差(散列),最小化类内方差(散列)