欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 八卦 > 【漫话机器学习系列】198.异常值(Outlier)

【漫话机器学习系列】198.异常值(Outlier)

2025/4/19 14:04:42 来源:https://blog.csdn.net/IT_ORACLE/article/details/147108308  浏览:    关键词:【漫话机器学习系列】198.异常值(Outlier)

异常值(Outlier)全面指南 —— 检测、分析与处理

作者:Chris Albon(图源) 场景:数据清洗与特征工程必备技能


一、什么是异常值(Outlier)

定义

异常值(Outlier)是指那些在数据集中远离其他观测值的点,通常与数据的整体趋势明显不同,可能源于错误、噪声、特殊事件或极端情况。


二、异常值的影响与处理原则

处理原则说明优缺点
Drop(删除)删除异常值简单粗暴,易丢失重要信息
Mark(标记)给异常值打标识保留信息,利于后续分析
Rescale(调整)对异常值做缩放或替代数据完整性好,降低干扰

三、异常值检测方法(含公式)

1. 基于统计特征的检测

1.1 标准差法(Z-Score)

公式:

  • μ:均值

  • σ:标准差

  • 判断条件:|Z| > 3 视为异常值

1.2 四分位距法(IQR)

公式:

判断条件:

X < Q1 − 1.5 × IQR 或 X > Q3 + 1.5 × IQR


2. 基于模型的检测

方法说明适用场景
Isolation Forest随机切分大数据集
One-Class SVM边界学习非线性数据
DBSCAN密度聚类空间型数据
LOF局部离群因子局部异常

四、异常值处理三种方式(Drop / Mark / Rescale)

1. Drop(删除)

示意图:

原始数据:[1, 2, 3, 1000, 4, 5]
删除异常值:[1, 2, 3, 4, 5]

 

代码示例(IQR法):

import pandas as pddf = pd.DataFrame({'value': [1, 2, 3, 1000, 4, 5]})Q1 = df['value'].quantile(0.25)
Q3 = df['value'].quantile(0.75)
IQR = Q3 - Q1df_clean = df[~((df['value'] < (Q1 - 1.5 * IQR)) | (df['value'] > (Q3 + 1.5 * IQR)))]
print(df_clean)

 

运行结果

   value
0      1
1      2
2      3
4      4
5      5

2. Mark(打标)

示意图:

原始数据:[1, 2, 3, 1000, 4, 5]
标记数据:[1, 2, 3, 1000(异常), 4, 5]

 

代码示例(Z-Score法):

from scipy import stats
import numpy as np
import pandas as pddf = pd.DataFrame({'value': [1, 2, 3, 1000, 4, 5]})df['outlier'] = np.where(np.abs(stats.zscore(df['value'])) > 3, 1, 0)
print(df)

 运行结果

   value  outlier
0      1        0
1      2        0
2      3        0
3   1000        0
4      4        0
5      5        0

 


3. Rescale(调整)

常见处理方式:

  • Winsorizing(极值化)

  • Log / sqrt 变换

  • Cap(上下限)

代码示例(上下限限制):

import pandas as pddf = pd.DataFrame({'value': [1, 2, 3, 1000, 4, 5]})Q1 = df['value'].quantile(0.25)
Q3 = df['value'].quantile(0.75)IQR = Q3 - Q1upper_limit = Q3 + 1.5 * IQR
lower_limit = Q1 - 1.5 * IQRdf['value'] = df['value'].clip(lower=lower_limit, upper=upper_limit)
print(df)

运行结果

   value
0    1.0
1    2.0
2    3.0
3    8.5
4    4.0
5    5.0

 


五、不同策略的适用场景对比

策略适合情况优缺点
Drop异常点确实是错误值丢失数据
Mark不确定是否干扰模型数据保留
Rescale保留所有数据需要谨慎使用

六、完整案例演示(含可视化)

绘制数据分布

import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pddf = pd.DataFrame({'value': [1, 2, 3, 1000, 4, 5]})sns.boxplot(x=df['value'])
plt.show()

运行结果

 

 


使用Isolation Forest检测异常值

from sklearn.ensemble import IsolationForest
import pandas as pddf = pd.DataFrame({'value': [1, 2, 3, 1000, 4, 5]})
iso = IsolationForest(contamination=0.1)
df['outlier'] = iso.fit_predict(df[['value']])
print(df)

运行结果

   value  outlier
0      1        1
1      2        1
2      3        1
3   1000       -1
4      4        1
5      5        1

 


七、总结

核心观点说明
异常值检测重要的特征工程步骤
三大处理策略Drop / Mark / Rescale 各有适用
推荐顺序先检测 → 再判断 → 再处理

八、参考图示(构思)

异常值处理策略关系图

                 检测|-----------------|        |        |Drop     Mark     Rescale|        |        |丢弃数据   标记分析  调整保留

 

 

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词