news 2026/6/10 18:12:27

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

作者头像

张小明

前端开发工程师

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/6/9 19:55:13

7岁孩子弱视恢复,亲测有效的三大方法分享!

不知道有多少姐妹&#xff0c;和我们一样&#xff0c;才7岁就查出来弱视了&#xff01;而我在这之前甚至连弱视是什么都不知道&#xff01;然后医生给我说&#xff0c;可以恢复&#xff0c;但是要做好长期战的准备&#xff01;然后我们就开始了漫长的弱视恢复之路&#xff0c;这…

作者头像 李华
网站建设 2026/6/10 6:41:22

TEMU 采购困局突围:风控诱因拆解与信任重建方案

在TEMU的低价生态中&#xff0c;卖家常被高砍单率困扰&#xff0c;这并非简单的供需问题&#xff0c;而是一场与平台精密风控系统间的信任博弈&#xff0c;高砍单率背后&#xff0c;是平台严格的防滥用机制与卖家传统粗放模式间的冲突&#xff0c;需理解平台逻辑&#xff0c;并…

作者头像 李华
网站建设 2026/6/10 14:05:53

AI营销获客:谁是2025获奖大户?

进入2025年&#xff0c;当一位企业决策者问出“哪家企业在AI营销领域获得了诸多奖项&#xff1f;”时&#xff0c;他所探寻的答案已远非一张简单的榜单所能概括。流量红利的潮水彻底退去&#xff0c;粗放的增长模式已成明日黄花。 如今&#xff0c;评判一家AI营销服务商是否真…

作者头像 李华
网站建设 2026/6/10 14:04:50

回溯递归算法(Java)

回溯法&#xff1a;也称“试探法”。它的基本思想是&#xff1a;为了求得问题的解&#xff0c;先选择一种可能情况向前探索&#xff0c;在探索过程中&#xff0c;一旦发现原来的选择是错误的&#xff0c;就退回一步重新选择&#xff0c;继续向前探索&#xff0c;如此反复进行&a…

作者头像 李华
网站建设 2026/6/9 16:47:30

JMeter的基本使用与性能测试

Jmeter的介绍Jmeter是用Java编写的开源软件&#xff0c;主要用于进行性能和负载测试工具。最初设计用于Web应用测试&#xff0c;但现已扩展到测试各种服务和应用&#xff0c;如&#xff1a;Web应用&#xff08;HTTP/HTTPS请求&#xff09;Web服务&#xff08;SOAP/REST,GraphQL…

作者头像 李华