logo

特征工程相关问题

wangzf / 2026-01-27


目录

1.特征工程与表示学习

2.数据归一化和标准化

在进行数据分析的时候,什么情况下需要对数据进行标准化处理?

主要看 模型是否具有伸缩不变性

归一化和均值方差标准化(z-score)

Z分数(z-score),也叫标准分数(standard score)是一个数与平均数的差再除以标准差的过程。 在统计学中,标准分数是一个观测或数据点的值高于被观测值或测量值的平均值的标准偏差的符号数。(无量纲)

对 outlier 不同的处理能力:

处理 outlier 的基本前提:我们不应该因为 outlier 而过多改变对变量的缩放。

3.数据划分

完整的建模流程通常是:

几种数据划分方法的细节:

4. 预处理(以归一化为例)和划分 train/test 的顺序

对训练集的特征做归一化后,测试集的特征怎么办?这是一个非常关键的问题, 因为训练集特征归一化后,测试集的特征范围可能就不同了,因此模型失效。 一般有几种思路:

其实不难看出,从某种意义上说,三种做法是等价的。在数据量大且充分打乱的前提下, 训练集和验证集有相同的分布假设,因此用任意一种其实差别不大。然而这样的假设过于乐观, 且我们在真实情况下应该只有:训练集 + 一个测试数据,因此方法 2 是明显不行的。

于是似乎方法 1 和方法 3 都可以。但其实不然,方法 1 常常被认为是错误的操作, 原因是在训练阶段引入了测试数据,这属于未知数据。即使仅仅引入了 1 个测试数据, 如果取值非常极端,依然会导致输出范围有较大的波动。 其次,如果对于每一个测试数据都需要用整个训练集来归一的话,那么运算开销会非常大。

那么似乎备选的只有方案 3,即保留验证集上的归一化参数,并运用于测试集。这样的做法看似可以,但有不少风险:

知乎:警惕特征工程中的陷阱

参考上述文章所言,特征工程(以归一化为例)和数据划分的顺序共有三种方案:

  1. 整体归一化后,再划分
  2. 划分后,train 和 test 各自单独归一化
  3. 划分后,以 train 的规则对 test 进行归一化

理想情况,数据量大且充分打乱时,划分后各部分的分布相同,三种方法区别不大。

对于一般流程而言:

但也有说法表示,方案 1 虽然在进行特征工程的时候引入了测试集的信息,但是在整体来看, 我们本来就是为了能够更贴合真实数据分布,故而这种引入信息的行为是可以接受的。

倾向于认为方案 1 不是绝对的错误,方案 1 的 test error 未必总是和真实泛化误差离得更远。 不过即使刨除这一项,其他原因也足够让我在接下来的操作中:先划分 train/test,再作归一化。

补充:不拘泥于归一化这种简单的操作,从广义的特征工程的角度,依靠全部数据集的特征工程, 方案 1 会造成 test 的 leakage 就比较好理解,在数据挖掘竞赛中,名次对此会比较敏感。 而业界实际部署中,这些并不严格,使用方案3更多是来自实用性的原因。

5.不平衡条件下的 test 是否需要 resampling?

不需要,test 是试图对真实分布的模拟,test 上的误差是对真实泛化误差的近似。 train set 上 resampling 是为了防止模型训练不出来。

6. 特征工程与表示学习