异常值是指在数据集中显著偏离其他数据点的值,它们可能会对机器学习模型的性能产生负面影响,特别是在归一化过程中。如果直接对包含异常值的数据进行归一化处理,可能会导致大多数数据点被压缩到一个非常小的范围内,而异常值占据较大的比例,影响模型的学习效果。因此,处理异常值时需要特别注意,可以通过以下几种方法对包含异常值的数据进行归一化处理:
一、几种处理方法
1. 去除异常值后再归一化
删除异常值 是处理异常值最直接的方法。在这种方法中,我们首先通过统计分析、箱型图(box plot)等方法识别异常值,然后将这些异常值移除,再对剩余的数据进行归一化。
优点:
- 这种方法简单直接。
缺点:
- 在某些场景中,异常值可能携带重要信息,直接删除会丢失部分有价值的数据。
适用场景:
- 当异常值明显且数量较少时,删除异常值是一种有效的手段。
步骤:
- 使用箱型图、Z-score 或 IQR(四分位距)方法识别异常值。
- 删除这些异常值。
- 对剩余数据进行归一化处理。
例子:
假设我们有如下数据:
- [ 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=xmax−xminx−xmin
对这些值进行归一化后,结果为:
-
[ 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)x−median(X)
其中:
-
median
(
X
)
\text{median}(X)
median(X) 是数据的中位数,中位数是位于数据中间的值:
- 如果数据的个数是奇数,直接取中间那个值;
- 如果数据的个数是偶数,则取中间两个数的平均值。
-
I
Q
R
(
X
)
=
Q
3
−
Q
1
IQR(X) = Q3 - Q1
IQR(X)=Q3−Q1 是四分位距,即数据的 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]
-
中位数(Median):
数据集有 6 个元素,为偶数个数,因此中位数为第 3 和第 4 个数的平均值:
中位数 = 20 + 25 2 = 22.5 \text{中位数} = \frac{20 + 25}{2} = 22.5 中位数=220+25=22.5 -
第 1 四分位数(Q1):
Q1 是前半部分数据的中位数,前半部分为 ([10, 15, 20]),其中 Q1 为:
Q 1 = 15 Q1 = 15 Q1=15 -
第 3 四分位数(Q3):
Q3 是后半部分数据的中位数,后半部分为 ([25, 30, 1000]),其中 Q3 为:
Q 3 = 30 Q3 = 30 Q3=30 -
四分位距(IQR):
IQR 是第 3 四分位数和第 1 四分位数的差值:
I Q R = Q 3 − Q 1 = 30 − 15 = 15 IQR = Q3 - Q1 = 30 - 15 = 15 IQR=Q3−Q1=30−15=15 -
结果:
使用鲁棒归一化公式,归一化后的数据为:
[ − 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] [0−10],[10−20],[20−30],[30−50],[50−∞]
-
10 映射到区间 [ 10 − 20 ] [10-20] [10−20],1000 映射到 [ 50 − ∞ ] [50-\infty] [50−∞],从而减少了异常值对模型的影响。
二、如何选择合适的处理方法?
1. 异常值的数量和重要性:
- 如果异常值很少且显著,直接删除它们可能是一个有效的选择。
- 如果异常值较多但有重要意义,可以考虑使用鲁棒归一化或温索化。
2. 数据的分布:
- 对数归一化适用于呈指数增长的特征。
- 对于具有对称分布的数据,标准化或鲁棒归一化更合适。
3. 模型的要求:
- 基于距离的模型(如 k 近邻、SVM)对异常值敏感,因此需要更稳健的归一化方法,如鲁棒归一化。
- 基于决策树的模型对异常值相对不敏感,因此可能不需要特别的异常值处理。
4. 是否保留原始数据特征:
- 如果数据的原始分布对业务意义较大(如金融数据中的大额交易、社会调查中的极端答案),建议使用温索化或分箱处理来保留部分原始信息。
三、总结
对于包含异常值的数据,简单的归一化方法(如 Min-Max 归一化)可能会因为极端值而失效,因此我们需要通过特定的异常值处理方法,如鲁棒归一化、对数归一化、截断、温索化等,来减少异常值对模型的负面影响。选择合适的处理方法可以使模型在应对数据中的噪声、极端值时更加稳健,从而提升模型的泛化能力和预测准确性。