Контакт с данными мультиэксперимента и слияние моделей

Этот пример показывает, как иметь дело с несколькими экспериментами и моделями слияния при работе с System Identification Toolbox™ для оценки и совершенствования моделей.

Введение

Функции анализа и оценки в System Identification Toolbox позволяют вам работать с несколькими пакетами данных. По существу, если вы выполнили несколько экспериментов и записали несколько наборов данных ввода - вывода, можно сгруппировать их в один объект IDDATA и использовать их с любой стандартной программой оценки.

В некоторых случаях можно хотеть "разделить" (один) набор данных измерения, чтобы удалить фрагменты, где качество данных не хорошо. Например, фрагмент данных может быть неприменимым из-за внешнего воздействия или отказа датчика. В тех случаях каждый хороший фрагмент данных может быть выделен и затем объединен в один объект IDDATA мультиэксперимента.

Например, давайте посмотрим на набор данных iddemo8.mat:

load iddemo8

Именем объекта данных является dat, и давайте просмотрим его.

dat
dat =

Time domain data set with 1000 samples.
Sample time: 1 seconds                  
                                        
Outputs      Unit (if specified)        
   y1                                   
                                        
Inputs       Unit (if specified)        
   u1                                   
                                        
plot(dat)

Мы видим, что существуют некоторые проблемы с выводом вокруг демонстрационных 250-280 и вокруг выборок 600 - 650. Они могут быть отказами датчика.

Поэтому разделите данные в три отдельных эксперимента и поместите затем в объект данных мультиэксперимента:

d1 = dat(1:250);
d2 = dat(281:600);
d3 = dat(651:1000);
d = merge(d1,d2,d3) % merge lets you create multi-exp IDDATA object
d =
Time domain data set containing 3 experiments.

Experiment   Samples      Sample Time          
   Exp1         250            1               
   Exp2         320            1               
   Exp3         350            1               
                                               
Outputs      Unit (if specified)               
   y1                                          
                                               
Inputs       Unit (if specified)               
   u1                                          
                                               

Различным экспериментам можно дать другие имена, например:

d.exp = {'Period 1';'Day 2';'Phase 3'}
d =
Time domain data set containing 3 experiments.

Experiment     Samples      Sample Time        
   Period 1       250            1             
   Day 2          320            1             
   Phase 3        350            1             
                                               
Outputs        Unit (if specified)             
   y1                                          
                                               
Inputs         Unit (if specified)             
   u1                                          
                                               

Чтобы исследовать его, используйте график, как в plot(d).

Выполнение оценки Используя данные мультиэксперимента

Как упомянуто прежде, все стандартные программы оценки модели принимают данные мультиэксперимента и учитывают, что они зарегистрированы в различные периоды. Давайте использовать два первых эксперимента для оценки и третий для валидации:

de = getexp(d,[1,2]);      % subselection is done using  the command GETEXP 
dv = getexp(d,'Phase 3');  % using numbers or names.
m1 = arx(de,[2 2 1]);
m2 = n4sid(de,2);
m3 = armax(de,[2 2 2 1]);
compare(dv,m1,m2,m3)

Команда compare также принимает несколько экспериментов. Используйте меню правой кнопки, чтобы выбрать эксперимент, чтобы использовать по одному.

compare(d,m1,m2,m3)

Кроме того, spa, etfe, resid, predict, sim действует таким же образом для данных мультиэксперимента, как они делают для одних данных об эксперименте.

Слияние моделей после оценки

Существует другой способ иметь дело с отдельными наборами данных: модель может быть вычислена для каждого набора, и затем модели могут быть объединены:

m4 = armax(getexp(de,1),[2 2 2 1]);
m5 = armax(getexp(de,2),[2 2 2 1]);
m6 = merge(m4,m5); % m4 and m5 are merged into m6

Это - концептуально то же самое как вычисление m от объединенного набора de, но это не численно то же самое. Работа над de принимает, что отношения сигнал-шум (о) том же самом в различных экспериментах, в то время как слияние отдельных моделей делает независимые оценки уровня шума. Если условия о том же самом для различных экспериментов, более эффективно оценить непосредственно на данных мультиэксперимента.

Мы можем проверять модели m3 и m6, которые являются оба моделями ARMAX, полученными на тех же данных двумя различными способами:

[m3.a;m6.a]
ans = 2×3

    1.0000   -1.5034    0.7008
    1.0000   -1.5022    0.7000

[m3.b;m6.b]
ans = 2×3

         0    1.0023    0.5029
         0    1.0035    0.5028

[m3.c;m6.c]
ans = 2×3

    1.0000   -0.9744    0.1578
    1.0000   -0.9751    0.1584

compare(dv,m3,m6)

Тематическое исследование: конкатенация по сравнению со слиянием независимых наборов данных

Мы теперь обращаемся к другой ситуации. Давайте считать два набора данных сгенерированными системой m0. Системой дают:

m0
m0 =
  Discrete-time identified state-space model:
    x(t+Ts) = A x(t) + B u(t) + K e(t)
       y(t) = C x(t) + D u(t) + e(t)
 
  A = 
             x1        x2        x3
   x1    0.5296    -0.476    0.1238
   x2    -0.476  -0.09743    0.1354
   x3    0.1238    0.1354   -0.8233
 
  B = 
             u1        u2
   x1    -1.146  -0.03763
   x2     1.191    0.3273
   x3         0         0
 
  C = 
            x1       x2       x3
   y1  -0.1867  -0.5883  -0.1364
   y2   0.7258        0   0.1139
 
  D = 
          u1     u2
   y1  1.067      0
   y2      0      0
 
  K = 
       y1  y2
   x1   0   0
   x2   0   0
   x3   0   0
 
Sample time: 1 seconds
  
Parameterization:
   STRUCTURED form (some fixed coefficients in  A, B, C).
   Feedthrough: on some input channels
   Disturbance component: none
   Number of free coefficients: 23
   Use "idssdata", "getpvec", "getcov" for parameters and their uncertainties.

Status:                                                         
Created by direct construction or transformation. Not estimated.

Наборами данных, которые были собраны, является z1 и z2, полученный из m0 с различными входными параметрами, шумовыми и начальными условиями. Эти наборы данных получены из iddemo8.mat, который загрузился ранее.

pause off

First Data устанавливают:

plot(z1) %generates a separate plot for each I/O pair if pause is on; showing only the last one here

Второй набор:

plot(z2) %generates a separate plot for each I/O pair if pause is on; showing only the last one here

Если мы только конкатенируем данные, мы получили:

zzl = [z1;z2]
zzl =

Time domain data set with 400 samples.
Sample time: 1 seconds                 
                                       
Outputs      Unit (if specified)       
   y1                                  
   y2                                  
                                       
Inputs       Unit (if specified)       
   u1                                  
   u2                                  
                                       
plot(zzl)

pause on

Модель в пространстве состояний дискретного времени может быть получена при помощи ssest:

ml = ssest(zzl,3,'Ts',1, 'Feedthrough', [true, false]);

Сравните предвещать ответ для моделей m0 и ml:

clf
bode(m0,ml)
legend('show')

Это не очень хорошая модель, как наблюдается из этих четырех Диаграмм Боде выше.

Теперь, вместо этого обработайте эти два набора данных как различные эксперименты:

zzm = merge(z1,z2)
zzm =
Time domain data set containing 2 experiments.

Experiment   Samples      Sample Time          
   Exp1         200            1               
   Exp2         200            1               
                                               
Outputs      Unit (if specified)               
   y1                                          
   y2                                          
                                               
Inputs       Unit (if specified)               
   u1                                          
   u2                                          
                                               
% The model for this data can be estimated as before (watching progress this time)
mm = ssest(zzm,3,'Ts',1,'Feedthrough',[true, false], ssestOptions('Display', 'on'));

Let us compare the Bode plots of the true system (blue)

the model from concatenated data (green) and the model from the

merged data set (red):

clf
bode(m0,'b',ml,'g',mm,'r')
legend('show')

Объединенные данные дают лучшую модель, как наблюдается из графика выше.

Заключения

В этом примере мы анализировали, как использовать несколько наборов данных вместе для оценки одной модели. Этот метод полезен, когда у вас есть несколько наборов данных от независимых выполнений эксперимента или когда вы сегментируете данные на несколько наборов, чтобы удалить плохие сегменты. Несколько экспериментов могут быть группированы в один объект IDDATA, который затем применим для всех требований оценки и анализа. Этот метод работает и в течение времени и в течение частотного диапазона iddata.

Также возможно объединить модели после оценки. Этот метод может использоваться, чтобы "составить в среднем" независимо оцененные модели. Если шумовые характеристики на нескольких наборах данных отличаются, объединяя модели после того, как оценка будет работать лучше, чем слияние самих наборов данных перед оценкой.

Похожие темы