当前位置: 首页 > news >正文

SMD/SMAP/MSL/SWaT/WADI 5大异常检测数据集:Python 3步标准化处理与格式统一

多变量时间序列异常检测数据集标准化处理实战指南

1. 五大核心数据集解析与预处理要点

在工业设备监控和物联网领域,多变量时间序列异常检测已成为保障系统稳定运行的关键技术。SMD、SMAP、MSL、SWaT和WADI这五大数据集因其丰富的多维特征和精确的异常标注,成为算法验证的黄金标准。让我们深入剖析每个数据集的技术特性:

1.1 SMD数据集技术细节

  • 数据构成:28台服务器机器5周内的38维指标(CPU负载、内存使用等),采样间隔1分钟
  • 特殊优势:提供异常贡献维度标注(interpretation_label)
  • 预处理难点
    def process_smd(file_path): data = pd.read_csv(file_path, header=None) # 自动生成特征列名 features = [f'metric_{i}' for i in range(data.shape[1]-1)] data.columns = ['timestamp'] + features + ['label'] return data.set_index('timestamp')

1.2 航天器数据集(SMAP/MSL)特性

特性SMAPMSL
实体数量55个通道27个通道
维度25维55维
数据范围[0,1]标准化[0,1]标准化
异常类型point/contextualpoint/contextual

特别注意:command相关变量为二元值(0/1),需单独处理

2. 标准化处理流水线设计

2.1 统一目录结构规范

processed_datasets/ ├── dataset_name/ │ ├── entity_1/ │ │ ├── train.csv │ │ └── test.csv │ └── entity_2/ │ ├── train.csv │ └── test.csv

2.2 时间戳处理最佳实践

def normalize_timestamp(df): if 'datetime' in df.columns: df['timestamp'] = pd.to_datetime(df['datetime']) elif 'timestamp' not in df.columns: df['timestamp'] = df.index return df.drop(columns=['datetime'], errors='ignore')

2.3 特征标准化策略

  • 连续变量:RobustScaler(应对异常值)
  • 分类变量:OneHotEncoder
  • 混合类型
    from sklearn.compose import ColumnTransformer preprocessor = ColumnTransformer([ ('num', RobustScaler(), numeric_cols), ('cat', OneHotEncoder(), categorical_cols) ])

3. 工程化实现方案

3.1 自动化处理流水线

class DatasetProcessor: def __init__(self, output_dir='processed_data'): self.output_dir = Path(output_dir) def process_all(self): for dataset in ['SMD', 'SMAP', 'MSL', 'SWaT', 'WADI']: processor = getattr(self, f'_process_{dataset.lower()}') processor() def _process_smd(self): # 实现SMD特有处理逻辑 pass

3.2 内存优化技巧

  • 分块处理pandas.read_csv(chunksize=10000)
  • 类型转换
    dtype_dict = {f'col_{i}': 'float32' for i in range(38)} pd.read_csv(..., dtype=dtype_dict)

3.3 并行处理实现

from concurrent.futures import ThreadPoolExecutor def parallel_process(files, func): with ThreadPoolExecutor(max_workers=4) as executor: executor.map(func, files)

4. 质量验证体系

4.1 数据完整性检查

def validate_dataset(df): assert not df.duplicated().any(), "存在重复记录" assert df.isna().sum().sum() == 0, "存在缺失值" if 'label' in df.columns: assert set(df['label'].unique()).issubset({0,1}), "标签值非法"

4.2 特征分布可视化

import seaborn as sns def plot_feature_dist(df, col): plt.figure(figsize=(10,4)) sns.histplot(df[col], kde=True) if 'label' in df.columns: sns.boxplot(x='label', y=col, data=df) plt.savefig(f'dist_{col}.png')

5. 实战应用案例

5.1 与PyOD集成示例

from pyod.models.iforest import IForest def train_model(train_path): train_data = pd.read_csv(train_path) clf = IForest(contamination=0.1) clf.fit(train_data.drop(columns=['label'])) return clf

5.2 性能基准测试

数据集处理时间(s)内存峰值(MB)文件大小(MB)
SMD42.71200310
SMAP18.385095
WADI76.52100480

6. 高级技巧与陷阱规避

6.1 时间序列特有处理

  • 滚动窗口统计
    df['rolling_mean'] = df['value'].rolling(60).mean() # 1小时窗口
  • 季节性分解
    from statsmodels.tsa.seasonal import seasonal_decompose result = seasonal_decompose(df['value'], period=1440) # 日周期

6.2 常见错误解决方案

  1. 内存溢出:使用dask.dataframe替代pandas
  2. 时间对齐问题df.asfreq('1T', method='pad')
  3. 特征尺度差异:分实体进行标准化

在处理WADI数据集时发现,新版数据的时间戳格式存在异常,通过以下方式修正:

wadi_train = wadi_train.merge(time_ref, on='Row').drop(columns=['Row'])

7. 扩展应用场景

7.1 实时检测系统集成

class StreamingProcessor: def __init__(self, window_size=60): self.buffer = deque(maxlen=window_size) def process(self, new_point): self.buffer.append(new_point) if len(self.buffer) == self.buffer.maxlen: return self._detect_anomaly() return None

7.2 自动化监控方案

# 使用cron定时执行数据更新 0 * * * * /usr/bin/python3 /path/to/process.py --dataset SMD --update
http://www.jsqmd.com/news/1131443/

相关文章:

  • 庞特里亚金最大值原理 5步实战:从哈密顿函数到最优控制信号求解
  • 手机删除数据、文件完整恢复详细实操指南(安卓 + iPhone)
  • C++/C#/F#/Java/JS/Lua/Python/Ruby渲染比试
  • 解决方案对比:OMPL vs CHOMP vs STOMP在机器人运动规划中的表现
  • 信号完整性SI实战:5种常见问题(反射/串扰/地弹)的PCB层叠与端接方案设计
  • 差分阻抗设计实战:从100Ω到90Ω,线距变化如何影响4种阻抗值(附仿真对比)
  • 由此Prototype开发者搞了一个非常有名的函数出来,bind!以下是它的一个最简单的版本:
  • 立创EDA 标准版 10x10cm 免费打样实战:从原理图到下单的 5 个关键检查点
  • PyTorch 2.0 VGG16 MNIST 实战:从原始IDX文件解析到99%+准确率模型
  • 手机摄影进阶:光线、构图与对焦实战技巧
  • PCF8591与PIC24FV16KA302的I2C信号处理方案
  • Cartographer ROS Noetic 仿真建图实战:Gazebo+Rviz 完整流程与 3 个关键配置文件解析
  • 机械设计公差标注实战:轴承/齿轮/皮带轮5类配合公差等级选用指南
  • PyTorch DataLoader 高级配置:5个核心参数详解与多进程加载避坑指南
  • POSIX 1003.1 标准解析:从 fork/exec 到 72 个系统调用的可移植性实践
  • 如何彻底告别重复点击:AutoClicker鼠标自动化完全指南
  • 欢迎来到我的技术分享
  • RTVS 1.3.0 阿里云 CentOS 7.8 部署:5个关键端口映射与 Docker 网络配置详解
  • H2 与 MySQL 单元测试兼容性:5 个关键 SQL 语句差异与规避方案
  • TRAE 完全指南:字节跳动的“AI 原生 IDE”进化论
  • tqdm.notebook 在 JupyterLab 4.x 中的 3 种配置方案与常见问题修复
  • 免费二维码修复工具终极指南:三步拯救损坏二维码
  • 3分钟永久告别IDM激活弹窗:开源脚本让下载管理无忧
  • GHelper终极指南:华硕笔记本性能控制神器完全解析
  • 龙芯3B6000平台GitLab Runner Docker执行器配置与避坑指南
  • 资源编号321_高德车机版 v9.5.0.600006 红绿灯显示优化版
  • (毕业必看)实测好用的AI论文软件,毕业党收藏备用
  • 无人机与机器人动力系统核心技术解析
  • acme.sh私钥加密存储:基于OpenSSL的自动化证书安全管理方案
  • 【监控与可观测性】08-PromQL查询语言速查:30个常用表达式