如果数据的特征维数很高,往往给我们的学习算法带来巨大的挑战(不止是训练时间和计算复杂度)。比如,一些不相关的特征的存在,也可能使得我们的学习算法overfitting。
所以如何降维,以及如何选择更少更精准的特征,是一个大家都要面对的问题。
一般降维主要有2种手段 - feature extraction 和 feature selection。 前者是相当于提取特征,最后会产生新的特征, 而后者直接就是从原来的特征集中选择部分特征。
这一篇主要先整理下feature extraction的东西。
- Principal component analysis
- Kernel PCA
- Factor Analysis
- Independent component analysis
- Isomap
- Autoencoder
- Restrict Boltzmann Machine
这里7种常用降维方法,都是非监督的。
Principal Component Analysis
PCA就是主成分分析,是一种最常见的非监督降维手段。假设我们的特征维度是n,PCA可以看成是将原来的点投影到某个维度为k的平面。
按优化角度来理解的话,我们的目标是找一个平面,使得所有点到这个平面的距离和最短。有了这个条件,就有了最优化目标,然后就把这个优化解出来即可。
按统计角度来理解的话,我们希望投影后的新特征,每个的方差尽可能大。这个为什么呢?因为方差越大,说明保留的信息越多(如果方差很小,则新特征对每个样本都是一样的,没有意义!)
当然,最后的解都是一样的。
Kernel PCA
刚看到这个名字,不知道是不是有人跟我一样困惑,kernel是升维的,pca是降维的,他们怎么可以凑到一起呢?原来,这里的kernel升维,其实意思是假设我原有的特征能够在一个更高的维度里,有着更好的表达,那为什么不干脆直接在更高维里做pca呢?
Kernel pca的基本想法就是这样,具体如何做kernel可以参考下面这个链接:
http://blog.youkuaiyun.com/wolenski/article/details/7961703
简单地说,其实就是找寻<xi,xj>这样的形式(SVM的启发!), 然后转换成Kernel形式 - K(xi,xj)。
Factor Analysis
Factor Analysis叫做因子分析。他主要是假设我观察到的特征,可以由较少的隐藏特征来表达。因子分析主要假设每个特征都是可以由隐藏特征的线性组合加上误差项组成。
因子分析和主成分分析有一定的关联,但是两者不是很一样。从模型角度,因子分析是借助线性回归,而主成分更多地是一种描述性的统计技巧(方差最大)。
一般需要经过旋转才能对因子进行命名和解释。
关于因子分析可以参考wiki:
http://en.wikipedia.org/wiki/Factor_analysis
Independent Component Analysis
ICA又叫独立成分分析。 ICA之前也不是很懂(只闻其名啊),然后搜了下wiki。发现还挺复杂,实现的方法有很多。
阅读了下这个
http://www.cnblogs.com/jerrylead/archive/2011/04/19/2021071.html,看着应该还好,最大似然样本概率,然后求解W。核心思想就是要把原来的属性,变成互相独立的新特征。而PCA其实是把原来的属性,变成不相关的新特征。我们知道,独立一定不相关,不相关不一定独立。所以,ICA似乎条件更强。
Isomap
其实和Isomap有很多相似的降维办法,比如MDS, Spectral Clustering, Laplacian Eigmaps, LLE。
这些算法的步骤都差不多,具体可以参考这个pdf:
http://machinelearning.wustl.edu/mlpapers/paper_files/NIPS2003_AA23.pdf
值得注意的是Isomap是非线性的。
Autoencoder & RBMs
最后把这两个放一起,因为他们都是神经网络。
Autoencoder就是自编码,训练的时候,输出层和输入层一。中间的隐含层节点数小于输入层(降维)。网络训练完后,隐含层就是降维后的表达。
RBMs叫做受限制波兹尔曼机,他只有双向链接的2层,一个可见层一个隐含层。RBM主要是基于能量函数,来求得联合分布、边缘分布、条件分布,通过最大似然(可见样本的概率) 来求得整个网络的权值参数,过程中需要用到采样技术。 具体可以参考:
http://blog.youkuaiyun.com/mytestmy/article/details/9150213
Feature Extraction就基本介绍这些啦~~~~