百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

时间序列异常检测:MSET-SPRT组合方法的原理和Python代码实现

off999 2025-05-28 19:39 13 浏览 0 评论

来源:DeepHub IMBA

本文约1700字,建议阅读6分钟

本文通过一个精简的示例来演示MSET-SPRT方法在Python中的实现过程。



在异常检测领域,尤其针对工业机械、核反应堆和网络安全等复杂系统,传统方法往往难以有效处理高维度且相互关联的数据流。多元状态估计技术(MSET) 与序贯概率比检验(SPRT) 的组合方法在此类场景中展现出显著优势。


MSET-SPRT是一种结合机器学习状态估计与统计假设检验的混合技术框架,通过其高精度和稳健性,被广泛应用于关键任务系统的监控与分析。该方法能够实时识别系统行为的微小偏差,为预防性维护和异常事件预警提供可靠依据。

MSET-SPRT理论基础

多元状态估计技术(MSET)原理

MSET作为一种非参数非线性回归技术,通过历史观测数据构建系统正常状态模型。其核心工作机制包括:

建立包含历史正常系统状态的记忆矩阵,作为参考基准;利用学习到的历史状态间关系计算加权组合,从而估计当前系统的预期状态;通过对比观测值与估计值,计算系统行为偏差,为异常检测提供基础指标。

序贯概率比检验(SPRT)方法

SPRT是一种基于统计推断的序贯假设检验方法,专用于确定系统行为偏差是否具有统计显著性。其主要功能为:

持续评估残差误差(实际观测值与模型估计值之间的差异),并根据预设的统计模型进行假设检验;当检测到的偏差超过统计置信阈值时,系统能够及时发出预警信号,同时控制虚警率在可接受范围内。

MSET-SPRT框架通过上述两种技术的协同作用,为多元数据异常检测提供了准确且高效的解决方案,特别适用于高维度、高相关性的时间序列数据分析。

Python实现MSET-SPRT异常检测

下面通过一个精简的示例来演示MSET-SPRT方法在Python中的实现过程。

导入必要的库

 import numpy as np

 import scipy.stats as stats

 import matplotlib.pyplot as plt


生成模拟数据集

构建一个多元正态分布数据集,用于模拟正常运行状态下的系统行为:

# Simulating normal system behavior (3 correlated sensors)

np.random.seed(42)

mean = [50, 75, 100]  # Mean values for three sensors

cov = [[10, 5, 2], [5, 15, 3], [2, 3, 20]]  # Covariance matrix




# Generate 500 normal operation samples

 normal_data = np.random.multivariate_normal(mean, cov, size=500)


实现MSET算法

采用基于加权最近邻的方法实现MSET算法,用于估计系统的预期行为:

class MSET:

    def __init__(self, memory_matrix):

        self.memory_matrix = memory_matrix  # Store normal system states




    def estimate(self, input_vector):

        """

        Estimates the expected state based on historical data.

        Uses nearest neighbors to compute weighted estimation.

        """

        weights = np.exp(-np.linalg.norm(self.memory_matrix - input_vector, axis=1))

        weights /= np.sum(weights)

         return np.dot(weights, self.memory_matrix)


初始化MSET模型,将正常运行数据作为记忆矩阵:

 # Initialize MSET with normal data as memory

 mset_model = MSET(memory_matrix=normal_data)


计算残差

计算实际观测值与MSET估计值之间的残差,作为异常检测的基础:

 # filepath: deephub\5\20250327\article.md

# Simulated test data (normal + some anomalies)

test_data = np.vstack([

    np.random.multivariate_normal(mean, cov, size=450),  # Normal

    np.random.multivariate_normal([70, 50, 130], cov, size=50)  # Anomalies

])




# Compute estimated values

estimated_data = np.array([mset_model.estimate(x) for x in test_data])

# Compute residuals

 residuals = np.linalg.norm(test_data - estimated_data, axis=1)


应用SPRT进行异常检测

基于似然比检验原理实现SPRT算法,用于判定残差是否表示异常状态:

# Define thresholds for SPRT

alpha = 0.05  # False positive rate

beta = 0.05   # False negative rate

mu_0, sigma_0 = np.mean(residuals[:450]), np.std(residuals[:450])  # Normal behavior

mu_1 = mu_0 + 3 * sigma_0  # Anomalous mean shift




# SPRT decision function

def sprt_test(residual):

    """ Sequential Probability Ratio Test for anomaly detection """

    likelihood_ratio = stats.norm(mu_1, sigma_0).pdf(residual) / stats.norm(mu_0, sigma_0).pdf(residual)

    return likelihood_ratio > (1 - beta) / alpha

# Apply SPRT

anomalies = np.array([sprt_test(res) for res in residuals])

# Plot results

plt.figure(figsize=(12, 5))

plt.plot(residuals, label="Residuals", color="blue")

plt.axhline(mu_1, color="red", linestyle="dashed", label="Anomaly Threshold")

plt.scatter(np.where(anomalies)[0], residuals[anomalies], color="red", label="Detected Anomalies", zorder=2)

plt.xlabel("Time")

plt.ylabel("Residual Magnitude")

plt.legend()

plt.title("MSET-SPRT Anomaly Detection")

 plt.show()


结果分析与解释

图中数据可视化结果展示了MSET-SPRT方法的异常检测效果:

蓝色曲线表示系统状态残差时间序列,反映了实际观测值与估计值之间的偏差大小;红色虚线标示出异常检测阈值,该阈值基于正常运行数据的统计特性计算得出;红色标记点则代表被SPRT算法判定为异常的时间点,这些点的残差值显著高于正常波动范围。

分析结果表明,MSET-SPRT方法能够有效区分正常系统波动与异常行为,提供了一种可靠的多元时间序列异常检测方案。该方法特别适用于需要高精度异常检测的工业监控、设备健康管理和网络安全等领域。

相关推荐

Python爬虫:动态漫画图片抓取

当今互联网,为了防止内容被轻易抓取,网站的反爬机制可谓是花样百出。其中,动态加载图片、隐藏真实链接、图片分割重组以及加载后自动清除Canvas等技术,给爬虫工程师带来了不小的挑战。本文将结合一个实...

Python中如何操作Surface对象绘制图形?

在Surface对象上绘制图形分为加载图片和绘制图片两个步骤。(1)加载图片加载图片即将图片读取到程序中,通过pygame中image模块的load()方法可以向程序中加载图片,生成Surface对...

【猫狗识别系统】图像识别Python+TensorFlow+卷积神经网络算法

猫狗识别系统。通过TensorFlow搭建MobileNetV2轻量级卷积神经算法网络模型,通过对猫狗的图片数据集进行训练,得到一个进度较高的H5格式的模型文件。然后使用Django框架搭建了一个We...

python中Django视图(view)的详解(附示例)

本篇文章给大家带来的内容是关于python中Django视图(view)的详解(附示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。一个视图函数(类),简称视图,是一个简单的Pyt...

使用Python实现pdf转图片

使用Python实现pdf转图片本文档主要描述将pdf的每一页保存为图片,在本例中,我们使用了PyMuPDF,PyMuPDF是MuPDF的Python绑定库,允许开发者通过Python...

资深大佬教你如何利用PyTorch实现图像识别(图文详解)

这篇文章主要给大家介绍了关于如何利用PyTorch实现图像识别的相关资料,文中通过图文以及实例代码介绍的非常详细,对大家学习或者使用PyTorch具有一定的参考学习价值,需要的朋友可以参考下目录使用t...

实战:谷歌图片搜索——用 Fastapi-MCP 快速从 0 开发一个 MCP Server

本文将指导你如何利用Fastapi-MCP快速搭建一个MCP服务器,以实现谷歌图片搜索功能,为AI应用提供强大的工具支持,从而提升AI的实用性和效率。Fastapi是一个PythonWeb框架,...

python图片处理之图片切割

python图片切割在很多项目中都会用到,比如验证码的识别、目标检测、定点切割等,本文给大家带来python的两种切割方式:fromPILimportImage"""...

Python图像识别实战(三):基于OpenCV实现批量单图像超分辨重建

前面我介绍了可视化的一些方法以及机器学习在预测方面的应用,分为分类问题(预测值是离散型)和回归问题(预测值是连续型)(具体见之前的文章)。从本期开始,我将做一个关于图像识别的系列文章,让读者慢慢理解p...

Python 图像处理

以前照相从来没有那么容易。现在你只需要一部手机。拍照是免费的,如果我们不考虑手机的费用的话。就在上一代人之前,业余艺术家和真正的艺术家如果拍照非常昂贵,并且每张照片的成本也不是免费的。我们拍照是为了及...

游戏百解——利用Python图像识别玩连连看,手把手教你成为大师!

这是我自己用程序写的视频,利用Python图像识别算法玩转连连看。感兴趣可以自己看一下。游戏百解——连连看(大神版)前言:程序主要功能是先将练练看的整个大图切分成单个小图,然后进行循环遍历找出相似的图...

用Python进行机器学习(13)-图像特征提取

相对于前面的机器学习都是处理一些简单的数字,今天我们来用机器学习处理一点稍微高级的内容,我们进行图像的特征提取。图像的特征提取有很多的用途,比如图像分类、目标检测、图像检索、聚类分析、异常检测、图像生...

深入剖析Python基本函数:从基础到进阶的完整指南

引言Python作为一门简洁高效的编程语言,其函数系统是支撑代码模块化的核心机制。掌握Python函数的使用方法不仅能提升代码的可读性和复用性,还能帮助开发者理解面向对象编程和函数式编程的精髓。本文将...

在Python中将函数作为参数传入另一个函数中

在我们的Python学习中,我们学到的众多令人瞠目结舌的事实之一是,你可以将函数传入其他函数。你可以来回传递函数,因为在Python中,函数是对象。在使用Python的第一周,你可能不需要了解这些,但...

探索 Python CSV 模块的高级用法:从格式识别到数据转换的完整指南

CSV(逗号分隔值)是一种用于存储表格数据的文件格式。每一行代表一条数据记录,行内的各个字段由逗号分隔。这是数据领域最常见的文件扩展名之一,也是专业环境中最简单的数据交换格式之一。作为一名具备Pyt...

取消回复欢迎 发表评论: