特征降维

来源:互联网 发布:sql 附加数据库 编辑:程序博客网 时间:2024/05/16 04:56

维度灾难

首先在机器学习中,如果特征值(也可称之为维度,或feature,或参数)过多,会发生所谓的维度灾难。维度灾难最直接的后果就是过拟合现象,而发生该现象最根本的原因是:

1,维度增加时,有限的样本空间会越来越稀疏。因此模型出现在训练集上表现良好,但对新数据缺乏泛化能力的现象。

如果训练集可以达到理论上的无限个,那么就不存在维度灾难,我们可以用无限个维度去得到一个完美的分类器。训练集样本越少,越应该用少量的特征,如果N个训练样本足够覆盖一个一维的特征空间(区间大小为一个单位),那么 需要N^2个样本去覆盖一个同样密度的二维的特征空间,需要N^3个样本去覆盖三维的特征空间。换句话说,就是训练样本多少需要随着维度指数增长。

2,维度增加时,每个样本数据越来越不可能符合所有维度(特征),这使得大部分样本都变成了噪声。


下面这两篇文章非常非常浅显的探讨了这个问题,绝对不要错过:

http://blog.csdn.net/tanya_girl/article/details/50151183

http://blog.csdn.net/tanya_girl/article/details/50151291


如何判断发生了过拟合

如果模型训练完毕后,发现模型在样本集上表现良好,但在新数据上准确率低于或高于某阈值,可基本判定发生了过拟合。例如在新数据上准确率低于50%或高于90%。

也可在模型训练阶段采用交叉验证来检测是否发生了过拟合。基本方法是将训练数据分为一个或多个数据集,用一部分数据集训练模型,另一部分验证模型准确度。如果分类结果在训练集合和测试集合上相差很多,那么就是产生了过拟合。


特征降维

特征降维就是用来减少维度,去除过拟合现象的方法。特征降维分为两种特征选择和特征抽取。

首先我们应明确特征选择与特征抽取的区别,虽然二者达到的效果都是减少特征维度,但二者有本质的区别:

1,特征选择 Feature Selection

选择有效的特征子集,即去掉不相关或冗余的特征。目的是减少特征个数,提高模型精度,减少运行时间。特征选择后留下的特征值的数值在选择前后没有变化。

2,特征抽取 Feature Extraction

特征抽取是指改变原有的特征空间,并将其映射到一个新的特征空间。例如某个特征是一张图片,将这张图片中的点,线条或颜色提取出来并参数化,就是一个特征抽取的过程,且这个过程是升维的。因此这个例子是特征抽取,但不能算是特征降维。

另一种情况,例如特征空间包含城市名称,城市等级和城市人口。这三种特征有很强的相关性,但并不能互相替代。因为例如北上广同为一线城市,但人口总量还是有区别的,因此不能在特征选择时简单的将城市人口去掉。但为了达到降维的目的,我们可以将高维特征空间映射到低维特征空间,且城市等级和人口在低维空间都有所表达。

此时降维的本质就是学习一个映射函数 f : x->y,其中x是原始数据点的表达,目前最多使用向量表达形式。 y是数据点映射后的低维向量表达,通常y的维度小于x的维度。抽取前后特征值的数值会发生变化,维度会降低,且维度之间会更加独立。


特征选择和特征抽取的常用算法

特征选择和特征抽取又是一个复杂的话题,具体可以参考维基百科。但二者都是非监督学习。

简单的说:

特征选择的模型可以分为三类:Wrappers, Filters and Embedded。

Wrappers 使用一个搜索算法来搜索所有可能的特征空间子集,对于每一个特征空间子集运行模型并评估。因此Wrappers在计算上非常费时,同时存在过拟合的风险。
Filters和Wrappers类似,只不过不使用模型来评估,而是使用一个更为简单的过滤器来评估。
Embedded是指嵌入一个模型。


PCA算法和LDA算法是最常用的两种特征抽取算法。

PCA算法又名主成分分析算法(Principal Component Analysis)。它通过协方差矩阵的特征值分解能够得到数据的主成分,以二维特征为例,两个特征之间可能存在线性关系(例如运动的时速和秒速度),这样就造成了第二维信息是冗余的。PCA的目标是发现这种特征之间的线性关系,并去除。因此PCA本质是一种去相关算法。
LDA算法又名线性判别式分析(Linear Discriminant Analysis,也有叫做Fisher Linear Discriminant)。它考虑label,降维后的数据点尽可能地容易被区分。


0 0