在前一篇文章中,我以岭回归和 LASSO 为例介绍了线性回归的正则化处理。这两种方法都属于收缩方法(shrinkage method),它们能够使线性回归的系数连续变化。但和岭回归不同的是,LASSO 可以将一部分属性的系数收缩为 0,事实上起到了筛选属性的作用。

和 LASSO 这种间接去除属性的收缩方法相对应的是维度规约。维度规约这个听起来个高大上的名称是数据挖掘中常用的术语,它有一个更接地气的同义词,就是降维(dimensionality reduction),也就是直接降低输入属性的数目来削减数据的维度。

对数据维度的探讨来源于“维数灾难”(curse of dimensionality),这个概念是数学家理查德·贝尔曼(Richard Bellman)在动态优化问题的研究中提出的。

发表于《IEEE 模式分析与机器智能汇刊》(IEEE Transactions on Pattern Analysis and Machine Intelligence)第 1 卷第 3 期的论文《维数问题:一个简单实例(A Problem of Dimensionality: A Simple Example)》在数学上证明了当所有参数都已知时,属性维数的增加可以让分类问题的错误率渐进为 0;可当未知的参数只能根据数量有限的样本来估计时,属性维数的增加会使错误率先降低再升高,最终收敛到 0.5。

这就像一群谋士七嘴八舌在支招,当领导的要是对每个人的意见都深入考虑再来拍板的话,这样的决策也没什么准确性可言了。

维数灾难深层次的原因在于数据样本的有限。当属性的维数增加时,每个属性每个可能取值的组合就会以指数形式增长。对于二值属性来说,2 个属性所有可能的取值组合共有 4 种,可每增加一个属性,可能的组合数目就会翻番。

一般的经验法则是每个属性维度需要对应至少 5 个数据样本,可当属性维数增加而样本数目不变时,过少的数据就不足以体现出属性背后的趋势,从而导致过拟合的发生。当然,这只是维数灾难的一种解释方式,另一种解释方式来源于几何角度的数据稀疏性,这里暂且按下不表。

在数据有限的前提下解决维数灾难问题,化繁为简的降维是必经之路。降维的对象通常是那些“食之无味,弃之可惜”的鸡肋属性。食之无味是因为它们或者和结果的相关性不强,或者和其他属性之间有较强的关联,使用这样的属性没有多大必要;弃之可惜则是因为它们终究还包含一些独有的信息,就这么断舍离又会心有不甘。

如果像亚历山大剑斩戈尔迪之结一般直接砍掉鸡肋属性,这种“简单粗暴”的做法就是特征选择(feature selection)。另一种更加稳妥的办法是破旧立新,将所有原始属性的信息一点儿不浪费地整合到脱胎换骨的新属性中,这就是特征提取(feature extraction)的方法。

无论是特征选择还是特征提取,在“人工智能基础课”中都有相应的介绍。

今天我要换个角度,先从刚刚介绍过的岭回归说起。假设数据集中有 NN