“标签”(Label)是机器学习中最基础、也最容易混淆的概念之一。
一、什么是“标签”?(Label)
标签 = 正确答案
它是你希望模型最终能预测出来的目标值。
举个生活化的例子:
- 你给模型看一张猫的照片 → 标签是 “猫”
- 你给模型一组血压、心率数据 → 标签是 “是否患病(是/否)”
在工业传感器场景中:
- 你输入过去10秒的温度、振动、电流数据 →
- 如果做异常检测,标签可能是:
正常或异常 - 如果做RUL预测,标签可能是:
剩余还能运行 120 小时
- 如果做异常检测,标签可能是:
二、标签在不同任务中的形式
1.分类任务(Classification)→ 标签是类别
| 任务 | 输入(特征) | 标签(Label) |
|---|---|---|
| 故障检测 | [温度=85, 振动=3.2, ...] | "正常"或"故障" |
| 故障类型识别 | [压力=10, 噪声=60dB, ...] | "轴承磨损"、"电机过热"、"正常" |
🔹 标签通常是字符串或整数(如 0=正常,1=故障)
2.回归任务(Regression)→ 标签是连续数值
| 任务 | 输入(特征) | 标签(Label) |
|---|---|---|
| RUL 预测 | 过去50个时间步的传感器数据 | 127.5(小时) |
| 温度预测 | 当前工况参数 | 92.3(℃) |
🔹 标签是一个实数(float)
3.无监督学习→没有标签!
比如:
- 你只有一堆传感器数据,但不知道哪些是故障(也没人标记过)
- 这时候你不能用分类/回归,只能用无监督方法(如 Isolation Forest、K-Means)
- 模型自己“猜”哪些点不正常 → 这叫异常检测(Anomaly Detection)
✅ 所以:“有没有标签”决定了你能不能用监督学习!
三、在你的传感器场景中,标签从哪里来?
这是关键!标签不是凭空产生的,通常来自:
✅ 1.人工标注
- 工程师在设备故障后回溯数据,标记“从哪一刻开始算故障”
- 成本高,但最准确
✅ 2.系统日志 / 报警记录
- 设备自带故障报警信号(如 PLC 输出
error_code=5) - 可自动对齐时间戳,生成标签
✅ 3.间接定义
- 比如:当某个传感器值 > 阈值(如温度 > 100℃)→ 视为“异常”
- 虽然不是真实故障,但可作为代理标签(proxy label)
✅ 4.RUL 标签的构造方法
假设你知道设备在第 200 小时彻底失效:
- 第 190 小时的数据 → RUL 标签 = 10
- 第 180 小时的数据 → RUL 标签 = 20
- ...
- 第 0 小时(初始) → RUL 标签 = 200
📌 这种标签需要完整的寿命周期数据(从健康到失效)
四、有标签 vs 无标签 —— 如何选择方法?
| 场景 | 是否有标签? | 推荐方法 |
|---|---|---|
| 有历史故障记录 + 时间戳 | ✅ 有 | LightGBM 分类 / LSTM 回归 |
| 只有正常运行数据,从未记录故障 | ❌ 无 | Isolation Forest、Autoencoder 异常检测 |
| 有部分故障数据(很少) | ⚠️ 少量 | 半监督学习、One-Class Classification |
五、代码示例:带标签 vs 不带标签
1.有标签(监督学习)
# X: 传感器特征 (n_samples, n_features) # y: 标签,0=正常,1=故障 X = [[85, 3.2], [90, 4.1], [70, 1.0], ...] y = [1, 1, 0, ...] # 用 LightGBM 训练 from lightgbm import LGBMClassifier model = LGBMClassifier() model.fit(X, y) # 注意:这里传入了 y(标签)2.无标签(无监督)
# 只有 X,没有 y X = [[85, 3.2], [90, 4.1], [70, 1.0], ...] # 用 Isolation Forest from sklearn.ensemble import IsolationForest model = IsolationForest() model.fit(X) # 不需要 y! preds = model.predict(X) # 输出 1(正常)或 -1(异常)总结一句话:
标签就是“标准答案”——
有答案就教模型学(监督学习),
没答案就让模型自己找规律(无监督学习)。
在工业预测性维护中,获取高质量标签往往是最大难点。很多项目前期都在解决“如何定义和获取标签”的问题。