简介:这是一份面向过程工业领域师生与工程技术人员的教学课件,聚焦在难以建立精确数学模型时如何开展故障检测与诊断。内容以PCA为主线,系统讲解主元分析原理、Hotelling T2与SPE统计量的故障判定机制、数据标准化与主元个数选取等实操要点,并延伸覆盖PCR、PLS、CCA、FDA、HMM等常用方法,同时介绍针对非高斯、非线性特性的改进策略,如高斯混合模型与核密度估计,还涉及KPCA、ICA及仿真实验。课件特别提醒不同量纲下需做标准化处理、主元数目过小或过大对故障检测灵敏度的影响,帮助读者避开常见误用。资源为1个PPT文件,压缩包大小1.29MB,结构紧凑,章节安排便于课堂教学与自学。已有60人学习浏览,属于小范围高质量课件,适合需要系统梳理统计故障诊断知识框架、准备课件或开展技术培训的读者。
1. 多变量统计故障诊断方法:从 PCA 到 ICA 的完整链路
多变量统计故障诊断方法的核心价值,是让工程师在拿不到精确过程数学模型时,仍然能靠历史数据把故障检测做起来,这也是它在过程工业里被广泛使用的原因。这份教学课件把 PCA、PCR、PLS、CCA、FDA、HMM 这几类方法放在一条完整的知识链路上,重点讲了 PCA 的 T2/SPE 检测逻辑、数据标准化、主元个数选取,以及面对非高斯数据时的 ICA/GMM 改进路线,每一块都能直接对应到实际诊断流程中的某个环节。对刚入门过程监控的研究生,以及要给产线做数据驱动诊断的工程师来说,这是一份值得从头到尾推一遍的底稿。
课件本身没有给现成代码,但它把原理和实验框架写得足够完整。我按它的思路补了一套可运行的 Python 仿真流程,把参数怎么定、控制限怎么算、哪些环节容易翻车逐段拆开讲。你照着走一遍,就能把 PCA 故障检测的全流程跑通,也知道换到非高斯场景时该往哪个方向改。
2. 把 PCA 拆开看:主元子空间与残差子空间的"地盘"怎么分
主元分析最早由 Pearson 在 1901 年提出,Hotelling 在 1933 年做了改进。在过程监控领域,PCA 之所以受关注,不只是因为它能降维,更关键的是它把过程变量空间划分成了两个互补的子空间:主元子空间和残差子空间。每一组测量数据都可以投影到这两个子空间里,投影的位置和大小,就成了判断过程有没有出问题的依据。这一节把 PCA 的几何含义、两个核心统计量的分工讲清楚。
2.1 从协方差矩阵出发:主元分析到底在找什么
PCA 做的事情,本质上是对标准化后的数据矩阵求协方差矩阵,再对协方差矩阵做特征分解。设标准化后的数据矩阵为 $X \in \mathbb{R}^{n \times m}$,其协方差矩阵 $S = \frac{1}{n-1}X^TX$,对 $S$ 做特征分解得到特征向量 $p_1, p_2, \dots, p_m$ 和对应特征值 $\lambda_1 \geq \lambda_2 \geq \dots \geq \lambda_m$。特征值越大,说明数据在该特征向量方向上的方差越大,也就是这个方向携带的信息越多。
取前 $k$ 个特征向量组成负载矩阵 $P_k = [p_1, p_2, \dots, p_k]$,由它们张成的空间就是主元子空间;剩下的 $m-k$ 个方向张成残差子空间。这个划分的意义在于:正常工况下,过程变量的强相关性使得数据主要集中在一个低维流形上,这个流形就是主元子空间;一旦过程出现异常,比如传感器故障、物料泄漏、内部轴承劣化,测量数据会偏离原有的相关结构,这种偏离要么体现在主元子空间中投影幅度的异常增大,要么体现在残差子空间中投影分量显著变大。
课件里提到 PCA 能实现子空间识别法的功能,如系统辨识和故障识别,正是因为这种划分天然把"正常波动方向"和"异常方向"分开了。理解这一点,后面的 T2 和 SPE 就只是在这两个空间上分别做统计检验而已。
2.2 Hotelling T2:主元空间里的"能量计"
T2 统计量衡量的是新样本在主元子空间中的偏离程度,它的定义是标准得分平方和。写成公式就是:
$$T^2 = x^T P_k \Lambda_k^{-1} P_k^T x$$
其中 $\Lambda_k = \text{diag}(\lambda_1, \dots, \lambda_k)$ 是前 $k$ 个特征值构成的对角阵。除以特征值这一步很重要,它相当于按各主元方向的正常方差做了归一化,让每个方向上的偏离都以"多少个标准差"来衡量,而不是直接比较绝对幅值。
系统正常运行时,T2 应满足 $T^2 \leq T^2_{lim}$,控制限为:
$$T^2_{lim} = \frac{k(n-1)}{n-k} F_{\alpha}(k, n-k)$$
其中 $k$ 是保留的主元数,$n$ 是建模样本数,$\alpha$ 是置信度,通常取 0.99 或 0.95,$F_{\alpha}$ 是 F 分布的上限值。这个控制限的含义是:如果过程只发生主元方向上的正常波动,T2 超过该限值的概率只有 $1-\alpha$。所以一旦 T2 越限,可以认为主元空间里出现了正常模型解释不了的异常能量。
需要说明的是,T2 对沿主元方向的偏移敏感。如果故障方向与主元方向高度重合,比如某个关键变量的均值发生漂移,而这个变量在主元方向上有较大载荷,T2 会很快反映出来。但如果异常主要发生在变量间的相关关系被破坏的方向上,T2 未必灵敏,这时候要轮到 SPE 上场。
2.3 SPE 与贡献图:残差空间怎么盯、超限后怎么定位
SPE(平方预报误差)衡量的是新样本在主元模型之外的残差大小,计算公式为:
$$\text{SPE} = |x - \hat{x}|^2 = |(I - P_k P_k^T)x|^2$$
它可以理解为:这个采样点在多大程度上符合主元模型,残差越大,说明数据点里存在越多主元模型无法描述的结构。正常工况下,SPE 应满足 $\text{SPE} \leq \delta^2$,控制限通常用正态分布近似得到。课件里提到的 $\theta$ 参数和 $h_0$ 就是从残差协方差矩阵的特征值中计算的,思路是把 SPE 的分布用匹配前三阶矩的正态分布来近似,从而给出置信极限。
我一般会把 T2 和 SPE 画在同一张监控图上,任何一边超限都判为疑似故障。SPE 超限之后,下一步是定位变量,常见做法是画贡献图:计算每个变量对 SPE 的贡献量,贡献量最大的几个变量就是最可疑的故障源。比如在工业机器人内部轴承的振动监控里,SPE 突然越限,贡献图通常会指向振动能量最集中的那一两个测点。只凭 T2 或只凭 SPE 做判断,等于只看了半个过程,这也是后面避坑章节里专门要讲的问题。
3. 复现一套 PCA 故障检测流程:标准化、主元个数与仿真三步走
课件的第 4 章是仿真实验,但 PPT 里只有方法和结论,没有可执行的代码。这里我按它描述的流程,用 Python 补一套可以跑的仿真。你跟着走一遍,就能把 T2/SPE 控制图从训练到在线检测完整跑出来,之后换成自己现场的数据也只是改改数据加载部分。
3.1 数据标准化:均值和标准差要先冻结成常量
课件里特别强调了一个问题:矩阵 $X_{n \times m}$ 每一列对应一个测量变量,每一行对应一个样本。m 个测量变量的量纲和变化幅度可能相差许多倍,如果不做处理,协方差矩阵会被数值大的变量牵着走。标准化的公式很简单:
$$x_{std} = \frac{x - \mu}{\sigma}$$
其中 $\mu$ 是均值,$\sigma$ 是标准差。关键点在于:$\mu$ 和 $\sigma$ 必须来自正常工况的训练数据,并且一旦确定就固定下来。测试数据也要按照原始变量的均值和标准差进行标准化,而不是用测试集自己重新算。
import numpy as np from numpy.linalg import svd rng = np.random.default_rng(42) # 正常工况训练数据:3 个过程变量 n = 1000 x1 = rng.normal(0, 1, n) x2 = 0.7 * x1 + 0.3 * rng.normal(0, 1, n) x3 = -0.4 * x1 + 0.6 * rng.normal(0, 1, n) X_train = np.vstack([x1, x2, x3]).T # 标准化:先算均值/标准差,之后新样本也复用这一组 mu = X_train.mean(axis=0) sigma = X_train.std(axis=0, ddof=1) X_norm = (X_train - mu) / sigma print("均值:", mu.round(3), "标准差:", sigma.round(3))这段代码模拟的是典型流程变量场景:x1 是潜在的驱动变量,x2、x3 是它的线性组合加少量噪声,三者之间存在强相关关系,这正是适合用 PCA 监控的数据结构。ddof=1表示用样本标准差(分母 n-1),建模时保持这个设定,后续控制限计算才一致。
测试阶段必须用同一组 mu 和 sigma,这是新手最容易忽视的坑。如果每个新样本都减自己的均值,等于把缓慢漂移的信息也抹掉了,模型会认为漂移后的状态也是正常的。
提示:标准化参数在工程部署时属于模型的一部分,必须固化。测试数据的预处理只能用训练集的均值和标准差,不能用测试集本身重新计算。
3.2 主元个数:累计贡献率、Scree 检验与交叉验证
主元个数怎么定,直接决定故障监测效果。课件里指出:主元个数选得过小,残差子空间包含的方差太多,残差统计量的阈值偏大,小故障容易被淹没;选得太大,残差子空间信息太少,故障对残差的影响不明显,故障同样难被检测出来。可见这个参数不是拍脑袋定的。
常见的确定方法有百分比变化量测试、Scree 检验、平性分析法、PRESS 统计、主元贡献率法和重构故障偏差准则。实际工程里最常用的是累计贡献率(CPV)法:取前 k 个特征值之和占总特征值之和的比例达到 85% 或 90% 时的 k。Scree 检验则是画特征值下降曲线找拐点,拐点之后特征值下降趋于平缓,这些方向被认为是噪声主导的。
# 对标准化后的数据做 SVD,数值上比直接求协方差矩阵特征分解更稳定 U, s, Vt = svd(X_norm, full_matrices=False) eigenvals = s**2 / (n - 1) # 奇异值平方除以 n-1 即特征值 cpv = np.cumsum(eigenvals) / eigenvals.sum() for k in range(1, X_norm.shape[1] + 1): print(f"k={k}, 累计贡献率={cpv[k-1]:.3f}, 特征值={eigenvals[k-1]:.3f}")用 SVD 而不是直接对协方差矩阵做np.linalg.eig,是因为当变量间存在强相关时,协方差矩阵可能接近奇异,直接求特征分解容易有数值误差。SVD 的数值稳定性更好,特征值通过奇异值平方除以 n-1 换算得到。
| 方法 | 原理 | 适用场景 |
|---|---|---|
| 累计贡献率 | 前 k 个特征值占比达到阈值 | 快速初选,工程默认 |
| Scree 检验 | 特征值曲线拐点 | 直观判断,适合图形辅助 |
| 交叉验证 | 留出验证集比较误报率 | 对检测率有严格要求时 |
更严格的做法是交叉验证:固定模型后,把验证集数据输入,观察不同 k 下 T2/SPE 的误报率和漏报率,选两者平衡最好的 k。这个环节我一般会同时用累计贡献率和交叉验证,前者给初值,后者做最终确认,避免"凭感觉定主元个数"的玄学问题。
3.3 完整仿真:从训练模型到在线检测的一小段 Python
现在把主元个数、控制限计算、故障注入和在线检测串起来。下面的代码构建了一个完整的 PCA 监控流程:先用正常数据训练模型并计算控制限,然后在测试集后半段注入一个偏移故障,观察 T2 和 SPE 谁先报警。
from scipy import stats k = 2 # 假设前 2 个主元累计贡献率超过 85% P = Vt[:k].T # 负载矩阵,每列为一个主元方向 Lambda = np.diag(eigenvals[:k]) # 前 k 个特征值对角阵 def t2_stat(x): score = P.T @ x return float(score @ np.linalg.inv(Lambda) @ score) def spe_stat(x): r = x - P @ P.T @ x return float(r @ r) # 训练集上的两个统计量 t2_train = np.array([t2_stat(x) for x in X_norm]) spe_train = np.array([spe_stat(x) for x in X_norm]) # 控制限:T2 用 F 分布,SPE 用训练集 99% 分位数做保守估计 alpha = 0.99 T2_lim = k * (n - 1) / (n - k) * stats.f.ppf(alpha, k, n - k) SPE_lim = np.quantile(spe_train, 0.99) print(f"T2控制限={T2_lim:.2f}, SPE控制限={SPE_lim:.2f}") # 注入小故障:第 3 个变量在 500 样本后偏移 0.5 倍标准差 X_test = X_train.copy() X_test[500:, 2] += 0.5 * sigma[2] X_test_norm = (X_test - mu) / sigma T2_test = np.array([t2_stat(x) for x in X_test_norm]) SPE_test = np.array([spe_stat(x) for x in X_test_norm]) detect = (T2_test > T2_lim) | (SPE_test > SPE_lim) print("故障段检出率:", detect[500:].mean().round(3))这里的k=2由上一节的贡献率计算决定,alpha=0.99对应 1% 的误报率,是过程监控里比较常见的设定。SPE 控制限用训练集的 99% 分位数,是工程上简单且保守的替代方案,课件里的正态近似公式在数据量足够大时与它接近,但后者在残差分布明显非高斯时更可靠。
我实际跑下来,这种偏离原相关关系的小故障,SPE 通常比 T2 更灵敏,因为故障方向主要落在残差子空间。你可以把0.5 * sigma[2]改成 0.2、0.8 和 1.5,看看两个统计量的报警延迟和检出率是怎么变化的。这一步对理解统计量的分工很有帮助。
4. 数据不"听话"怎么办:非高斯场景下的 ICA 与 GMM 改进路线
PCA 能用的前提是有条件的,课件明确列出了四条假设:各变量服从高斯正态分布、过程是线性的、过程处于稳态不存在时序自相关性、过程参数不随时间变化。流程工业里的对象往往一条都满足不了,尤其是非高斯性,会让 T2/SPE 的控制限严重失真。这一节讲清楚为什么假设会失效,以及 ICA 和 GMM 这两条主流改进路线各自怎么走。
4.1 传统 PCA 的四个假设,产线上常常一条都不满足
先看高斯假设。工业过程的测量数据,比如流量、压力、振动特征,往往存在偏态分布或重尾现象。课件里说得很直接:实际工业过程观测到的数据分布事先并不知道,不服从多元正态分布时再硬套传统 PCA,会造成故障的严重误报和漏报。原因在于 T2 和 SPE 的控制限都是从正态分布或 F 分布推导的,数据分布偏了,控制限自然不对。
再看其余三条:过程非线性意味着主元子空间不可能用一组线性方向完全描述;过程处于稳态意味着变量均值不随时间漂移,但实际装置有启停、负荷切换和缓慢老化;过程参数不随时间变化更是理想情况,催化剂活性下降、换热器结垢、轴承磨损都是参数缓变过程。四条假设叠在一起,传统 PCA 在现场很难直接拿到理想的检测效果。
对非高斯性,课件给了两条解决思路:一是用核密度估计从历史数据直接估计统计量的分布进而确定控制限;二是引入高斯混合模型去拟合数据中的多模式结构。还有一条更激进的思路是把 ICA 引入过程监控,利用信号的高阶统计信息分解独立成分,避免高维概率密度估计。下面分别展开。
4.2 ICA:用高阶统计量挤出不相关的非高斯成分
ICA 最早由 Jutten 和 Herault 提出,Hyvärinen 后来改进了算法(FastICA),增强了鲁棒性和训练速度。ICA 的出发点与 PCA 不同:它假设观测信号是若干独立源的线性混合,目标是利用高阶统计量把混合信号分解成相互独立的非高斯成分。由于各成分满足独立性条件,联合概率密度等于各成分概率密度之积,这样就绕开了高维概率密度估计的难题。
在过程监控里,ICA 的典型用法是:先对标准化后的数据进行白化,再用 FastICA 迭代出独立成分,然后在独立成分空间里构造监控统计量。课件里提到 Kan 等人实现了基于 ICA 的故障检测,Lee 等人用贡献图做故障隔离,Lin 和 Zhang 把 ICA 与小波结合构造滤波器来降低传感器不足的影响。动态 ICA 也被用于废水处理过程的监控,这类场景信号非高斯性强,传统 PCA 表现不佳。
from sklearn.decomposition import FastICA # 构造两个非高斯源:t 分布和均匀分布,模拟非高斯过程变量 s1 = rng.standard_t(5, n) s2 = rng.uniform(-2, 2, n) X_mix = np.column_stack([ 0.6 * s1 + 0.4 * s2, -0.3 * s1 + 0.8 * s2, s1 - 0.5 * s2 ]) ica = FastICA(n_components=2, max_iter=500, random_state=42) S_est = ica.fit_transform(X_mix) # 估计出的独立成分 print("独立成分相关系数矩阵:\n", np.corrcoef(S_est.T).round(3))逻辑上,FastICA 通过最大化输出成分的非高斯性测度(如负熵)来逼近独立源。n_components是要保留的独立成分数,对应 ICA 子空间的维度;max_iter设到 500 是为了避免数据规模大时迭代不收敛。与 PCA 相比,ICA 对非高斯信息更敏感,但迭代求解的稳定性依赖白化预处理,实际使用中我一般会先做 PCA 白化再跑 ICA,这与课件里提到的鲁棒性和训练速度改进是一致的。
4.3 GMM 与核密度估计:两条绕开维数灾难的路
先看核密度估计这条路。思路是首先用 PCA 对过程数据降维,然后用核密度估计算法估计隐变量的分布,再据此确定控制限。课件指出它的主要缺点:核密度估计只对低维数据有效(2 到 3 维),数据维数上升时必须有大量数据才能得到较好的概率密度估计结果,也就是"维数灾难",同时计算量也大大增加。
另一种做法是高斯混合模型。GMM 用多个高斯分量去逼近数据的真实分布,模型的训练采用期望最大(EM)算法实现。每个高斯模式对应一个聚类,模式内数据分布近似服从正态分布,所以可以继续套用传统 PCA 的 T2/SPE 检测逻辑。课件里提到的改进是 Thissen 的做法——当数据模式信息不充分时,GMM 难以建立,他不再在各个类上分别用 T2 统计量,而是只用一个总体密度参数,解决了训练不充分的问题。
from scipy.stats import gaussian_kde # 对训练集的 SPE 统计量做核密度估计,取 99% 分位作为控制限 kde = gaussian_kde(spe_train) grid = np.linspace(0, np.quantile(spe_train, 0.995), 200) spe_cdf = np.array([kde.integrate_box_1d(-np.inf, g) for g in grid]) SPE_kde_lim = grid[np.argmin(abs(spe_cdf - 0.99))] print("KDE控制限:", SPE_kde_lim.round(3), " 分位数法:", SPE_lim.round(3))这里的 gaussian_kde 带宽由 Scott 规则自动选择,适合单峰但偏斜的分布。integrate_box_1d用于计算累积分布,反查 99% 分位点得到控制限。当训练样本量太小时,自动带宽会不稳定,可以手动设置bw_method调整平滑程度。
在加工产线、工业机器人内部轴承这类场景中,振动信号往往是非高斯、多模态的——启停阶段、稳定运行阶段、不同负载下的统计特性完全不同。我的做法是先按工况划段,对每个工况段单独建 PCA 或 ICA 模型,必要时用 GMM 自动聚类划分模式,再分别计算控制限。直接把所有工况数据揉在一起做全局 PCA,误报率通常高到没法用。
5. 避坑与排查:PCA 故障检测最常翻车的五个现场
这一章写的是我在复现这套流程过程中真实踩过的坑,每条按现象、原因、解决三个角度讲。这些坑在教材和课件里几乎不会提,但现场调试时迟早会遇到。
5.1 误区一:T2 天天报警,操作工直接把趋势图关掉
现象:模型在正常工况下频繁越限,报警率远超设定的 1% 水平,现场人员对报警逐渐麻木,最后干脆关掉趋势图不看。
原因:建模数据跨越了多个负荷工况,PCA 的稳态假设被破坏。负荷切换在变量均值上留下系统性偏移,这个偏移映射到主元空间后,在 T2 上表现为持续超限,而不是瞬时故障尖峰。本质上是模型把工况变化误当成了故障。
解决:先做工况识别,按负荷区间分段建模。或者引入 GMM 先对历史数据聚类,再对各模式分别训练 PCA 模型。更省事的办法是把工况切换点标记出来,在切换后的稳态段重新对齐均值再标准化。我在现场通常先画一张主元得分散点图,看正常数据是否明显分成几簇,如果分簇明显,就别再用单一 PCA 模型。
5.2 误区二:测试样本用"自己的"均值和方差做标准化
现象:仿真时检测率很好,上线后前几十个样本集体误报,模型像是失灵了。
原因:有些实现里把每个新样本都减去自己所在数据段的均值再做标准化,相当于每一步都在重新定义"正常"的基准。缓慢漂移被抹掉,模型永远看不到漂移,自然不报警。等到漂移幅度超过控制限又被瞬时拉回,产生大量误报。
解决:标准化参数在模型训练阶段就固定为常量,部署阶段只做减法和除法,不重新估计均值和方差。这与 3.1 节的处理方式一致:训练集算出的 mu 和 sigma 保存到模型文件里,新样本进来直接用。
5.3 误区三:主元个数贪多,小故障反而不报警
现象:累计贡献率选到 95%,SPE 控制限几乎不越限,T2 也平平,但现场确实有故障。
原因:主元个数取得太大,残差子空间被压缩到只剩噪声方向的微小方差,故障方向上的偏离被吸收进主元空间,SPE 失去灵敏度。课件里说的"主元数目太大,故障对残差影响不大"就是这个意思。反而是在某个方向上方差小、但故障敏感的方向被当成了主元空间的一部分,信号被抹平。
解决:不要只依赖累计贡献率。交叉验证是更稳的做法:在训练集中留出一段正常数据,注入不同幅值的故障,观察不同 k 下的检出率,选检出率最高且误报率可接受的 k。如果有故障历史数据,用它做离线验证比任何理论准则都直接。
5.4 误区四:SPE 控制限套正态公式,算出来离谱
现象:按课件里的正态近似公式算出的 SPE 控制限比训练集里 SPE 的最大值还小,模型在正常数据上都疯狂报警。
原因:正态近似成立的前提是残差方向上的方差均匀且相互独立,实际残差分布往往非高斯、异方差,尤其是变量量纲差异大或数据本身偏态明显时,近似失效得非常快。公式没算错,是前提不成立。
解决:改用训练集 SPE 的 99% 分位数作为控制限,或者用核密度估计从历史 SPE 数据中直接求分位点,不依赖分布假设。等线上数据积累到一定量之后,再回头校核控制限是否合理。这个方法虽然不如正态公式"理论干净",但在工程上实用得多。
5.5 误区五:只盯 T2 不看 SPE,故障方向不同就瞎
现象:传感器偏置故障能查出来,但设备劣化导致的相关系数变化查不出来,反过来也有。
原因:不同故障落入不同的子空间。沿主元方向的均值偏移主要由 T2 反映,破坏变量间相关结构的异常主要由 SPE 反映。只用一个统计量,等于丢掉了一半的故障信息。课件里把 T2 和 SPE 并列讲,逻辑正是如此。
解决:T2 和 SPE 同时监控,任何一边超限都触发报警。报警之后用贡献图定位变量,看是单个变量贡献突出还是多个变量共同贡献。前者通常指向传感器或局部故障,后者往往意味着过程相关结构整体变化,需要从工艺条件变化的角度排查。
6. 走出 PCA:PCR、PLS、CCA、FDA、HMM 的选型边界与一套验证技巧
6.1 一张表看清五类方法的适用边界
课件把 PCA、PCR、PLS、CCA 归为基于投影的统计降维技术,FDA 和 HMM 归为统计模式识别技术,前者常用于故障的检测与隔离,后者可用于故障的诊断。实际选型时,这张分类就是最好的起点。
| 方法 | 本质 | 适合场景 | 不适合场景 |
|---|---|---|---|
| PCA | 无监督降维 | 故障检测,T2/SPE 监控 | 强非线性、非高斯数据 |
| PCR | 降维后回归 | 变量高度相关时的预测建模 | 因变量方向被 PCA 丢弃时 |
| PLS | 监督降维 | 自变量与因变量强相关 | 需要清晰物理解释的场合 |
| CCA | 两组变量相关分析 | 多变量关联分析 | 单变量过程监控 |
| FDA | 有监督分类 | 已知故障类别的模式识别 | 缺乏故障标签数据时 |
| HMM | 时序模式识别 | 动态过程、状态转移诊断 | 训练样本量小 |
PCB 是 PCA 加回归的组合,它在预测场景比纯 PCA 有用;PLS 在建模时同时考虑自变量和因变量,比 PCR 更能保留与质量变量相关的方向;FDA 需要已知故障类别标签,适合做故障分类而不是检测;HMM 能捕捉状态转移,适合间歇过程和动态故障诊断,但训练数据不够时容易过拟合。
6.2 一个值得养成的验证习惯:离线仿真别只看检出率
最后分享一个我自己的验证习惯:新模型定下来之前,做一轮"故障幅值扫描"。具体做法是在正常数据上,从 0.1 倍标准差开始逐步加大偏移量,对每个变量都做一遍,画出 T2 和 SPE 的检出率随故障幅值变化的曲线。这样能看到模型对哪类故障迟钝、对小故障的灵敏度边界在哪里。
注意:这一步应该在确定主元个数之前做,而不是模型定完再验证。扫描结果能直接告诉你哪个统计量对哪种故障更敏感,进而反向调整 k 的取值。
我曾为一个压缩机组的监控模型只按默认的 85% 累计贡献率定了主元个数,上线后轴承早期故障被 SPE 漏掉。后来做幅值扫描才发现,故障方向主要落在被忽略的第 4 个主元方向上,贡献率虽然不高,但恰好携带了故障区分度最高的信息。从那以后,我每次定主元个数都会先做一轮幅值扫描再固化参数,这个习惯帮我避开过好几次类似的漏报。希望帮到你。
本文还有配套的精品资源,点击获取