В этом примере показано, как обновить предсказание RUL, когда новые данные прибывают от машины под тестом. В примере вы используете ансамбль обучающих данных, чтобы обучить модель RUL. Вы затем цикл через последовательность тестовых данных от одной машины, обновляя предсказание RUL для каждой новой точки данных. Пример показывает эволюцию предсказания RUL, когда новые данные становятся доступными.
Этот пример использует exponentialDegradationModel
. Для моделей RUL ухудшения, когда новая точка данных становится доступной, необходимо сначала обновить модель ухудшения прежде, чем предсказать новое значение RUL. Для других типов модели RUL пропустите этот шаг обновления.
Загрузите данные для этого примера, который состоит из двух переменных, TestData
и TrainingData
.
load UpdateRULExampleData
TestData
таблица, содержащая значение некоторого индикатора состояния, Condition
, зарегистрированный каждый час, когда первые несколько записей показывают.
head(TestData,5)
ans=5×2 table
Time Condition
____ _________
1 1.0552
2 1.2013
3 0.79781
4 1.09
5 1.0324
TrainingData
массив ячеек таблиц, имеющих те же переменные как TestData
. Каждая ячейка в TrainingData
представляет эволюцию отказу индикатора состояния Condition
за время жизни одной машины в ансамбле.
Используйте TrainingData
обучать exponentialDegradationModel
модель для предсказания RUL. fit
команда оценивает предшествующее для параметров модели на основе хронологических записей в TrainingData
. Prior
свойство обученной модели содержит параметры модели Theta
\beta
, и Rho
. (Для получения дополнительной информации этих параметров модели, смотрите exponentialDegradationModel
.)
mdl = exponentialDegradationModel('LifeTimeUnit',"hours"); fit(mdl,TrainingData,"Time","Condition") mdl.Prior
ans = struct with fields:
Theta: 0.6762
ThetaVariance: 0.0727
Beta: 0.0583
BetaVariance: 1.8383e-04
Rho: -0.2811
Модели ухудшения являются самыми надежными для ухудшения, отслеживающего после того, как начальный наклон появится в измерениях индикатора состояния. Установите наклонный уровень обнаружения в 0,1 говорить модели не делать предсказания RUL, пока тот наклон не будет достигнут. (Когда вы знаете заранее, что измерения для компонента, ухудшение которого уже запустилось, можно отключить наклонное обнаружение установкой mdl.SlopeDetectionLevel = []
.)
mdl.SlopeDetectionLevel = 0.1;
Задайте пороговое значение индикатора состояния, которое указывает на конец жизни машины. RUL является предсказанным временем, оставленным, прежде чем индикатор состояния для тестовой машины достигнет этого порогового значения.
threshold = 400;
Для предсказания RUL примите тот TestData
начинает во время t
= 1 час и новая выборка данных становятся доступными каждый час. В общем случае можно предсказать новое значение RUL с каждой новой точкой данных. Для модели ухудшения этого примера, цикла через TestData
и обновите модель с каждой новой точкой данных с помощью update
команда. Затем проверяйте, обнаруживает ли модель достаточное изменение в наклоне для надежного предсказания RUL. Если это делает, предскажите новое значение RUL с помощью predictRUL
команда. Чтобы наблюдать эволюцию оценки, сохраните предполагаемые значения RUL и связанные доверительные интервалы в векторах EstRUL
и CI
, соответственно. Точно так же сохраните параметры модели в массиве ModelParameters
.
N = height(TestData); EstRUL = hours(zeros(N,1)); CI = hours(zeros(N,2)); ModelParameters = zeros(N,3); for t = 1:N CurrentDataSample = TestData(t,:); update(mdl,CurrentDataSample) ModelParameters(t,:) = [mdl.Theta mdl.Beta mdl.Rho]; % Compute RUL only if the data indicates a change in slope. if ~isempty(mdl.SlopeDetectionInstant) [EstRUL(t),CI(t,:)] = predictRUL(mdl,CurrentDataSample,threshold); end end
Постройте траектории предполагаемых значений параметра модели. Значения изменяются быстро после того, как наклон обнаруживается в данных об ухудшении. Они имеют тенденцию сходиться, когда больше точек данных становится доступным.
Time = hours(1:N)'; tStart = mdl.SlopeDetectionInstant; % slope detection time instant plot(Time,ModelParameters); hold on plot([tStart, tStart],[-1,2],'k--') legend({'\theta(t)','\beta(t)','\rho(t)','Slope detection instant'},'Location','best') hold off
Постройте предсказанный RUL, чтобы наблюдать его эволюцию, когда больше данных об ухудшении становится доступным. Там является не новым, оценил значение RUL, пока наклон не обнаруживается в данных об ухудшении. После этого предсказанный RUL уменьшается в зависимости от времени, как ожидалось. predictRUL
вычисляет статистическое распределение значений RUL. Доверительные границы на предсказанном RUL становятся более узкими в зависимости от времени.
plot(Time,EstRUL,'b.-',Time,CI,'c',tStart,EstRUL(hours(tStart)),'r*') title('Estimated RUL at Time t') xlabel('t') ylabel('Estimated RUL') legend({'Predicted RUL','Confidence bound','Confidence bound','Slope detection instant'})
exponentialDegradationModel
| predictRUL
| update