ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

基于Wiener过程的RUL剩余寿命预测:原理、推导与Matlab完整实现

基于Wiener过程的RUL剩余寿命预测:原理、推导与Matlab完整实现 简介剩余使用寿命预测是设备健康管理与预测性维护领域的核心问题其目标是在设备退化过程中动态评估其距失效阈值的时间。随机过程模型因能同时刻画退化趋势与随机波动并提供寿命的概率分布成为工程中兼顾机理与数据的高性价比方案。Wiener过程作为典型的随机退化建模工具通过漂移项与扩散项分别表征平均退化速率与不确定性结合首达时间理论可解析推导出剩余寿命的逆高斯分布。极大似然估计法可简便估计模型参数使寿命点预测与区间预测均可计算。该方法适用于轴承、锂电池、LED光源等具有渐进退化特征的部件在工业现场数据驱动与机理建模之间架起实用桥梁。本文从Wiener过程的数学本质出发推导RUL分布公式并给出完整的Matlab仿真、参数估计、滚动预测及调参避坑指南帮助工程人员快速落地一套可运行的剩余寿命预测方案。 搞设备健康管理这些年我自己最大的感受是真正能落地的寿命预测方法往往不是那些结构极其复杂的深度模型而是数学机理清晰、参数含义明确、工程上能闭环的经典模型。基于Wiener过程的剩余使用寿命RUL预测恰好就是这类方法中的代表。这篇博文我打算从原理、推导、Matlab实现到调参避坑完整拆解一套可以直接跑通的项目源码和数据。无论你是在校硕博做PHM课题还是在工业现场做预测性维护这个模型都值得认真吃透——它既能处理带趋势的随机退化过程又能给出寿命的点估计和区间估计而且代码量控制在几百行以内对工程部署非常友好。1. 项目整体思路RUL预测到底在解决什么问题1.1 从坏了再修到提前预测先看这个项目解决的实际问题。旋转机械轴承、锂电池、LED光源、电容器这类设备/部件失效过程通常不是瞬间发生的而是伴随着某种可测物理量的渐进退化轴承的振动幅值逐渐增大电池容量逐渐衰减LED光通量逐渐下降。如果有一个传感器能持续记录退化量那么我们能回答的核心问题就是还要多久这个量会超过失效阈值这个还要多久就是剩余使用寿命Remaining Useful Life, RUL。它和可靠性寿命等概念有本质区别RUL是动态的随着观测数据的积累不断更新。举个例子一块锂电池当前容量是额定容量的85%退役标准是80%。电压、温度、循环次数都在影响容量衰减的速率。如果简单地用当前85%除以初始100%再乘设计寿命来估算剩余寿命误差会很大——因为衰减路径不是线性的而且每块电池的制造偏差也不小。Wiener过程模型的价值就在于它把退化路径建模为确定趋势 随机波动的组合既抓住了平均退化速度也量化了不确定性最后输出的是一个完整的剩余寿命概率分布而不仅仅是一个拍脑袋的数字。1.2 为什么选用Wiener过程来建模退化很多做RUL预测的初学者第一反应是直接用回归模型拟合退化曲线比如指数衰减或线性拟合外推到阈值点就算出寿命了。这个思路不是不行但它有一个致命的盲区——它只给出一条平均退化轨迹没有建模样本间的随机波动更没有给出寿命预测的置信区间。工程上做维修决策时你除了需要知道估计还能用100个小时更需要知道这个估计有多可靠。Wiener过程维纳过程的建模思路完全不同。它假设退化量 (X(t)) 满足随机微分方程[ dX(t) \mu dt \sigma dB(t) ]其中 (B(t)) 是标准布朗运动(\mu) 是漂移系数(\sigma) 是扩散系数。这个方程可以直观理解为(\mu dt)确定性趋势项退化量在单位时间里平均增加 (\mu)(\sigma dB(t))随机波动项每次观测都会叠加一个服从正态分布的随机扰动这两个参数恰好对应工程中的平均退化速率和退化过程的不确定性物理含义非常清晰。1.3 各主流RUL预测方法横向对比我在实际项目中接触过不少RUL预测方案简单做个对比方法代表模型优势劣势适用场景基于物理模型Paris裂纹扩展、Arrhenius方程机理清晰、外推能力强需要深入理解失效机理材料疲劳、单点退化机理明确基于随机过程Wiener过程、Gamma过程、Inverse Gaussian过程同时给出点估计与区间估计、不确定性量化自然线性漂移假设约束较强退化轨迹近似单调或带波动基于数据驱动LSTM、GRU、Transformer、CNN无需机理、拟合能力强训练成本高、需大量失效数据、不确定性量化困难传感器数据丰富、非线性强退化Wiener过程在其中的定位很明确它介于物理模型与数据驱动之间不需要深挖失效机制也能建模随机波动同时数学上可解析推导寿命分布。对大多数工程场景来说它是性价比最高的起点。2. Wiener过程模型的核心原理与RUL推导2.1 Wiener过程的数学本质跑步机上的随机游走Wiener过程的离散化形式对写代码非常重要。当采样间隔为 (\Delta t) 时[ X_k X_{k-1} \mu \Delta t \sigma \sqrt{\Delta t} \cdot \varepsilon_k ]其中 (\varepsilon_k \sim N(0,1)) 是标准正态随机数。这里有一个非常关键的细节也是初学者最容易写错的地方随机项的方差与步长成正比。也就是说随机扰动是 (\sigma \sqrt{\Delta t}) 而不是 (\sigma \Delta t)。为什么因为布朗运动的独立增量方差是 (\text{Var}[B(t\Delta t)-B(t)] \Delta t)标准差就是 (\sqrt{\Delta t})。如果代码里写成sigma * dt * randn那么步长细分时退化过程的随机特性会收敛到零模拟结果完全错误。我用一个类比来帮助理解把Wiener过程想象成一个人戴着眼罩在跑步机上走路。跑步机的速度决定漂移项 (\mu)人的左右晃动幅度决定扩散项 (\sigma)。如果我们每秒钟记录一次位置位置的变化量里既有向前的固定推进(\mu \Delta t)又有随机的左右偏移(\sigma \sqrt{\Delta t} \varepsilon)。注意晃动幅度和观察时间间隔的平方根成正比观察时间越长累计的随机偏移越大。2.2 首达时间与逆高斯分布Wiener过程模型做RUL预测的核心是首达时间First Hitting Time, FHT概念。设失效阈值为 (\omega)退化过程 (X(t)) 从初始值 (X(0)x_0) 出发寿命 (T) 定义为退化量第一次超过阈值的时刻[ T \inf{t \geq 0: X(t) \geq \omega} ]对于带正漂移 (\mu0) 的线性Wiener过程首达时间是服从逆高斯分布Inverse Gaussian distribution的随机变量其概率密度函数为[ f_T(t) \frac{\omega - x_0}{\sqrt{2\pi\sigma^2 t^3}} \exp\left(-\frac{(\omega - x_0 - \mu t)^2}{2\sigma^2 t}\right) ]这个公式长得有点吓人但它就是整个项目的核心公式。用它就能计算在任一时刻 (t) 失效发生的概率密度进而得到累计分布函数、期望寿命、寿命分位数等全部关键指标。再看RUL。假设当前时刻为 (t_k)观测到的退化量为 (x_k)定义剩余退化量 (a_k \omega - x_k)。那么剩余寿命 (L_k) 的分布可以写成[ f_{L_k}(l) \frac{a_k}{\sqrt{2\pi\sigma^2 l^3}} \exp\left(-\frac{(a_k - \mu l)^2}{2\sigma^2 l}\right) ]注意这里的一个关键简化剩余寿命只取决于当前退化量与阈值之间的距离 (a_k)与过去的历史路径无关。这正是马尔可夫性的体现。这意味着在预测时我们只需要把当前观测值 (x_k) 代入公式即可不需要回溯整个退化历史。点估计方面Wiener过程和首达时间理论给出了一个非常优雅的结果当 (\mu 0) 时期望剩余寿命为[ E[L_k] \frac{a_k}{\mu} ]也就是说把剩余距离除以平均速度就能得到平均剩余寿命。这和初中物理里的速度-时间公式一模一样只是这里的失效时间是随机变量需要加一个分布去描述它的不确定性。2.3 参数估计极大似然估计与贝叶斯估计的选择参数估计是Wiener过程RUL预测中最容易出问题的一环。核心要估计的是漂移系数 (\mu) 和扩散系数 (\sigma^2)。假设在时间 (t_0, t_1, ..., t_n) 观测到退化数据 (x_0, x_1, ..., x_n)记增量 (\Delta x_k x_k - x_{k-1})时间间隔 (\Delta t_k t_k - t_{k-1})。由于Wiener过程的增量相互独立且服从正态分布[ \Delta x_k \sim N(\mu \Delta t_k, \sigma^2 \Delta t_k) ]因此对数似然函数为[ \ell(\mu, \sigma^2) -\frac{1}{2} \sum_{k1}^{n} \left[\ln(2\pi\sigma^2\Delta t_k) \frac{(\Delta x_k - \mu\Delta t_k)^2}{\sigma^2\Delta t_k}\right] ]对 (\mu) 和 (\sigma^2) 分别求偏导并令其为零得到极大似然估计MLE[ \hat{\mu} \frac{x_n - x_0}{t_n - t_0} ][ \hat{\sigma}^2 \frac{1}{n} \sum_{k1}^{n} \frac{(\Delta x_k - \hat{\mu}\Delta t_k)^2}{\Delta t_k} ]如果采样是等间隔的(\Delta t_k) 恒等于 (\Delta t)那么第二个公式可以简化为[ \hat{\sigma}^2 \frac{1}{n \Delta t} \sum_{k1}^{n} (\Delta x_k - \hat{\mu}\Delta t)^2 ]MLE最大的优点是无偏且渐进有效在样本量足够大的情况下表现很好计算也极其简单。但它的缺点是在小样本情况下估计不稳定尤其是扩散系数容易偏小。这时候可以考虑贝叶斯估计给 (\mu) 和 (\sigma^2) 设置先验分布然后使用MCMC或者共轭先验解析求解后验分布。工程上我一般建议先用MLE快速验证模型如果发现结果对参数异常敏感再上贝叶斯。我在自己项目中尝过一个小甜头先对原始退化数据进行平滑比如5点滑动平均再估计参数。平滑能显著降低 (\hat{\sigma}^2) 的波动让RUL区间估计更稳定。代价是对(\sigma)的估计会偏小不过在工程上这个偏小通常在可接受范围内。2.4 线性模型的边界什么时候必须升级线性Wiener过程模型有一个内在假设——漂移系数 (\mu) 在退化全程保持不变。这个假设对某些退化过程成立但对很多工程部件并不成立。举个典型例子锂电池衰减。电池在早期循环中容量衰减较慢后期由于内阻增大、活性物质损失加速容量衰减明显加快。这时候如果强行用线性Wiener过程拟合全部数据(\mu) 估计出来会是一个平均速率导致后期预测严重滞后寿命高估。面对这种情况有几个升级路径非线性漂移函数把 (\mu t) 改成 (\mu \cdot \Lambda(t))其中 (\Lambda(t)) 是时间尺度变换函数比如幂函数 (t^\beta)。这样能捕捉加速退化。随机效应模型假设漂移系数 (\mu) 在不同个体之间服从正态分布 (\mu \sim N(\mu_0, \sigma_\mu^2))用于刻画设备间的制造差异。退化-冲击复合模型在Wiener过程基础上叠加随机冲击的影响适合同时存在渐进退化和突发冲击的场景。这些扩展都会显著增加数学复杂度但核心思想仍然围绕趋势 波动展开理解了基础版后续升级就顺理成章。3. Matlab完整实现从数据生成到RUL预测3.1 项目文件结构与主程序框架我在设计Matlab项目时倾向于把功能拆分成清晰的小文件便于调试和复用。这个项目的目录结构如下RUL_Wiener/ ├─ main_rul_prediction.m % 主程序数据生成、参数估计、RUL预测、绘图 ├─ generate_degradation.m % 生成Wiener退化仿真数据 ├─ estimate_params.m % MLE参数估计 ├─ predict_rul.m % RUL概率密度计算与点估计/区间估计 └─ plot_results.m % 可视化辅助函数虽然你也可以把所有代码塞进一个脚本里但工程上还是建议拆开。原因很简单真实项目里数据通常来自传感器文件而不是仿真生成函数generate_degradation会被替换成load_sensor_data保留清晰的函数接口会让替换成本降到最低。3.2 退化数据仿真怎么生成像样的数据先来解决数据从哪来的问题。如果你手头没有公开数据集或者实验数据仿真生成是验证算法正确性的最佳途径——答案已知跑一遍模型就知道代码写对没有。这里演示生成一段线性退化趋势叠加随机波动的仿真数据function [t, X] generate_degradation(mu, sigma, dt, N, x0) % 生成Wiener过程退化仿真数据 % 输入: % mu - 漂移系数单位/单位时间 % sigma - 扩散系数单位/sqrt(单位时间) % dt - 采样时间间隔 % N - 采样点数量 % x0 - 初始退化量 % 输出: % t - 时间向量 (1xN) % X - 退化数据向量 (1xN) t (0:N-1) * dt; X zeros(1, N); X(1) x0; for k 2:N X(k) X(k-1) mu * dt sigma * sqrt(dt) * randn(); end end关键点有两个一是sigma * sqrt(dt) * randn()这里不能漏掉sqrt。前面说过布朗运动增量的方差与时间间隔成正比只要这里的缩放关系正确无论dt取多大或多小模拟出的退化轨迹在统计意义上都是一致的。二是固定随机数种子。仿真阶段建议在主程序中加上rng(42)否则每次运行结果都不同调试参数时你根本分不清是代码改对了还是运气好。我习惯把随机种子作为主程序的一个可配置参数方便复现实验结果。主程序里调用它rng(42); mu_true 0.05; % 每单位时间退化0.05 sigma_true 0.03; % 随机波动强度 dt 0.02; % 采样间隔 N 500; % 采样点数 x0 0; [t, X] generate_degradation(mu_true, sigma_true, dt, N, x0);这样一条带随机波动的退化曲线就生成好了。如果想模拟加速退化可以取指数漂移mu*lambda(t)但基础版先保持线性。3.3 滑动窗口分割与训练/测试策略RUL预测和普通回归预测有一个很大的区别预测时刻是流动的。你不可能在设备出厂时预测一次就完事而是要在t_k时刻基于当前所有观测做一次预测随后每个采样点都重新预测一次形成一个滚动更新的预测序列。实操中我建议以当前时间 (t_k) 为界将全部观测分成两部分历史窗口((t_1, x_1), ..., (t_k, x_k))用来估计模型参数预测目标当前时刻剩余的寿命分布主程序里用一个循环遍历预测起始点。假设前 (N_0200) 个点用于初始训练之后每隔step10个点做一次RUL预测直到数据末尾t_predict 200:10:N-1; RUL_mean zeros(1, length(t_predict)); RUL_std zeros(1, length(t_predict)); RUL_lower zeros(1, length(t_predict)); RUL_upper zeros(1, length(t_predict)); for idx 1:length(t_predict) k t_predict(idx); % 当前预测时刻的索引 mu_hat (X(k) - X(1)) / (t(k) - t(1)); dX diff(X(1:k)); sigma2_hat mean((dX - mu_hat*dt).^2) / dt; [RUL_mean(idx), RUL_std(idx), RUL_lower(idx), RUL_upper(idx)] ... predict_rul(X(k), omega, mu_hat, sigma2_hat); end这种滚动预测方式模拟了真实设备监控的场景随着设备运行时间增长预测结果应该越来越准确不确定区间应该越来越窄。如果画出RUL预测值与真实剩余寿命随时间变化的曲线模型效果一目了然。3.4 参数估计与RUL计算的Matlab实现参数估计函数实现非常简洁本质上就是套用前面推导的MLE公式function [mu_hat, sigma2_hat] estimate_params(t, X) % 基于MLE估计线性Wiener过程的漂移与扩散参数 n length(X); mu_hat (X(n) - X(1)) / (t(n) - t(1)); % 总变化量 / 总时间 dX diff(X); dt diff(t); sigma2_hat mean((dX - mu_hat .* dt).^2 ./ dt); end这里有一个容易被忽略的细节当采样不均匀即dt不是常数时必须用带权重的公式也就是每一项除以其对应的时间间隔。如果忽略这个细节直接用均一的dt会在采样稀疏的区段引入偏差。等间隔采样是没问题的但真实传感器数据经常有掉帧、延迟代码里处理非均匀时间间隔的写法属于防御性编程。预测函数是整段代码的灵魂它实现了逆高斯分布的RUL概率密度计算以及点估计和区间估计function [mean_rul, std_rul, lower, upper] predict_rul(x_current, omega, mu_hat, sigma2_hat, alpha) % 计算剩余寿命的点估计和区间估计 % alpha 为置信水平默认0.9 if nargin 5 alpha 0.9; end a omega - x_current; % 剩余退化量 if a 0 error(当前退化量已超过阈值RUL为0); end % 点估计期望RUL 剩余退化量 / 平均漂移率 mean_rul a / mu_hat; % 逆高斯分布方差 var_rul a * sigma2_hat^2 / mu_hat^3; std_rul sqrt(var_rul); % 在时间网格上计算PDF和CDF用数值方法求分位数 L_max max(3 * mean_rul, mean_rul 10 * std_rul); l_grid linspace(1e-6, L_max, 5000); % 逆高斯分布PDF pdf_l a ./ sqrt(2 * pi * sigma2_hat^2 * l_grid.^3) .* ... exp(-(a - mu_hat * l_grid).^2 ./ (2 * sigma2_hat^2 * l_grid)); % 数值积分求CDF cdf_l cumtrapz(l_grid, pdf_l); cdf_l min(max(cdf_l, 0), 1); % 防止数值误差导致的越界 % 分位数 low_q (1 - alpha) / 2; high_q 1 - (1 - alpha) / 2; lower interp1(cdf_l, l_grid, low_q); upper interp1(cdf_l, l_grid, high_q); end这里注意几个工程细节方差公式是逆高斯分布的解析式(\text{Var}(L) a\sigma^2 / \mu^3)。但用它来算标准差有一个问题——逆高斯分布是右偏的直接用均值加减标准差构造的区间并非严格置信区间所以代码里用数值积分和分位数法这才是严格的置信区间。L_max的选择要自适应。如果固定一个很大的上限概率密度在网格上的分辨率不足如果太保守又会截断尾部导致分位数计算错误。按mean 10*std取上限在绝大多数情况下是安全的。分位数查找用interp1比用find更精确而且不需要预先知道CDF的单调区间端点恰好落在网格点上。3.5 结果可视化与评价指标做预测不能只输出一行数字需要画图来判断模型行为是否合理。我通常画出三张图第一张是退化轨迹图标注失效阈值和当前预测时刻。figure; plot(t, X, b-, LineWidth, 1.2); hold on; yline(omega, r--, Failure Threshold, LineWidth, 1.5); xlabel(Time); ylabel(Degradation Value); title(Degradation Trajectory and Failure Threshold); legend(Degradation, Threshold); grid on;第二张是RUL概率密度曲线。选取几个代表性预测时刻比如早期、中期、临近失效各自画一条逆高斯分布的PDF曲线。随着预测时刻越来越接近真实失效时间曲线应该越来越窄、峰值越来越靠近真实RUL。第三张是滚动预测结果图。横轴是真实剩余寿命纵轴是预测RUL理想情况下预测值应该沿着45度对角线分布。把预测均值画成点把置信区间画成误差棒就能直观看到模型是否过于乐观或过于悲观。评估指标方面我最常用的三个指标公式说明MAE(\frac{1}{N}\sum | \hat{L}_i - L_i |)平均绝对误差越小越好RMSE(\sqrt{\frac{1}{N}\sum (\hat{L}_i - L_i)^2})均方根误差对大的离群误差敏感区间覆盖概率(\frac{1}{N}\sum \mathbb{I}(L_i \in [low_i, up_i]))真实RUL落在预测区间内的比例接近置信水平说明区间标定正确区间覆盖概率这个指标特别重要很多人会忽略。如果你的90%置信区间实际只有60%的覆盖率说明模型对不确定性估计过于保守会误导维修决策。我跑仿真数据时积累了一个经验如果区间覆盖率长期低于理论值首要怀疑的是扩散系数 (\sigma^2) 估计偏小常见原因包括数据采样率过低、传感器量化误差导致信息丢失或者退化过程本身是非线性的线性模型压缩了波动范围。4. 常见问题与排查实录4.1 数据预处理阶段容易踩的坑Wiener过程模型假设退化数据满足独立增量正态分布但真实传感器数据几乎不可能直接满足。我的经验是正式建模前必须先做两件事平滑去噪和异常值剔除。平滑推荐用滑动平均或Savitzky-Golay滤波。前者适合噪声均匀的情况后者在保留退化趋势拐点方面效果更好。Matlab里smoothdata和sgolayfilt都可以直接用。注意平滑窗口不要选太大窗口过大会把真实的退化趋势细节抹平导致(\hat{\sigma}^2)估计严重偏小。我试过用100点窗口平滑500点数据结果RUL区间窄到不真实后来改成15点窗口才恢复正常。异常值的处理更关键。Wiener过程对异常值非常敏感——一个漂移过大的离群点会直接拉高(\hat{\sigma}^2)导致置信区间异常膨胀。在预处理阶段用3σ原则或者Hampel滤波器剔除异常值能显著提升估计稳定性。注意如果在预处理阶段使用了平滑操作事后评估区间覆盖率时要意识到(\hat{\sigma}^2)已经偏小。别等到结果出来对不上再回头找原因。4.2 参数初值与数值稳定性问题MLE的解是解析的理论上不存在初值问题。但如果你扩展模型比如非线性漂移、随机效应需要数值优化这时候初值选择就很重要。我的建议是先用线性MLE结果作为非线性优化的初值。比如幂函数漂移 (\Lambda(t)t^\beta)先用线性模型估计 (\mu)再固定 (\mu) 用一维搜素估计 (\beta)最后所有参数联合优化。这样能避开局部最优。数值稳定性方面最容易出问题的地方是RUL概率密度公式中的指数项。当剩余退化量 (a) 很小而时间 (l) 也较小时((a - \mu l)^2 / (2\sigma^2 l)) 可能出现较大的中间值导致指数下溢。我处理的做法是先用logpdf计算对数密度再取指数必要的时候用logsumexp技巧归一化。Matlab里直接对概率密度做cumtrapz的前提是PDF数值上没有出现NaN或Inf所以在仿真数据里我把时间网格的起点设成1e-6避免除以零。4.3 预测结果偏保守或偏激进的调参方向如果你跑出来的RUL预测系统性地偏离真实值别急着改代码——先问自己问题出在参数估计还是模型假设本身先说参数层面。如果预测的RUL均值比真实值偏小即预测过早失效通常意味着 (\hat{\mu}) 被高估。常见原因是后期退化加速而MLE用了全时段平均漂移率。把参数估计窗口改成滑动窗口只使用最近一段时间的退化数据来估计 (\mu)往往能改善。反过来如果预测RUL系统偏大预测过晚失效常见原因是数据早期退化缓慢拉低了平均漂移率。或者阈值设置不合理实际失效阈值比设定的 (\omega) 更低。这时候要重新审视阈值是怎么来的——如果阈值是拍脑袋定的预测结果很难准确。还有一类情况是RUL预测随观测时间剧烈波动一会儿偏大一会儿偏小。这在数据噪声比较强时很常见。解决办法是增加观测数据的平滑、延长参数估计用的时间窗口或者对多个历史时刻的预测结果做时间上的平滑滤波。4.4 模型失效的三大典型特征如果在项目中使用Wiener过程时遇到以下三种现象基本可以判定模型与数据不匹配需要升级模型架构第一种退化增量不是正态分布。用histogram画一下增量直方图如果呈现明显偏态或厚尾Wiener过程就不好用了。此时可以考虑Gamma过程专门建模单调递增的退化过程或逆高斯过程。第二种退化路径存在明显非线性。把所有样本归一化到同一时间尺度画出退化轨迹。如果轨迹呈明显曲率比如下凸的加速退化线性Wiener过程会产生系统性的寿命预测偏差。升级为指数漂移Wiener过程或者利用时间尺度变换效果立竿见影。第三种个体差异过大。如果是从多个同类设备收集的数据且不同设备间平均退化速率差异巨大单一Wiener过程无法刻画这种heterogeneity。用随机效应模型让漂移系数 (\mu) 服从一个超先验分布能显著提升预测精度。这三种情况在学术论文和工业项目里都很常见。所谓模型的边界就在这里——不是Wiener过程不好用而是你需要在正确的地图里使用它。最后再分享一个小技巧做参数估计和RUL预测时建议把随机种子固定下来同时把完整参数配置写成一个结构体存下来。哪怕是仿真数据每次运行结果也应该严格一致。这样当后续结果出现异常时你能确定是代码逻辑变化导致的而不是随机性造成的。我在做这个项目的过程中深刻体会到RUL预测的本质是在不确定性中给出判断——分布比单点更重要区间覆盖率比平均误差更需要盯住。希望这份实现和踩坑记录能帮你少绕几段弯路。本文还有配套的精品资源点击获取
返回列表