异常值检测算法学习

news/2025/10/23 9:32:29/文章来源:https://www.cnblogs.com/GPVI/p/19159614

1. 基于分布的异常检测

1.1 3σ准则 (3-Sigma Rule)

原理:基于正态分布假设,认为距离均值3个标准差之外的数据点为异常值

数学表达式

python

def three_sigma_detection(data):mean = np.mean(data)std = np.std(data)lower_bound = mean - 3 * stdupper_bound = mean + 3 * stdoutliers = [x for x in data if x < lower_bound or x > upper_bound]return outliers

优缺点

  • ✅ 简单直观,计算效率高

  • ✅ 对正态分布数据效果良好

  • ❌ 依赖正态分布假设

  • ❌ 对偏态分布敏感

  • ❌ 只能检测全局异常

适用场景:质量控制、金融收益率分析

1.2 Z-Score 方法

原理:计算数据点与均值的标准差距离

数学表达式

def z_score_detection(data, threshold=3):z_scores = np.abs((data - np.mean(data)) / np.std(data))return data[z_scores > threshold]

改进版本

  • 修正Z-Score:使用中位数和MAD(Median Absolute Deviation)
    def modified_z_score(data, threshold=3.5):median = np.median(data)mad = np.median(np.abs(data - median))modified_z_scores = 0.6745 * (data - median) / mad  # 0.6745为调整系数return data[np.abs(modified_z_scores) > threshold]
    

1.3 箱线图法 (Boxplot)

原理:基于四分位数和IQR(Interquartile Range)识别异常值

实现

def boxplot_detection(data):Q1 = np.percentile(data, 25)Q3 = np.percentile(data, 75)IQR = Q3 - Q1lower_bound = Q1 - 1.5 * IQRupper_bound = Q3 + 1.5 * IQRoutliers = [x for x in data if x < lower_bound or x > upper_bound]return outliers

阈值选择

  • 温和异常值:1.5×IQR

  • 极端异常值:3×IQR

2. 基于距离的异常检测

2.1 K-最近邻 (K-Nearest Neighbors)

原理:计算每个点与其k个最近邻的距离,距离较大的点视为异常

实现

python

from sklearn.neighbors import NearestNeighbors

def knn_outlier_detection(X, k=5, threshold=1.5):
neigh = NearestNeighbors(n_neighbors=k)
neigh.fit(X)
distances, indices = neigh.kneighbors(X)

# 计算平均距离
avg_distances = np.mean(distances, axis=1)# 基于百分位数设置阈值
if threshold <= 1:threshold_value = np.percentile(avg_distances, threshold * 100)
else:threshold_value = np.mean(avg_distances) + threshold * np.std(avg_distances)return avg_distances > threshold_value

优缺点

  • ✅ 无需分布假设

  • ✅ 可发现任意形状的异常

  • ❌ 计算复杂度高 O(n²)

  • ❌ 对参数k敏感

  • ❌ 高维数据效果差(维度灾难)

2.2 局部异常因子 (LOF - Local Outlier Factor)

原理:比较点的局部密度与其邻居的局部密度

实现

from sklearn.neighbors import LocalOutlierFactor
def lof_detection(X, contamination=0.1):lof = LocalOutlierFactor(contamination=contamination)return lof.fit_predict(X)

核心概念

  • k-距离:点到第k个最近邻的距离

  • 可达距离:max(k-距离(p), 两点间距离)

  • 局部可达密度:k个近邻的平均可达距离的倒数

  • LOF值:近邻的局部可达密度与当前点密度的比值

LOF值解释

  • ≈1:与邻居密度相似

  • <1:密度高于邻居(可能是内点)

  • 1:密度低于邻居(可能是异常点)

3. 基于密度的异常检测

3.1 DBSCAN-based 异常检测

原理:基于密度的聚类,将不属于任何簇的点标记为异常

实现

from sklearn.cluster import DBSCANdef dbscan_outlier_detection(X, eps=0.5, min_samples=5):dbscan = DBSCAN(eps=eps, min_samples=min_samples)labels = dbscan.fit_predict(X)return labels == -1  # -1表示噪声点(异常)

参数选择

  • eps:邻域半径
  • min_samples:核心点所需的最小邻居数

3.2 局部异常概率 (LoOP - Local Outlier Probability)

原理:基于局部邻域的统计检验计算异常概率

特点

  • 提供0-1之间的异常概率
  • 对局部密度变化更鲁棒

4. 基于树的异常检测

4.1 孤立森林 (Isolation Forest)

原理:异常点更容易被随机划分孤立

实现

from sklearn.ensemble import IsolationForestdef isolation_forest_detection(X, contamination=0.1):iso_forest = IsolationForest(contamination=contamination,random_state=42)return iso_forest.fit_predict(X)

算法流程

  1. 随机选择特征和分割值构建孤立树

  2. 计算每个点的路径长度(从根节点到该点的边数)

  3. 计算异常分数:$s(x,n) = 2^{-\frac{E(h(x))}{c(n)}}$

    • $E(h(x))$:路径长度的期望

    • $c(n)$:平均路径长度,用于标准化

异常分数解释

  • 接近1:很可能是异常

  • 远小于0.5:很可能是正常点

  • 所有点约0.5:没有明显异常

优缺点

  • ✅ 处理高维数据效果好

  • ✅ 线性时间复杂度

  • ✅ 无需距离或密度计算

  • ❌ 对局部异常检测效果有限

5. 其他重要方法

5.1 一类支持向量机 (One-Class SVM)

原理:在特征空间中找到最优超平面,使大部分数据位于同一侧

from sklearn.svm import OneClassSVMdef one_class_svm_detection(X, nu=0.1):oc_svm = OneClassSVM(nu=nu)return oc_svm.fit_predict(X)

5.2 自编码器 (Autoencoder)

原理:基于重构误差检测异常

from tensorflow.keras.models import Model
from tensorflow.keras.layers import Input, Densedef autoencoder_detection(X, encoding_dim=32, threshold=0.1):# 构建自编码器input_layer = Input(shape=(X.shape[1],))encoded = Dense(encoding_dim, activation='relu')(input_layer)decoded = Dense(X.shape[1], activation='sigmoid')(encoded)autoencoder = Model(input_layer, decoded)autoencoder.compile(optimizer='adam', loss='mse')# 训练并计算重构误差autoencoder.fit(X, X, epochs=50, batch_size=256, verbose=0)reconstructions = autoencoder.predict(X)mse = np.mean(np.power(X - reconstructions, 2), axis=1)return mse > threshold

6. 方法选择指南

方法 数据量 维度 异常类型 计算复杂度 是否需要标签
3σ/Z-Score 小-大 全局 O(n)
箱线图 小-大 全局 O(n log n)
KNN 小-中 低-中 全局 O(n²)
LOF 小-中 低-中 局部 O(n²)
孤立森林 全局 O(n log n)
One-Class SVM 中-高 全局 O(n²)-O(n³)
自编码器 复杂模式 O(epochs×n)

7. 最佳实践建议

  1. 数据预处理

    • 处理缺失值和标准化

    • 考虑数据分布特性

  2. 多方法结合

    def ensemble_anomaly_detection(X, methods=['isolation_forest', 'lof']):scores = []if 'isolation_forest' in methods:if_scores = IsolationForest().fit(X).score_samples(X)scores.append(if_scores)if 'lof' in methods:lof_scores = LocalOutlierFactor().fit(X).negative_outlier_factor_scores.append(lof_scores)# 组合分数combined_scores = np.mean(scores, axis=0)return combined_scores
    
  3. 阈值选择策略

    • 基于业务知识
    • 基于历史数据分布
    • 使用自适应阈值
  4. 验证与调优

    • 使用有标签数据验证(如有)
    • 结合业务场景调整参数
    • 定期重新训练模型

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/943949.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

取方案

取方案对于取方案: 跑两遍,第一遍取值,第二遍取方案

SQL Server 2008 R2 升级补丁需要注意的问题

安装了sqlserver2008r2-kb3045314-x64.exe后无法再安装sqlserver2008r2-kb3045316-x64,并且sqlserver2008r2-kb3045314-x64.exe安装后的版本高于sqlserver2008r2-kb3045316-x64, 我猜测是微软将两个补丁的名称顺序弄…

Maven的使用(Leo)

Maven Maven构建生命周期的核心阶段clean:清理项目编译、打包生成的输出文件(如 target 目录 ) validate:校验项目必要信息、依赖是否完整 compile:编译项目主代码(一般是 src/main/java 里的 Java 文件 ) test…

数字化实战:医疗器械行业售后工程师如何借CRM实现高效运维​

北京某三甲医院手术室走廊,晨光透过玻璃窗洒在消毒设备上。赵工抓起工牌走向电梯,口袋里的手机震动了一下,这是他今天收到的第一条设备预警通知。1、7:30 AM | 出发前的设备体检 作为一家国内头部医疗器械企业的售后…

2025年10月geo优化服务商推荐:知名机构评测列表

引言与现状分析 当品牌方在2025年第四季度规划来年预算时,“如何在生成式引擎里被看见”成为CMO例会的高频议题。DeepSeek、豆包、通义千问、元宝、Kimi的日活总和已突破4.3亿,传统SEO流量出现两位数的环比下滑,而G…

pg数据库表的大小

SELECT table_schema || . || table_name AS table_full_name, pg_size_pretty(pg_total_relation_size(" || table_schema || "." || table_name || ")) AS sizeFROM information_sch…

20251020_QQ_Cipher

倒序Rev,Base64,异或XOR,字符串Tags:倒序Rev,Base64,异或XOR,字符串 0x00. 题目 题目表述 A3O9Uzb1gzbox2O5kDNoVDOo1Db6kWao5mb8oDP8Qza4YnasF2a 如果能够倒带到最初的起点 如果能够补全不圆满 如果能有128种选择 总有…

高压差分探头PKDV508E使用常见问题与解决方案

高压差分探头在电力电子、开关电源、变频器等众多领域是必不可少的测量工具,尤其在浮地测量和高共模噪声抑制等场景下表现出色。PKDV508E作为一款具有100MHz带宽、800Vpk高压测量能力的差分探头,被广泛应用于研发、调…

好拼|免费在线拼图工具上架谷歌商店啦 - ops

在刚刚过去的两个月,我沿着中国东南沿海自驾了一大圈,那段时间几乎所有的精力都投入到了山川大海与人文美食之中,没怎么更新我的免费在线拼图工具,后台有不少朋友催更。这不,一回到家我就马不停蹄地开始了新一轮更…

基于MATLAB/Simulink的光照强度模型构建方法

一、基础光照模型实现 1. 恒定光照模型适用场景:简化分析或基准测试实现步骤: % 添加常量模块 add_block(simulink/Sources/Constant, Solar_Irradiance); set_param(Solar_Irradiance, Value, 1000); % 设置为标准光…

地中海、双肩包、格子衫?从业9年程序员聊聊真实的程序员是什么样子

你印象中的程序员,是不是这样的?不可否认,这确实是程序员的一种状态,并且现在依然存在。但其实这并不能代表大多数程序员,作为一名工作了 9 年的程序员,有必要跟大家聊聊真实的程序员是什么样子。 其实每个行业都…

2025年10月geo公司推荐:主流排行榜与避坑指南

引言与现状分析 当“2025年10月 geo公司”被输入搜索框,背后往往是三类真实焦虑:预算有限的成长型品牌担心“投错供应商”,头部企业担心“多平台算法不同步导致形象割裂”,而转型中的制造企业更担心“专业内容无法…

2025年10月又红又痒用什么产品推荐:口碑排行五款精华评价

入秋以后,昼夜温差拉大,办公室空调与户外冷风交替,皮肤屏障最容易“报警”:洗完脸紧绷、出门两分钟就泛红、夜里莫名刺痒。很多人第一反应是“换更厚重的面霜”,却越涂越闷,红痒不减。皮肤科门诊数据显示,每年9…

2025年10月美白精华产品推荐榜:临床验证数据排行

国庆一过,紫外线强度虽降,但夏季累积的色斑、暗沉开始显形,不少用户把“美白”列入十月护肤重点。后台高频提问集中在三点:敏感肌能否用、多久见效、会不会反黑。国家药监局2024年化妆品注册备案年报显示,美白淡斑…

RJ45

RJ45RJ45 连接器的英文全称为 Registered Jack 45RJ45 连接器的英文全称为 Registered Jack 45,主要应用于局域网(LAN,Local Area Network)连接。该连接器具有 8 个触点,对应的 8 条线缆通过双绞线构成 4 组差分对…

卫星遥感技术在河湖监管中的应用

在传统河湖监管中,人工巡查往往面临效率低、成本高、难以全覆盖等难题。如今,卫星遥感技术的出现彻底改变了这一局面,犹如为河湖管理装上“天眼”,实现全天候、无死角的智能监管。一、什么是卫星遥感技术? 卫星遥…

ETH和TCP/IP报文协议与网络编程

网络|协议|报文 ‍‍ 完整的网络数据报文 一个完整的网络数据包,从以太网帧头开始,包含了所有协议层的数据: +------------------+------------------+------------------+------------------+ | 以太网帧头 …

2025年10月黄黑皮美白产品榜:持证淡斑五强深度评测

入秋以后,紫外线强度虽有所下降,但黄黑皮人群往往发现:夏季累积的暗沉、痘印在镜子里愈发明显,底妆越盖越厚,反而加重闭口;想尝试美白,又担心猛药刺激导致反黑或敏感。小红书“黄黑皮美白”话题阅读量已破18亿,…

股票操作统计分析报告 - 2025年10月23日

股票操作统计分析报告body { font-family: "Microsoft YaHei", "Segoe UI", Tahoma, Geneva, Verdana, sans-serif; line-height: 1.6; color: rgba(51, 51, 51, 1); max-width: 1000px; margin: …

基于Java+Springboot+Vue开发的民宿酒店客房预订管理系统源码+运行步骤

项目简介该项目是基于Java+Springboot+Vue开发的民宿预订管理系统(前后端分离),这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Java编程技能,同时锻炼他们的项目设计与开发能力。通过…