news 2026/10/21 21:03:45

异常检测及修正 针对数据集进行模型检测,检测异常后对异常值采用算法进行修正。 修正完后生成修正...

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
异常检测及修正 针对数据集进行模型检测,检测异常后对异常值采用算法进行修正。 修正完后生成修正...

异常检测及修正 针对数据集进行模型检测,检测异常后对异常值采用算法进行修正。 修正完后生成修正前后的对比效果图

最近在搞数据清洗的时候发现个有意思的事儿——异常值这东西就像炒菜时的盐,少了没味,多了毁所有。今天咱们直接上代码实战,看看怎么用Python揪出那些捣乱的异常点,再给它整容成正常数据。

先来点刺激的,咱们自己造一组带坑的数据:

import numpy as np import matplotlib.pyplot as plt x = np.linspace(0, 4*np.pi, 200) y = np.sin(x) # 随机插入20个异常值 np.random.seed(42) outliers = np.random.choice(200, 20, replace=False) y[outliers] += np.random.uniform(-3, 3, 20) # 异常幅度±3 plt.figure(figsize=(12,4)) plt.plot(x, y, label='原始数据') plt.scatter(x[outliers], y[outliers], c='red', label='真实异常') plt.legend()

![原始数据带异常点示意图]

抓异常这事,咱们用IQR(四分位距)方法更靠谱。比起简单粗暴的3σ原则,IQR对极端值更敏感:

def detect_outliers_iqr(data): q1 = np.percentile(data, 25) q3 = np.percentile(data, 75) iqr = q3 - q1 lower_bound = q1 - 1.5*iqr upper_bound = q3 + 1.5*iqr return (data < lower_bound) | (data > upper_bound) outlier_mask = detect_outliers_iqr(y) detected_outliers = np.where(outlier_mask)[0]

这里有个坑要注意——IQR对周期性数据可能误伤,但咱们的正弦波幅度稳定,刚好适用。检测出的异常点用散点标出来更直观:

plt.figure(figsize=(12,4)) plt.plot(x, y, alpha=0.5) plt.scatter(x[detected_outliers], y[detected_outliers], c='orange', edgecolor='k', s=80, label='检测到的异常') plt.title(f"检测到{len(detected_outliers)}个异常点")

![异常点检测效果示意图]

重头戏来了——异常修正。咱们不用简单的均值替换,改用滑动窗口中位数,这样能保留数据波动特征:

from scipy.ndimage import median_filter def smooth_outliers(data, window_size=5): cleaned = data.copy() median_vals = median_filter(data, size=window_size) cleaned[outlier_mask] = median_vals[outlier_mask] return cleaned y_cleaned = smooth_outliers(y)

这个median_filter是个好东西,它用滑动窗口计算中位数。窗口大小选5,刚好能覆盖正弦波的半个周期。对比下修正效果:

plt.figure(figsize=(12,6)) plt.subplot(2,1,1) plt.plot(x, y, label='修正前') plt.scatter(x[detected_outliers], y[detected_outliers], c='red') plt.subplot(2,1,2) plt.plot(x, y_cleaned, c='green', label='修正后') plt.scatter(x[detected_outliers], y_cleaned[detected_outliers], c='lime', edgecolor='k') plt.tight_layout()

![修正前后对比图]

看对比图发现几个有意思的点:

  1. 峰值处的异常被拉回正常波形
  2. 连续异常点会被窗口内的正常值中和
  3. 正常数据段几乎不受影响

不过这个方法在数据突变区域可能矫枉过正,这时候需要调整窗口大小或者换用更复杂的插值方法。实际项目中建议先用这段代码快速验证,再针对业务场景微调算法参数。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/21 5:45:55

【高并发系统稳定性保障】:纤维协程异常拦截与日志追踪全解析

第一章&#xff1a;纤维协程的异常捕获处理在现代高并发编程中&#xff0c;纤维&#xff08;Fiber&#xff09;作为一种轻量级的执行单元&#xff0c;广泛应用于异步任务调度。与传统线程不同&#xff0c;纤维由用户态调度器管理&#xff0c;具备极低的上下文切换开销。然而&am…

作者头像 李华
网站建设 2026/10/20 18:57:49

手把手教你玩转A2L生成工具

适用于INCA标定用的A2L文件生成工具(支持CCP标定和XCP标定的A2L文件)&#xff0c;如有需要可联系&#xff0c;同时提供CANape标定用的A2L生成工具&#xff0c;附两款工具的使用说明&#xff0c;在A2L文件制作过程中出现问题随时可联系我。 注意&#xff1a;目前只支持加载. elf…

作者头像 李华
网站建设 2026/10/20 19:01:59

四轮转向汽车联合仿真模型开发与滑模控制研究

四轮转向汽车Carsim-simulink联合仿真滑模控制模型&#xff08;.cpar文件 .slx文件&#xff09; 包含驾驶员模型&#xff0c;二自由度车辆模型&#xff0c;相关文献&#xff0c;技术文档&#xff0c;指导在智能驾驶技术蓬勃发展的今天&#xff0c;汽车的操控稳定性成为了研究热…

作者头像 李华
网站建设 2026/10/21 13:50:00

GraphQL字段别名的秘密武器:PHP环境下高效数据查询的终极方案

第一章&#xff1a;GraphQL字段别名的核心概念与PHP集成背景GraphQL 字段别名允许客户端在查询时为返回的字段指定自定义名称&#xff0c;从而避免响应字段冲突&#xff0c;并提升数据结构的可读性与灵活性。在复杂的查询场景中&#xff0c;同一字段可能需要多次调用但携带不同…

作者头像 李华
网站建设 2026/10/20 22:33:27

最近在折腾六层电梯控制系统,用MCGS7.7触摸屏和三菱FX3U PLC搞联机调试。这俩设备通过COM4口通讯,中间踩了不少坑,把关键配置和程序逻辑拎出来说说

6六层电梯MCGS7.7和三菱FX3U系列PLC联机运行程序3&#xff0c;带io表新&#xff0c;开门延时6秒&#xff0c;COM4口通讯 通讯口设置这块儿&#xff0c;三菱FX3U的编程口自带RS422转成了COM4的RS232。在GX Works2里直接配置通讯参数的时候&#xff0c;记得把D8120寄存器设成H00…

作者头像 李华