news 2026/8/4 21:54:07

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

作者头像

张小明

前端开发工程师

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/8/4 18:45:32

行为树优化全攻略(性能翻倍的4个秘密武器)

第一章&#xff1a;行为树的优化在复杂的游戏AI或自动化系统中&#xff0c;行为树&#xff08;Behavior Tree&#xff09;作为核心决策架构&#xff0c;其性能直接影响系统的响应速度与资源消耗。随着节点数量增加和逻辑复杂度上升&#xff0c;未优化的行为树可能导致帧率下降、…

作者头像 李华
网站建设 2026/8/4 17:16:24

直流电机双闭环调速系统仿真模型:转速外环与电流内环PI参数整定指南,无静差跟踪实现功能介绍

直流电机双闭环调速系统仿真模型 1.附带仿真模型参数计算配套文档 2.附带转速外环、电流内环PI参数整定配套文档 功能&#xff1a;双闭环采用转速外环、电流内环&#xff0c;其中PI参数在报告里面有详细的整定教程&#xff0c;可以实现无静差跟踪直流电机双闭环调速仿真这玩意儿…

作者头像 李华
网站建设 2026/8/3 20:12:19

模型压缩技术详解:剪枝、量化与知识蒸馏,让你的大模型轻量化部署

本文系统介绍了深度学习模型压缩的三大核心技术&#xff1a;剪枝通过移除冗余连接减少参数&#xff1b;量化降低数值精度实现存储压缩&#xff1b;知识蒸馏采用"教师-学生"模式让大模型指导小模型学习。文章还详细阐述了技术组合的最佳顺序&#xff1a;知识蒸馏→剪枝…

作者头像 李华
网站建设 2026/8/2 14:48:00

Iridescent:Day23

https://blog.csdn.net/weixin_45655710?typeblog 浙大疏锦行 DAY 23 pipeline 管道 知识回顾&#xff1a; 1.转化器和估计器的概念 2.管道工程 3. ColumnTransformer和 Pipeline类 作业&#xff1a; 整理下全部逻辑的先后顺序&#xff0c;看看能不能制作出适合所有机器学习的…

作者头像 李华
网站建设 2026/8/3 19:49:34

Laravel 13多模态权限实现技巧(99%的开发者忽略的关键细节)

第一章&#xff1a;Laravel 13多模态权限控制概述在现代Web应用开发中&#xff0c;权限管理已不再局限于简单的角色访问控制。Laravel 13引入了多模态权限控制机制&#xff0c;支持基于角色、策略、门面&#xff08;Gate&#xff09;和自定义守卫的复合权限体系&#xff0c;适用…

作者头像 李华