是什么
特征工程(feature engineering)是监督式机器学习和统计建模中的一个预处理步骤,任务是把原始数据转换成模型用起来更有效的输入。每个输入都由若干被称为特征(feature)的属性组成,提供信息量更足的特征,能明显提高预测准确率和据此作出的决策质量。[1]
这个定义刻意留得很宽。特征工程不是某一个算法,而是一组在训练之前完成的操作;同一份数据,交给不同的模型,可能要作很不一样的加工。
怎么做
典型操作包括:挑选特征、构造新特征、变换已有特征、从原始材料中抽取特征,以及填补缺失值或非法值,并用主成分分析(PCA)、独立成分分析(ICA)或线性判别分析(LDA)等方法降维。[1] 特征筛选可以借助重要性得分和相关性矩阵来推动,后者显示每个候选输入与目标之间的相关强度,以及候选输入彼此之间的相关强度。[1]
一个小例子可以把这件事说清楚。假设一张表把每次事件发生的时间记录成一个时间戳。模型没法直接对时间戳做算术,但同一列可以改写成星期几、一天中的第几个小时,或者距上一次事件过去了多久——这就是从一个已有特征里造出新特征。填补空白、删掉近乎重复的列,则是几乎每条流水线都会出现的另外两个动作。
候选特征越多,模型抓住噪声的风险也越大。正则化(regularisation)、核方法(kernel methods)和特征筛选,是控制特征数量膨胀的常用手段。[1]
从哪来
把这一过程自动化的尝试,比很多人以为的要早。关于自动化特征工程的研究可以追溯到 20 世纪 90 年代,Knobbe、Siebes 和 Van Der Wallen 在 1999 年提出的多关系决策树归纳(multi-relational decision tree induction),就是一种早期的自动化做法。[1] 带自动化特征工程功能的商业软件则从 2016 年起出现。[1]
今天用在哪里
通用机器学习库大多自带预处理工具。scikit-learn 把自己的预处理包描述为提供工具函数和转换器类(transformer class),用来把原始特征向量变成更适合下游估计器的表示。[2] 同一份文档还指出,许多学习算法(线性模型就是其中之一)能从数据集标准化中获益,而当数据中存在离群点时,稳健缩放器(robust scaler)或其他转换器可能更合适。[2]
深度学习在一定程度上改变了这个格局:这类模型可以直接处理大体量的原始数据,从而减少对手工构造特征的依赖,但细致的预处理和清洗仍然不可缺少。[1]
局限
特征工程费时且容易出错。它需要领域专业知识,通常还要反复试错,因为很少有办法事先知道哪一种变换,会在某一个数据集上帮到某一个模型。[1]
注释与来源
- Feature engineeringhttps://en.wikipedia.org/wiki/Feature_engineering
- 8.3. Preprocessing datahttps://scikit-learn.org/stable/modules/preprocessing.html
引用本页: 特征工程. TellWorld, https://www.tellworld.net/zh/learn/feature-engineering. 更新于 2026-11-07