维度灾难和特征选择

1. 什么是维度

  一句话:维度是一个数字,表征每个样本中特征的数量
  机器学习中,对于数据一般用 n ∗ m n*m nm矩阵表达, n n n表示样本(sample)数量, m m m表示特征(attribute/feature/variable)数量。如下图,即是 4 ∗ 2 4*2 42的矩阵,表示有4条数据,每个数据有2个特征。

  因此,图中数据的维度是2。

2. 什么是维度灾难

  wiki上定义:维数灾难(英语:curse of dimensionality,又名维度诅咒)是一个最早由理查德·贝尔曼(Richard E. Bellman)在考虑优化问题时首次提出来的术语,用来描述当(数学)空间维度增加时,分析和组织高维空间(通常有成百上千维),因体积指数增加而遇到各种问题场景。可以推广到组合学,采样,优化,机器学习,贝叶斯统计等多个领域。
  具体到机器学习,维度灾难表现为“给定数量的训练样本,其预测性能随着维度的增加而减少”。换个说法,“要达到同样的预测性能,高维数据比低维数据所要求的训练样本数量要大得多,一般呈几何级数增长”。
如下图所示:

  训练样本数量一定,随着维度增加在达到一个最优维度时,预测性能最佳;越过这个最优维度值后,性能随着维度增加而下降。

3. 为什么会产生维度灾难

  通过上述描述,维度灾难涉及到三方:训练样本数量,预测性能,维度。在三方中任何一方给定,则其他两方的变化是相互影响的,需要权衡折中。

3.1 样本不足

当数据量一定,要达到预期性能,为什么维度增加会导致样本不足?
  从统计学角度理解,机器学习本质上逆概问题,即假定数据符合某个模型,用训练样本求解模型最优参数。
  在统计学习中,这叫做参数估计,即从总体中抽取的随机样本来估计总体分布中未知参数的过程。
  参数估计,对于样本要求是足够随机以及数量足够大
  可以想象,随着维度增加,特征空间呈几何式增长,给定的样本数量必然不能够满足随机和数量足够大,而且会越来越不足,表现为样本在特征空间中越来越稀疏。

3.2 过拟合

当数据量一定,为什么维度增加,模型会表现为过拟合?
  我们从《连续特征离散化的应用总结》一文中了解到,离散化增加特征维度同时会引入非线性信息。
  非线性信息固然好,能够增加拟合能力,但这并不是完全正相关的。根据奥卡姆剃刀原则,一个模型在满足预测性能条件下尽量简单,才能够有比较好的泛化能力。
  所以,增加特征维度和提高模型本身复杂性的效果是一致的,模型复杂性可以使用正则化来自动控制,而特征维度只能通过人为方式来权衡调整。

以上描述可以参考文章《The Curse of Dimensionality in classification》。

4. 怎么避免维度灾难

  我们知道特征工程是为了弥补特征不足以表达数据的所有信息而做的特征的交叉和组合,其目标是为了得到更多的特征。而特征太多,又会造成维度灾难,理论上如果训练样本时无限多的,那么维度灾难不会发生,我们可以使用无限多的特征来获得一个完美的分类器。但是理论很完美,现实很残酷。
  因此我们必须考虑到如何避免维度灾难,很遗憾没有固定的规则来指定应该使用多少特征,我们只能有一些经验方式

4.1 不同算法维度权衡

  对于复杂模型,维度不要太高;简单模型,维度可以较高。本质上考虑“是否需要增加维度,提供非线性”。

  1. 非线性决策边界的分类器(例如神经网络、KNN分类器、决策树等)分类效果好但是泛化能力差且容易发生过拟合。因此,维度不能太高。
  2. 使用泛化能力好的分类器(例如贝叶斯分类器、线性分类器),可以使用更多的特征,因为分类器模型并不复杂。

  因此,过拟合只在高维空间中预测相对少的参数和低维空间中预测多参数这两种情况下发生。

4.2 特征选择

参考 sklearn feature selection。

  1. 相关性分析
      工程上常用的手段有计算皮尔逊系数和互信息系数,皮尔逊系数只能衡量线性相关性而互信息系数能够很好地度量各种相关性,但是计算相对复杂一些,好在很多toolkit里边都包含了这个工具(如sklearn的MINE),得到相关性之后就可以排序选择特征了;

  2. L1正则化选择特征
      L1正则方法具有稀疏解的特性,因此天然具备特征选择的特性,但是要注意,L1没有选到的特征不代表不重要,原因是两个具有高相关性的特征可能只保留了一个,如果要确定哪个特征重要应再通过L2正则方法交叉检验;

  3. 训练能够对特征打分的预选模型
      RandomForest和Logistic Regression等都能对模型的特征打分,通过打分获得相关性后再训练最终模型;
      sk-learn中有SelectFromModel,可用于具有coef或者feature重要性属性的所有不同类型的学习模型。

  4. PCA主成分分析

  5. 交叉验证方式

  6. 递归特征消除
    (1)递归要循环执行多次来筛选特征,指定一个基模型,这个模型可以是 lr 或者 decisionTree 都可以,需要有coef_或者feature_importances_来评估特征重要性。
    (2)用所有特征训练一次模型,每一轮训练过程中消除掉一些权重较小的特征。
    (3)重复以上步骤,直到训练结束。

sk-learn中

特征选择的根本,其实是不断尝试,因为没有规律可循,所以将这个过程管道化,自动化处理,才能够高效完成模型的优化。

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值