异常点检测算法实战案例

异常点检测算法实战案例

目录

异常点检测算法实战案例

1. 异常点检测概述

2. Z-Score方法

3. IQR方法

4. Isolation Forest

5. KNN(k-近邻)

6. One-Class SVM

7. DBSCAN(基于密度的聚类)

8. ADTK(时间序列异常检测)

9. LSTM(深度学习时间序列检测)

10. 综合比较与选择建议

总结

1. 异常点检测概述

异常点(Outlier)是指与大多数数据明显不同的观测值,可能由测量误差、数据录入问题或真实但罕见的事件引起。在数据分析和机器学习中,异常检测是数据清洗和模型优化的重要环节。常见的检测方法包括统计方法(Z-Score、IQR)、基于模型的方法(Isolation Forest、KNN、One-Class SVM)和基于密度的方法(DBSCAN)。本文将通过Python代码实现这些方法,并分析其适用场景。

2. Z-Score方法

Z-Score方法基于数据点与均值的偏差,适用于正态分布的数据集。其核心思想是:若数据点与均值的偏差超过一定阈值(如3σ),则视为异常。

代码实现:

import numpy as np
from scipy.stats import zscore
import matplotlib.pyplot as plt

# 生成随机数据
np.random.seed(42)
data = np.random.randn(100)  # 正态分布数据
data[50] = 10  # 人为添加异常值

# 计算Z-Score
z_scores = zscore(data)

# 定义阈值(通常为2或3)
threshold = 2.5
outliers = np.where(np.abs(z_scores) > threshold)[0]

# 可视化
plt.figure(figsize=(10, 6))
plt.scatter(range(len(data)), data, c='blue', label='正常值')
plt.scatter(outliers, data[outliers], c='red', label='异常值')
plt.title("Z-Score异常检测")
plt.legend()
plt.show()

结果分析:

  • Z-Score方法简单高效,但对非正态分布数据效果较差。
  • 图中红色点表示被标记为异常值的数据。
3. IQR方法

IQR(Interquartile Range)方法基于四分位数,适用于非正态分布数据。通过计算四分位距(IQR = Q3 - Q1),并定义异常值范围为:Q1 - 1.5*IQRQ3 + 1.5*IQR

代码实现:

import pandas as pd
import seaborn as sns

# 生成随机数据
np.random.seed(42)
data = pd.DataFrame({'value': np.random.normal(0, 1, 1000)})
data.loc[990:999, 'value'] = np.random.uniform(5, 10, 10)  # 添加异常值

# IQR检测
def detect_outliers_iqr(data):
    Q1 = data.quantile(0.25)
    Q3 = data.quantile(0.75)
    IQR = Q3 - Q1
    lower_bound = Q1 - 1.5 * IQR
    upper_bound = Q3 + 1.5 * IQR
    return (data < lower_bound) | (data > upper_bound)

outliers = detect_outliers_iqr(data['value'])
outliers_count = sum(outliers)

# 可视化
plt.figure(figsize=(15, 6))
plt.subplot(1, 2, 1)
sns.scatterplot(x=range(len(data)), y=data['value'], hue=
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

宁安我

谢谢鼓励,您为支持开源做出贡献

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值