数据标准化与规范化与稳健缩放器

Mik*_*ike 3 python machine-learning normalization standardized scikit-learn

我正在进行数据预处理,并希望实际比较数据标准化与规范化与鲁棒缩放器的优势.

从理论上讲,准则是:

好处:

  1. 标准化:缩放功能,使分布以0为中心,标准差为1.
  2. 标准化:缩小范围,使范围现在介于0和1之间(如果存在负值,则为-1到1).
  3. 鲁棒缩放器:类似于归一化,但它使用四分位数范围,因此它对异常值很强.

缺点:

  1. 标准化:如果数据不是正态分布则不好(即没有高斯分布).
  2. 规范化:受异常值(即极值)的影响很大.
  3. 强大的缩放器:不考虑中值,只关注批量数据的部分.

我创建了20个随机数字输入并尝试了上述方法(红色数字表示异常值):

方法比较


我注意到 - 实际上 - 归一化受到异常值的负面影响,新值之间的变化范围变得很小(所有值几乎相同,小数点后的-6位数0.000000x) - 即使原始输入之间存在明显的差异!


我的问题是:

  1. 我是否正确地说,标准化也会受到极端值的负面影响?如果没有,为什么根据提供的结果?
  2. 我真的看不出Robust Scaler如何改进数据,因为我在结果数据集中仍然有极值?任何简单的完整解释?

PS

我想象一个场景,我想为神经网络准备我的数据集,我担心消失的梯度问题.不过,我的问题仍然存在.

des*_*aut 9

我是否正确地说,标准化也会受到极端值的负面影响?

的确,你是; scikit-learn 文档本身明确警告这样的情况:

但是,当数据包含异常值时,StandardScaler往往会误导.在这种情况下,最好使用对异常值具有鲁棒性的定标器.

或多或少,同样适用于此MinMaxScaler.

我真的看不出Robust Scaler如何改进数据,因为我在结果数据集中仍然有极值?任何简单完整的解释?

强健并不意味着免疫无懈可击,缩放的目的不是 "消除"异常值和极端值 - 这是一个单独的任务,有自己的方法; 这在相关的scikit-learn文档中再次明确提到:

RobustScaler

[...]请注意,异常值本身仍然存在于转换后的数据中.如果需要单独的异常值限幅,则需要进行非线性变换(见下文).

其中"见下文"指的是QuantileTransformerquantile_transform.


小智 7

它们都不是稳健的,因为缩放会处理异常值并将它们放在一个受限的范围内,即不会出现极端值。

您可以考虑以下选项:

  • 在缩放之前裁剪(例如,在 5 个百分点和 95 个百分点之间)系列/数组
  • 如果裁剪不理想,则采用平方根或对数等变换
  • 显然,添加另一列“被裁剪”/“对数裁剪量”将减少信息丢失。

  • @Pedro Martinez 在某些情况下,使用哪些转换是非常明显的。对于右偏分布,对数、根或倒数变换可能会有所帮助。同样,对于左偏斜,平方、立方或更高的幂可能会有所帮助。使用 box-cox 变换会更容易,因为它会自行找出最佳功率变换。Box-cox 用于正值,而 Yeo-Johnson 变换可用于正值和负值。希望这可以帮助! (2认同)