时间序列无监督异常点检测算法_孤立森林,局部离群因子检测和自编码器

数据入口:压气机异常检测一维时间序列 - Heywhale.com

该数据为采样自工业压气机的一维时间序列数据。本文将通过无监督时间序列算法进行时间序列异常检测。针对时间序列数据,常用的无监督异常检测算法包括:孤立森林(Isolation Forest)、基于密度的局部离群因子检测(LOF)、自编码器(Autoencoders)等。根据数据特性可以选择合适的算法。时间序列数据可能需要预处理,如归一化、缺失值处理等,以确保算法的有效性。最后使用选定的算法对数据进行训练,并识别出异常点。

一:孤立森林

孤立森林(Isolation Forest)是一种高效的异常检测算法。它基于这样的观察:异常数据通常数量较少且与正常数据有较大差异,因此在数据集中更容易被孤立。孤立森林通过构建多棵随机的二叉树(孤立树),每棵树都随机选择特征和切分点来递归地分割数据,直到每个数据点都被孤立到自己的节点上。异常点由于其独特的属性,通常会在较少的分割步骤中就被孤立,因此它们在树中的路径较短。

孤立森林算法的主要特点包括:

  1. 高效性:具有线性时间复杂度,适合处理大规模数据集。
  2. 无需参数调整:算法性能不太依赖于参数设置,如树的数量和子采样的大小。
  3. 易于并行化:由于每棵树的构建是独立的,可以并行处理。
  4. 鲁棒性:对高维数据和稀疏数据表现良好。

算法的流程大致如下:

  1. 从数据集中随机抽取一定数量的样本作为子样本。
  2. 对于每个子样本,随机选择一个特征和一个切分点,构建一棵孤立树。
  3. 重复步骤1和2,构建多棵孤立树,形成孤立森林。
  4. 对于新的样本,通过计算其在森林中的平均路径长度来判断其是否为异常。

在Python中,可以使用sklearn.ensemble.IsolationForest来实现孤立森林算法。通过调整参数如n_estimators(树的数量)、max_samples(构建子树的样本数)、contamination(异常数据的比例估计)等,可以在不同数据集上优化算法的性能。

数据集包含三个特征:导叶开度、燃料流量(单位:𝑚3𝑁/ℎm3N/h)和压气机出口温度。这些特征都是数值型的,首先,我将进行数据探索,查看数据的统计描述和分布情况。

import pandas as pdfile_path = 'data.xlsx'
data = pd.read_excel(file_path)data_description = data.describe()
missing_values = data.isnull().sum()
data_description, missing_values

从数据的统计描述中,我们可以观察到以下几点:

  • 导叶开度:范围在 0 到 85 之间,平均值约为 62。
  • 燃料流量:范围在 0.0089 到 6.81 𝑚3𝑁/ℎm3N/h,平均值约为 3.39。
  • 压气机出口温度:范围在 1 到 550 度,平均值约为 215.36 度。

所有特征都没有缺失值,这意味着我们不需要进行缺失值处理。

接下来,我将选择一个合适的无监督异常检测算法。计划使用孤立森林(Isolation Forest)算法进行异常检测。这是一种适用于高维数据的算法,特别适合于检测少量异常值。在应用孤立森林算法之前,我将对数据进行归一化处理,以确保算法的有效性。然后,我将训练孤立森林模型并识别出异常点。最后,我将检测结果进行可视化。

from sklearn.ensemble import IsolationForest
from sklearn.preprocessing import StandardScaler
import matplotlib.pyplot as plt
import seaborn as snsscaler = StandardScaler()
data_normalized = scaler.fit_transform(data)model = IsolationForest(n_estimators=100, max_samples='auto', contamination=float(0.01), random_state=42)model.fit(data_normalized)anomaly_scores = model.decision_function(data_normalized)
data['anomaly_score'] = anomaly_scoresdata['anomaly'] = model.predict(data_normalized)
anomalies = data[data['anomaly'] == -1]plt.figure(figsize=(10, 6))
sns.scatterplot(data=data, x='导叶开度', y='燃料流量m3N/h', hue='anomaly', palette='deep', s=100)
plt.scatter(anomalies['导叶开度'], anomalies['燃料流量m3N/h'], color='red', marker='x', s=100, label='Anomaly')
plt.title('Anomaly Detection using Isolation Forest')
plt.legend()
plt.show()num_anomalies = len(anomalies)
num_anomalies

在异常分数与预测中,decision_function:计算每个样本的异常分数,分数越低,越可能是异常。然后预测每个样本是否为异常,返回1表示正常,-1表示异常。使用孤立森林算法,我们在数据集中检测到了 7 个异常点。这些异常点在可视化图中以红色 ‘x’ 标记出来。后续也可以调整算法参数来优化模型。

二:局部离群因子

局部离群因子(Local Outlier Factor, LOF)是一种基于密度的离群点检测算法。LOF算法的核心思想是,一个数据点如果是离群点,那么它与邻近点的密度相比会显得相对稀少。LOF算法通过计算每个数据点的局部离群因子来确定其是否为离群点。

LOF算法的工作原理可以概括为以下几个步骤:

  1. k邻近距离(k-distance):对于数据集中的每个点,计算它到第k个最近邻点的距离,这个距离被称为k邻近距离。

  2. k距离邻域:以每个点的k邻近距离为半径,画一个圆,圆内的点被认为是该点的k距离邻域内的点。

  3. 局部可达密度(Local Reachability Density, LRD):计算每个点的局部可达密度,即该点的k距离邻域内点的密度。

  4. 局部离群因子(LOF):对于每个点,计算其邻域内其他点的局部可达密度与该点的局部可达密度之比的平均数。如果这个比值显著大于1,那么该点可能是离群点。

在Python中,可以使用scikit-learn库中的LocalOutlierFactor类来实现LOF算法。通过设置n_neighbors参数来定义局部邻域的大小,contamination参数来估计数据集中离群点的比例。

由于数据已经被标准化,接下来,我将使用基于密度的局部离群因子(LOF)方法来检测异常值。我将使用 sklearn 库中的 LocalOutlierFactor 类来计算每个数据点的 LOF 值,并标识出 LOF 值最高的数据点作为异常点:

from sklearn.neighbors import LocalOutlierFactorn_neighbors = 20lof = LocalOutlierFactor(n_neighbors=n_neighbors, metric='euclidean')
lof.fit_predict(data_normalized)lof_scores = lof.negative_outlier_factor_lof_anomalies = data[lof_scores < -1.5]lof_anomalies

可以看出也检测出来前7行数据为异常值。

三:自编码器

自编码器在时间序列无监督异常点检测中的应用主要体现在利用其强大的特征学习能力来识别数据中的异常模式。时间序列数据是按时间顺序排列的数据点集合,它们可以是连续的,也可以是离散的。在时间序列分析中,异常点或离群点是指那些显著偏离正常模式的数据点或数据段。

自编码器通过学习数据的有效表示来压缩和重建输入数据。在时间序列的上下文中,自编码器可以用来捕捉时间依赖性和模式,从而能够重建输入序列。如果某个数据点或序列无法被自编码器准确重建,这可能表明它是一个异常点。

在无监督异常检测的背景下,自编码器通常被训练为最小化重建误差,即输入数据和重建数据之间的差异。在训练过程中,自编码器学习到的正常时间序列数据的表示,可以用来识别那些与学习到的模式不匹配的异常数据点。

我将构建并训练一个自编码器模型来检测异常值。为此,我将设计一个简单的自编码器模型,并使用标准化后的数据来训练它。训练完成后,我将使用模型来重构数据,并计算每个数据点的重构误差。最后,我将标识出重构误差最大的数据点作为异常点。

from keras.layers import Input, Dense
from keras.models import Model
from keras.optimizers import Adaminput_dim = data_normalized.shape[1]
encoding_dim = 2  input_layer = Input(shape=(input_dim,))
encoded = Dense(encoding_dim, activation='relu')(input_layer)
decoded = Dense(input_dim, activation='sigmoid')(encoded)autoencoder = Model(input_layer, decoded)
encoder = Model(input_layer, encoded)autoencoder.compile(optimizer=Adam(learning_rate=0.001), loss='mse')autoencoder.fit(data_normalized, data_normalized, epochs=50, batch_size=32, shuffle=True, validation_split=0.2)data_reconstructed = autoencoder.predict(data_normalized)reconstruction_error = ((data_reconstructed - data_normalized) ** 2).mean(axis=1)autoencoder_anomalies = data[reconstruction_error > 0.5]autoencoder_anomalies

可以看出也检测出前几行数据为时间序列异常值。

想要探索多元化的数据分析视角,可以关注之前发布的相关内容。

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

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

相关文章

【Yonghong星球】Windows平台上Yonghong的Python、DM-Engine安装与配置详细攻略

文章目录 问题描述问题解决(配置相应的python计算服务)拓展 第三方工具包安装/更新其他出现问题 问题描述 当我们进行深度分析的时候&#xff0c;运行结点报错&#xff0c;这是因为需要配置相应的python计算服务。 报错内容&#xff1a; 2024-09-20 13:57:22 开始运行“各省G…

js中的 赋值 浅拷贝 和 深拷贝 详细解读

js数据类型主要分基本数据类型和引用数据类型。前者包括Number,String等&#xff0c;后者主要是Object,因此以下会针对不同的数据类型来分析,需要的朋友可以参考一下 基本数据类型&#xff08;Primary Data Types&#xff09;: String&#xff08;字符串&#xff09; Number&…

三端全隔离485中继器光电隔离工业级 RS485集线器2口信号放大器 抗干扰防雷

485中继器光电隔离工业级 RS485集线器2口信号放大器 抗干扰防雷https://item.taobao.com/item.htm?ftt&id713033449656 哪里信号不好&#xff0c;中继器就接哪里 将有效的对信号进行隔离放大 信号隔离 电源隔离 双向传输 即插即用 增强抗干扰 延长通信距离 产品概…

防火墙详解(二)通过网页登录配置华为eNSP中USG6000V1防火墙

配置步骤 步骤一 打开eNSP&#xff0c;建立如下拓扑。防火墙使用&#xff1a;USG6000V1。 Cloud的作用是通过它可以连接本地的网卡&#xff0c;然后与我们的电脑进行通信。 由于防火墙USG6000V&#xff0c;不能直接开启&#xff0c;需要的导入包&#xff0c;所以需要在华为官网…

爬虫过程 | 蜘蛛程序爬取数据流程(初学者适用)

蜘蛛程序&#xff08;也称网络爬虫&#xff0c;是搜索引擎的重要组成部分&#xff09; 主要功能&#xff1a;遍历互联网&#xff0c;抓取网站信息并建立索引&#xff0c;便于用户在搜索引擎中检索到最新的网页内容工作原理&#xff1a;从初始网站页面的URL开始&#xff0c;发送…

【人工智能】看我如何用4个AI大模型,实现了堪比o1-preview的思维链。内含3个AI问答的数据比对结果!

在当今人工智能的快速发展中&#xff0c;如何高效地利用不同的AI模型来提升工作效率&#xff0c;成为了许多开发者和企业关注的焦点。本文将深入探讨如何通过4个GPT-4o模型与其他多模型的编排&#xff0c;构建一个强大的AI工作流&#xff0c;并与o1-preview的数据结果进行对比&…

怎么录屏?免费录屏软件推荐,电脑屏幕与摄像头内容录制与分享指南

在数字化办公和在线教育日益普及的今天&#xff0c;录屏软件成为了我们不可或缺的工具。无论是制作教学视频、游戏直播&#xff0c;还是远程会议记录&#xff0c;一个好的录屏软件都能让这些任务变得轻而易举。但面对市场上琳琅满目的录屏软件&#xff0c;我们该如何选择呢&…

国内短剧cps系统和短剧(播放)系统的区别,附各源码部署教程

国内短剧项目主要分为两大形式&#xff1a;一种是做短剧播放平台&#xff0c;让用户付费观看&#xff1b;另一种是做短剧的分销&#xff0c;就是将他人的平台短剧推广&#xff0c;可做平台可入驻&#xff0c;拿分成。 首先来说一下短剧播放平台&#xff08;短剧系统&#xff0…

【推荐100个unity插件之26】Unity 地形Terrain的绘制和使用进阶内容 —— Terrain Tools和 Terrain Toolbox的使用

文章目录 前言一、Terrain Toolbox的使用安装Terrain Tools下载导入资产样本打开选择Terrain Toolbox创建地形切割地形创建不同分组的地形terrain group设置第一个pixel error是LOD精度&#xff0c;值越小精度越高&#xff0c;当然性能开销也就越大第二个base map distance是指…

【网络安全】TCP和UDP

一、TCP/UDP对比 1.共同点&#xff1a; 都是工作在TCP/IP体系结构的传输层的协议 工作主要都是把端口号往原始数据封装 在 TCP 协议中&#xff0c;原始数据指的是应用程序产生的需要通过网络进行传输的数据。这些数据可以是各种类型的信息&#xff0c;例如文本、图像、音频、…

200Kg大载重多旋翼无人机应用前景详解

大载重多旋翼无人机是一类具备高载重能力和长航时特点的无人机系统&#xff0c;它们融合了多旋翼无人机的灵活性与大载重无人机的实用性&#xff0c;广泛应用于多个领域。 1. 航拍与影视制作 在航拍与影视制作领域&#xff0c;200Kg大载重多旋翼无人机凭借其出色的稳定性和载重…

mysql时间戳格式化yyyy-mm-dd

格式化到 年月日 # 将时间换成列名就行&#xff1b;当前是秒级时间戳&#xff0c;如果是毫秒的 / 1000即可 # SELECT FROM_UNIXTIME(1602668106666.777888999 / 1000,%Y-%m-%d) AS a; # SELECT FROM_UNIXTIME(列名 / 1000,%Y-%m-%d) AS a; SELECT FROM_UNIXTIME(1602668106.666…

动手学深度学习(四)卷积神经网络-下

全连接层存在的问题&#xff1a;参数过大&#xff0c;计算成本过高。 一、网络中的网络&#xff08;NiN&#xff09; 1、NiN块 ①NiN块的结构 NiN串联多个由卷积层和“全连接”层构成的小网络来构建一个深层网络。这种由卷积层和“全连接”层构成的小网络就是NiN块。 &#…

【学习笔记】 AD24中元器件重叠系统不报错的解决方案(消除报错)

【学习笔记】 AD24中PCB设计元器件重叠后系统不报错的解决方案&#xff08;如何主动屏蔽报错&#xff09; 一、Component Clearance未开启使能的解决方案二、最小水平间距设置错误的解决方案三、未开启设计规则检查的解决方案四、设计规则检查中 “在线”和“批量”的含义五、为…

Matplotlib绘制热力图

热力图&#xff08;Heatmap&#xff09;是一种使用颜色来表示数值强度的数据可视化工具。它常用于以下场景&#xff1a; 热力图的适用场景 数据的相关性分析&#xff1a;在统计学中&#xff0c;热力图常用于展示变量之间的相关性&#xff0c;尤其是当数据量较大时&#xff0c;…

Vue(14)——组合式API①

setup 特点&#xff1a;执行实际比beforeCreate还要早&#xff0c;并且获取不到this <script> export default{setup(){console.log(setup函数);},beforeCreate(){console.log(beforeCreate函数);} } </script> 在setup函数中提供的数据和方法&#xff0c;想要在…

普通查询+聚合函数的使用(8个例子,数值和字符串的比较)

目录 回顾普通查询聚合函数的使用 表数据 例子1 例子2 例子3 ​​​​​​​例子4 例子5 例子6 例子7(数值和字符串的比较) 例子8 回顾普通查询聚合函数的使用 之前我们介绍过聚合函数 --mysql分组查询 -- 聚合函数(介绍,使用),group by使用,分组聚合统计(使用,havi…

【Unity杂谈】iOS 18中文字体显示问题的调查

一、问题现象 最近苹果iOS 18系统正式版推送&#xff0c;周围升级系统的同事越来越多&#xff0c;有些同事发现&#xff0c;iOS 18上很多游戏&#xff08;尤其是海外游戏&#xff09;的中文版&#xff0c;显示的字很奇怪&#xff0c;就像一些字被“吞掉了”&#xff0c;无法显示…

【ArcGIS微课1000例】0123:数据库中要素类批量转为shapefile

除了ArcGIS之外的其他GIS平台,想要打开ArcGIS数据库,可能无法直接打开,为了便于使用shp,建议直接将数据库中要素类批量转为shapefile。 文章目录 一、连接至数据库二、要素批量转shp一、连接至数据库 打开ArcMap,或者打开ArcCatalog,找到数据库连接,如下图: 数据库为个…

人工智能的前景与未来就业市场:机遇、挑战与社会影响

随着科技的飞速发展&#xff0c;人工智能&#xff08;AI&#xff09;已经逐渐渗透到我们生活的方方面面&#xff0c;它不仅引领着技术革新的浪潮&#xff0c;更在无声中重塑着我们的就业市场和社会结构。站在这个时代的交汇点上&#xff0c;我们不禁要问&#xff1a;人工智能将…