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

时间:2018-08-14 12:31:46

标签: machine-learning normalization supervised-learning robust standardized

我正在研究数据预处理,并且想比较数据标准化vs标准化vs稳健缩放器的好处。

理论上,准则是:

优势:

  1. 标准化:缩放要素,以使分布以0为中心,标准偏差为1。
  2. 归一化:缩小范围,以使该范围现在在0到1之间(如果为负值,则在-1到1之间)。
  3. Robust Scaler :类似于归一化,但它使用四分位间距,因此对异常值具有鲁棒性。

缺点:

  1. 标准化:如果数据不是正态分布(即没有高斯分布),则不好。
  2. 归一化:受到异常值(即极端值)的严重影响。
  3. Robust Scaler :不考虑中位数,仅关注散装数据所在的部分。

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

Methods Comparison


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


我的问题是:

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

PS

我正在想象一种情况,我想为神经网络准备数据集,并且我担心消失梯度问题。不过,我的问题仍然笼统。

2 个答案:

答案 0 :(得分:7)

  

我是说对吗?标准化也会受到极端值的负面影响吗?

的确是你; scikit-learn docs本身显然会警告这种情况:

  

但是,当数据包含异常值时,StandardScaler通常会被误导。在这种情况下,最好使用对异常值具有鲁棒性的缩放器。

或多或少,MinMaxScaler也是如此。

  

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

健壮并不意味着免疫无敌 ,并且扩展的目的不是 以“删除” “异常值和极端值-这是具有其自身方法的单独任务; relevant scikit-learn docs再次明确提到了这一点:

  

RobustScaler

     

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

其中“见下文”指的是QuantileTransformerquantile_transform

答案 1 :(得分:0)

在缩放将照顾异常值并将其置于受限范围内的意义上,它们都不是很健壮的。

您可以考虑以下选项:

  • 缩放之前将系列/数组裁剪(例如,介于5个百分点和95个百分点之间)
  • 如果裁剪不理想,则进行平方根或对数等转换
  • 很明显,添加另一列“已裁剪” /“对数裁剪的数量”将减少信息丢失。