4. 感知层-数据处理:数据清洗、归一化与特征工程

大家好,我是老张。今天咱们聊聊感知层里最磨人、但也最有意思的一环——数据处理。

说实话,很多刚入行的朋友觉得传感器数据拿回来就能直接用。我当年也这么想,结果第一次做风电项目就被现实狠狠教育了一顿。你想想看,风机在野外风吹日晒,传感器时不时抽风,通讯偶尔断链,拿回来的数据要是直接扔进模型,那结果基本就是灾难。

所以,数据处理不是锦上添花,是生死攸关。

4.1 数据清洗:把脏数据挡在门外

数据清洗,说白了就是给数据“洗澡”。我习惯把它分成两步走:异常值剔除和缺失值填充。

4.1.1 异常值剔除

异常值是什么?就是那些明显不合逻辑的数据点。比如风速传感器报了个-5m/s,或者发电机功率突然飙到10MW——这明显是传感器抽风了。

我在项目中遇到过最离谱的一次,某台风机连续三天报出“转速5000转/分”的数据。要知道,主流风机额定转速也就1500转左右。后来一查,是编码器线缆被老鼠咬断了。

常用的异常值检测方法有几种:

  • 3σ原则:数据落在均值±3倍标准差之外,就认为是异常。简单粗暴,适合正态分布的数据。
  • 箱线图法:用四分位数来界定异常。我个人更推荐这个,因为它不受极端值影响。
  • 领域规则:比如风速不能为负,功率不能超过额定值1.2倍。这种规则虽然简单,但往往最管用。

核心原则:宁可漏掉一个异常,也别误杀一个正常数据。因为误删的数据点,你永远补不回来。

4.1.2 缺失值填充

缺失值更常见。通讯中断、传感器故障、存储异常,都可能导致数据缺失。我见过最夸张的一个项目,某台风机一整天的数据全是NaN。

填充方法我按优先级排序:

  1. 前向填充:用上一个有效值填充。适合短时间缺失,比如几秒钟的数据断点。
  2. 线性插值:用前后两个有效值做线性拟合。适合几分钟级别的缺失。
  3. 模型预测:用其他相关变量来预测缺失值。比如用风速预测功率。这个方法最准,但计算量也最大。

注意:千万不要用均值填充!我曾经见过一个团队,把所有缺失值都填成平均值,结果模型训练出来完全是个“傻子”——它学会了预测平均值。

4.2 数据归一化与标准化

这一步很多人容易搞混。我简单说清楚:

  • 归一化:把数据缩放到[0,1]区间。公式是 (x - min) / (max - min)。适合数据分布比较均匀的情况。
  • 标准化:把数据变成均值为0、标准差为1的分布。公式是 (x - mean) / std。适合数据有异常值的情况。

我个人习惯:如果后续要用神经网络,优先用标准化。因为标准化对异常值不那么敏感。如果是做距离相关的算法(比如KNN),那就用归一化。

举个例子,风速和功率的量级差很多。风速可能是0-25m/s,功率可能是0-2000kW。如果不做归一化,模型会天然认为“功率更重要”,因为它的数值大。这显然不对。

# 标准化示例代码
from sklearn.preprocessing import StandardScaler

scaler = StandardScaler()
wind_speed_scaled = scaler.fit_transform(wind_speed.reshape(-1, 1))

4.3 特征工程:从数据中挖金子

特征工程,说白了就是“变废为宝”。原始数据往往信息密度低,我们需要从中提取出真正有用的特征。

4.3.1 时域特征

时域特征,就是直接从时间序列里算出来的统计量。我常用的有:

特征名称 计算公式 物理意义
均值 μ = (1/n)Σxᵢ 信号的直流分量
方差 σ² = (1/n)Σ(xᵢ-μ)² 信号的波动程度
峰值因子 C = max(|x|) / RMS 信号是否有冲击
峭度 K = (1/n)Σ((xᵢ-μ)/σ)⁴ 信号分布的尖锐程度

我记得有一次做齿轮箱故障诊断,就是靠峭度这个特征发现了早期裂纹。正常齿轮箱的峭度在3左右,那个故障箱的峭度飙到了8。嗯,这就是特征工程的价值。

4.3.2 频域特征

频域特征,就是把信号从时间域变换到频率域。最常用的工具就是FFT(快速傅里叶变换)。

为什么要做频域分析?因为很多故障在时域里看不出来,但在频域里一目了然。比如轴承故障,会在特定频率上出现能量峰值。

我常用的频域特征:

  • 频谱峰值:能量最大的频率点
  • 重心频率:频谱的能量重心位置
  • 频带能量:特定频段内的能量总和

小技巧:做FFT之前,一定要先做去趋势和加窗处理。不然频谱泄露会让你怀疑人生。我刚开始做的时候,就因为没加窗,频谱图看起来像一团乱麻。

4.4 本章知识体系

下面这张图,是我自己梳理的数据处理流程。你看一遍,基本就清楚整个链路了。

感知层数据处理流程 原始传感器数据 数据清洗 异常值剔除 + 缺失值填充 归一化与标准化 消除量纲影响 特征工程 时域特征(均值、方差等) 频域特征(FFT、频谱等) 高质量特征数据 → 模型训练

你看,整个流程其实不复杂。但每一步都有坑。数据清洗做不好,后面全是白费。归一化做不对,模型训练可能不收敛。特征工程做不好,模型精度上不去。

我个人建议:在实际项目中,先把数据清洗和归一化做好,再花时间琢磨特征工程。因为前两步是基础,基础不牢,地动山摇。

一句话总结:数据处理不是体力活,是技术活。你花在数据上的每一分钟,都会在模型精度上得到回报。

专注资料整理