【AI知识点】如何对包含异常值的数据进行归一化处理?

异常值是指在数据集中显著偏离其他数据点的值,它们可能会对机器学习模型的性能产生负面影响,特别是在归一化过程中。如果直接对包含异常值的数据进行归一化处理,可能会导致大多数数据点被压缩到一个非常小的范围内,而异常值占据较大的比例,影响模型的学习效果。因此,处理异常值时需要特别注意,可以通过以下几种方法对包含异常值的数据进行归一化处理:


一、几种处理方法

1. 去除异常值后再归一化

删除异常值 是处理异常值最直接的方法。在这种方法中,我们首先通过统计分析、箱型图(box plot)等方法识别异常值,然后将这些异常值移除,再对剩余的数据进行归一化。

优点:

  • 这种方法简单直接。

缺点:

  • 在某些场景中,异常值可能携带重要信息,直接删除会丢失部分有价值的数据。

适用场景

  • 当异常值明显且数量较少时,删除异常值是一种有效的手段。

步骤:

  1. 使用箱型图、Z-score 或 IQR(四分位距)方法识别异常值。
  2. 删除这些异常值。
  3. 对剩余数据进行归一化处理。

例子

假设我们有如下数据:

  • [ 10 , 15 , 20 , 25 , 30 , 1000 ] [10, 15, 20, 25, 30, 1000] [10,15,20,25,30,1000]

其中 1000 1000 1000 是明显的异常值,我们可以删除它后再进行 Min-Max 归一化处理:

  • 删除异常值后数据变为 [ 10 , 15 , 20 , 25 , 30 ] [10, 15, 20, 25, 30] [10,15,20,25,30]

  • 使用 Min-Max 归一化:

    x norm = x − x min ⁡ x max ⁡ − x min ⁡ x_{\text{norm}} = \frac{x - x_{\min}}{x_{\max} - x_{\min}} xnorm=xmaxxminxxmin

    对这些值进行归一化后,结果为:

  • [ 0 , 0.25 , 0.5 , 0.75 , 1 ] [0, 0.25, 0.5, 0.75, 1] [0,0.25,0.5,0.75,1]


2. 截断异常值(Clipping)

截断(Clipping) 是一种柔和的处理异常值的方式,而不是直接删除异常值。我们可以将超过某个阈值的异常值设置为该阈值,从而减少其对模型的影响。

优点:

  • 保留了所有的数据,且减轻了异常值对归一化结果的影响。

缺点:

  • 如果异常值具有重要的含义,这种方法会导致部分信息丢失。

适用场景

  • 适用于需要将数据强制限制在特定范围内的场合,特别是在处理物理数据或模型输入数据时,比如图像处理、信号处理等。

例子

假设我们使用 [ 10 , 30 ] [10, 30] [10,30] 作为阈值,任何超过 30 30 30 的值被限制在这个阈值上,任何低于 10 10 10 的值也会被限制在下限。

  • 数据: [ 10 , 15 , 20 , 25 , 30 , 1000 ] [10, 15, 20, 25, 30, 1000] [10,15,20,25,30,1000]
  • 将大于 30 的值截断为 30,得到: [ 10 , 15 , 20 , 25 , 30 , 30 ] [10, 15, 20, 25, 30, 30] [10,15,20,25,30,30]
  • 然后对这些数据进行 Min-Max 归一化处理,结果为:
    • [ 0 , 0.25 , 0.5 , 0.75 , 1 , 1 ] [0, 0.25, 0.5, 0.75, 1, 1] [0,0.25,0.5,0.75,1,1]

3. 使用鲁棒归一化(Robust Scaler)

鲁棒归一化 是一种专门设计来处理异常值的方法。它不依赖于数据的最大值和最小值,而是使用数据的中位数和四分位数范围(IQR, Interquartile Range)来进行归一化。这使得它对异常值不敏感,能够更好地处理具有异常值的数据。

公式:

x norm = x − median ( X ) I Q R ( X ) x_{\text{norm}} = \frac{x - \text{median}(X)}{IQR(X)} xnorm=IQR(X)xmedian(X)

其中:

  • median ( X ) \text{median}(X) median(X) 是数据的中位数,中位数是位于数据中间的值:
    • 如果数据的个数是奇数,直接取中间那个值;
    • 如果数据的个数是偶数,则取中间两个数的平均值。
  • I Q R ( X ) = Q 3 − Q 1 IQR(X) = Q3 - Q1 IQR(X)=Q3Q1 是四分位距,即数据的 75% 分位数( Q 3 Q3 Q3)减去 25% 分位数( Q 1 Q1 Q1)。
    • 第 1 四分位数( Q 1 Q1 Q1) :取排序后数据的前 50% 的中位数。
    • 第 3 四分位数( Q 3 Q3 Q3) :取排序后数据的后 50% 的中位数。

优点:

  • 不依赖于数据的极端值,非常适合处理包含异常值的数据。

缺点:

  • 数据的分布信息可能会丢失,尤其在极端情况下。

适用场景

  • 数据中存在较多异常值时,鲁棒归一化是一个理想的选择。

例子

假设我们有如下数据:

  • [ 10 , 15 , 20 , 25 , 30 , 1000 ] [10, 15, 20, 25, 30, 1000] [10,15,20,25,30,1000]
  1. 中位数(Median)
    数据集有 6 个元素,为偶数个数,因此中位数为第 3 和第 4 个数的平均值:
    中位数 = 20 + 25 2 = 22.5 \text{中位数} = \frac{20 + 25}{2} = 22.5 中位数=220+25=22.5

  2. 第 1 四分位数(Q1)
    Q1 是前半部分数据的中位数,前半部分为 ([10, 15, 20]),其中 Q1 为:
    Q 1 = 15 Q1 = 15 Q1=15

  3. 第 3 四分位数(Q3)
    Q3 是后半部分数据的中位数,后半部分为 ([25, 30, 1000]),其中 Q3 为:
    Q 3 = 30 Q3 = 30 Q3=30

  4. 四分位距(IQR)
    IQR 是第 3 四分位数和第 1 四分位数的差值:
    I Q R = Q 3 − Q 1 = 30 − 15 = 15 IQR = Q3 - Q1 = 30 - 15 = 15 IQR=Q3Q1=3015=15

  5. 结果
    使用鲁棒归一化公式,归一化后的数据为:
    [ − 0.83 , − 0.50 , − 0.17 , 0.17 , 0.50 , 65.17 ] [-0.83, -0.50, -0.17, 0.17, 0.50, 65.17] [0.83,0.50,0.17,0.17,0.50,65.17]

可以看出,除了 1000 1000 1000 这个异常值之外,其他数据点被归一化到一个较为集中的范围,而异常值仍然被较大程度地放大。


4. 对异常值做对数归一化(Log Normalization)

在处理异常值时,对数归一化 也是一个常用的方法。它通过对数据取对数,能够有效缩小大值的影响,使得异常值的影响被压缩。

公式

x norm = log ⁡ ( x + 1 ) x_{\text{norm}} = \log(x + 1) xnorm=log(x+1)

优点:

  • 对数归一化对数据中的大值(包括异常值)有压缩效果,使其对模型的影响减小。

缺点:

  • 不适合处理负值或 0 值,需要对数据进行平移。

适用场景

  • 当数据中有极大值且分布不均匀时,特别是具有指数增长的数据。

例子

数据: [ 10 , 15 , 20 , 25 , 30 , 1000 ] [10, 15, 20, 25, 30, 1000] [10,15,20,25,30,1000]

对数据进行 Log 归一化:

  • x norm = log ⁡ ( x + 1 ) x_{\text{norm}} = \log(x + 1) xnorm=log(x+1)
  • 对数据进行归一化后,结果为:
    • [ 2.30 , 2.71 , 3.00 , 3.22 , 3.40 , 6.91 ] [2.30, 2.71, 3.00, 3.22, 3.40, 6.91] [2.30,2.71,3.00,3.22,3.40,6.91]

可以看到,异常值 1000 1000 1000 的影响大大减少。


5. 温索化(Winsorization)

温索化是另一种处理异常值的方法,它通过将异常值“压缩”到数据的一个合理范围内,从而减少它们对模型的影响。温索化通常将超过某个百分位数(如 5% 或 95%)的值调整为该百分位数的值。

优点:

  • 减少了极端异常值的影响,而保留了数据中的信息。

缺点:

  • 如果异常值有实际意义,温索化会导致数据偏差。

适用场景

  • 适用于在保留数据统计信息完整性的前提下减少极端值影响的场景,适用于异常值较少且这些值不具备重要意义的场合。

例子

假设我们对数据 [ 10 , 15 , 20 , 25 , 30 , 1000 ] [10, 15, 20, 25, 30, 1000] [10,15,20,25,30,1000] 应用温索化,设定 5% 和 95% 为上下限:

  • 超过 95% 分位数的异常值(1000)被压缩到 30,结果变为 [ 10 , 15 , 20 , 25 , 30 , 30 ] [10, 15, 20, 25, 30, 30] [10,15,20,25,30,30]
  • 然后对温索化后的数据进行归一化,结果类似于之前的 Min-Max 归一化。

温索化(Winsorization)与截断(Clipping)的区别

  • 两者的关键区别在于 温索化(Winsorization) 是基于数据分布的(如百分位),而 截断(Clipping) 是基于指定的上下限(阈值)直接进行限制。
特性 温索化(Winsorization) 截断(Clipping)
目标 降低极端值对统计量(如均值、方差)的影响 强制将数据限制在指定的最大/最小值之间
处理方式 将超出特定百分位数的值替换为该百分位数值 超出预定范围的值直接设为上下限
应用场景 减少极端异常值对数据统计分析的影响 控制数据在物理上或逻辑上的合理范围内
依据 基于数据的分布特征(如百分位数) 基于指定的数值范围(可能是人为设定的)

6. 分箱处理(Binning)

分箱处理 将数据分为多个范围或区间,然后将数据映射到这些区间中。这样可以有效减少异常值的影响,因为异常值会被划分到特定的区间,而不是直接影响模型的参数。

优点:

  • 可以有效消除异常值对数据分布的影响,常用于离散化处理。

缺点:

  • 如果区间划分不合理,可能会丢失数据的精确信息。

适用场景

  • 适用于需要将连续数据离散化的场景。

例子

假设我们将数据 [ 10 , 15 , 20 , 25 , 30 , 1000 ] [10, 15, 20, 25, 30, 1000] [10,15,20,25,30,1000] 分成 5 个区间:

  • [ 0 − 10 ] , [ 10 − 20 ] , [ 20 − 30 ] , [ 30 − 50 ] , [ 50 − ∞ ] [0-10], [10-20], [20-30], [30-50], [50-\infty] [010],[1020],[2030],[3050],[50]

  • 10 映射到区间 [ 10 − 20 ] [10-20] [1020],1000 映射到 [ 50 − ∞ ] [50-\infty] [50],从而减少了异常值对模型的影响。


二、如何选择合适的处理方法?

1. 异常值的数量和重要性

  • 如果异常值很少且显著,直接删除它们可能是一个有效的选择。
  • 如果异常值较多但有重要意义,可以考虑使用鲁棒归一化或温索化。

2. 数据的分布

  • 对数归一化适用于呈指数增长的特征。
  • 对于具有对称分布的数据,标准化或鲁棒归一化更合适。

3. 模型的要求

  • 基于距离的模型(如 k 近邻、SVM)对异常值敏感,因此需要更稳健的归一化方法,如鲁棒归一化。
  • 基于决策树的模型对异常值相对不敏感,因此可能不需要特别的异常值处理。

4. 是否保留原始数据特征

  • 如果数据的原始分布对业务意义较大(如金融数据中的大额交易、社会调查中的极端答案),建议使用温索化或分箱处理来保留部分原始信息。

三、总结

对于包含异常值的数据,简单的归一化方法(如 Min-Max 归一化)可能会因为极端值而失效,因此我们需要通过特定的异常值处理方法,如鲁棒归一化对数归一化截断温索化等,来减少异常值对模型的负面影响。选择合适的处理方法可以使模型在应对数据中的噪声、极端值时更加稳健,从而提升模型的泛化能力和预测准确性。

上一篇:Vue基础(二)-收集表单数据


下一篇:和饺子店老板的闲聊,尽显人间清醒智慧