第3章 数据采集与预处理:传感器与数据采集系统、数据清洗、数据标准化与归一化

大家好,我是你们的老朋友。今天咱们聊聊工艺优化里最基础、也最容易被忽视的一环——数据采集与预处理。

说实话,我见过太多项目,算法模型选得再好,最后却栽在了数据上。为什么?因为工厂里的数据,远没有教科书上那么干净。你想想看,传感器会漂移,信号会受干扰,采集系统偶尔抽风,这都是家常便饭。

所以,这一章我带你走一遍数据从“原始信号”到“可用数据”的全流程。说白了,就是教你怎么把一堆“垃圾”变成“黄金”。

3.1 传感器与数据采集系统

传感器是什么?它就是工艺系统的“五官”。温度、压力、流量、振动……这些物理量,都得靠传感器转成电信号,我们才能读懂。

我个人习惯把数据采集系统分成三层:

  • 感知层:传感器本体。比如热电偶、压力变送器、加速度计。
  • 传输层:信号调理、模数转换(ADC)、现场总线(如Modbus、Profibus)。
  • 存储层:PLC、DCS、或者边缘计算网关,最终落到数据库里。

这里有个坑,我必须要提醒你。我在项目中遇到过,一个车间的温度传感器用的是PT100铂电阻,另一个车间用的是K型热电偶。两个传感器精度不同,响应时间也不同。结果数据融合的时候,温度曲线出现了诡异的“锯齿”。

⚠️ 注意: 不同品牌、不同型号的传感器,其采样频率、量程、精度可能完全不同。在数据采集阶段,务必记录每个传感器的元数据(型号、量程、校准日期)。否则后期数据清洗会非常痛苦。

嗯,这里还要提一下采样频率。根据奈奎斯特定理,采样频率至少是信号最高频率的两倍。但实际工程中,我建议取5-10倍。比如一个温度变化周期是10秒,那采样频率至少2秒一次,保险起见我通常设到0.5秒一次。

3.2 数据清洗:缺失值与异常值处理

数据进了系统,你以为就万事大吉了?太天真了。原始数据里,缺失值和异常值就像地雷一样,随时可能炸掉你的模型。

3.2.1 缺失值处理

缺失值的原因很多:传感器掉线、通信中断、存储故障……我见过最离谱的一次,是因为车间里一只老鼠咬断了网线,导致一整天的数据全是空值。

处理缺失值,常用的方法有这几种:

方法 适用场景 我的建议
删除法 缺失比例极低(<5%) 简单粗暴,但会丢失信息
均值/中位数填充 数据分布稳定,无明显趋势 快速,但会降低方差
前向/后向填充 时间序列数据,变化缓慢 我常用,比如温度、压力
插值法 数据有规律,如线性或多项式 精度较高,但计算量大
模型预测填充 缺失值较多,且与其他特征相关 最后手段,慎用

举个例子,假设你有一段温度数据,第10秒和第11秒缺失了:

# 前向填充示例(Python伪代码)
data['temperature'].fillna(method='ffill', inplace=True)
# 结果:第10秒和第11秒的值,等于第9秒的值
💡 小技巧: 我曾经处理过一个化工反应釜的数据,温度缺失了整整2小时。我用了线性插值,但后来发现那2小时正好是催化剂加入阶段,温度本应剧烈上升。插值出来的“平滑曲线”完全掩盖了真实工艺特征。所以,一定要结合工艺背景来选方法

3.2.2 异常值处理

异常值,就是那些“离谱”的数据点。比如一个压力传感器,正常范围是0-10MPa,突然蹦出一个100MPa。这明显是传感器坏了,不是工艺真的发生了爆炸。

怎么识别异常值?我常用的方法:

  • 3σ原则:数据服从正态分布时,超过均值±3倍标准差的值,视为异常。
  • 箱线图法:超过四分位距(IQR)1.5倍的值,视为异常。这个方法对非正态分布更鲁棒。
  • 领域知识法:比如你知道某个工艺参数不可能超过某个物理极限,那超过的直接干掉。

处理异常值,我一般分三步走:

  1. 标记:先别急着删,把异常值标记出来,看看是不是有规律。
  2. 分析:是传感器故障?还是工艺真的出现了异常工况?
  3. 处理:如果是传感器问题,直接删除或填充;如果是真实异常工况,保留并单独建模。
⚠️ 警告: 我曾经犯过一个错误。在一条生产线上,我直接用3σ原则删掉了所有“异常”数据。结果模型训练出来,预测精度很高,但上线后一塌糊涂。后来才发现,那些“异常值”其实是设备开始磨损的早期信号。我把它们删了,等于把故障预警的信息也丢了。异常值不一定是“坏”数据,它可能是宝藏。

3.3 数据标准化与归一化

数据清洗完了,接下来就是“对齐”工作。为什么需要标准化和归一化?

你想想看,温度是0-100℃,压力是0-10MPa,流量是0-1000m³/h。这三个特征的量纲完全不同。如果你直接拿它们去训练模型,那个“流量”特征因为数值大,会主导模型的学习,而“压力”特征几乎被忽略。这显然不合理。

标准化和归一化,就是把不同量纲的数据,映射到同一个尺度上。

3.3.1 归一化(Min-Max Scaling)

把数据缩放到[0, 1]区间。公式很简单:

X_norm = (X - X_min) / (X_max - X_min)

适合场景:数据有明确的上下界,比如温度、压力、液位。我习惯在神经网络模型里用归一化,因为激活函数(如Sigmoid)对输入范围敏感。

3.3.2 标准化(Z-score Scaling)

把数据变成均值为0,标准差为1的分布。公式:

X_std = (X - μ) / σ

适合场景:数据分布近似正态,或者有异常值存在。标准化对异常值的鲁棒性比归一化好。我个人在回归模型、SVM、PCA里更喜欢用标准化。

方法 输出范围 对异常值敏感度 常用模型
归一化 [0, 1] 神经网络、KNN
标准化 无固定范围 线性回归、SVM、PCA
💡 我的习惯: 如果你不确定用哪个,先试试标准化。因为标准化不依赖数据的最大值和最小值,受异常值影响小。而且很多算法(如梯度下降)在标准化后的数据上收敛更快。

3.4 本章知识体系

说了这么多,我画了一张图,帮你把这一章的核心逻辑串起来。你看一眼就明白了:

数据采集与预处理核心流程 传感器与采集系统 数据清洗 标准化与归一化 缺失值处理 异常值处理 归一化 标准化 最终目标:干净、一致、可用的高质量数据 → 输入到工艺优化模型 ←

这张图很直白。从左到右,数据从传感器出来,经过清洗(去掉脏数据),再经过标准化(统一尺度),最后才能喂给模型。每一步都不可或缺。

好了,这一章的内容就到这里。数据预处理是个细致活,急不得。你只要记住一句话:垃圾进,垃圾出(Garbage In, Garbage Out)。把数据搞干净了,你的模型就成功了一半。


专注资料整理