Реализуйте пошаговое обучение Используя сжатый рабочий процесс

В этом примере показано, как использовать сжатый рабочий процесс, чтобы реализовать пошаговое обучение для линейной регрессии с prequential оценкой. А именно, этот пример делает следующее:

  1. Создайте модель пошагового обучения по умолчанию для линейной регрессии.

  2. Симулируйте поток данных с помощью цикла for, который питает маленькие фрагменты наблюдений к алгоритму пошагового обучения.

  3. Для каждого фрагмента используйте updateMetricsAndFit измерять производительность модели, учитывая входящие данные, и затем подбирать модель к тем данным.

Создайте объект модели по умолчанию

Создайте инкрементную линейную модель по умолчанию для регрессии.

Mdl = incrementalRegressionLinear()
Mdl = 
  incrementalRegressionLinear

               IsWarm: 0
              Metrics: [1×2 table]
    ResponseTransform: 'none'
                 Beta: [0×1 double]
                 Bias: 0
              Learner: 'svm'


  Properties, Methods

Mdl.EstimationPeriod
ans = 1000

Mdl incrementalRegressionLinear объект модели. Все его свойства только для чтения.

Mdl должно быть подходящим к данным, прежде чем можно будет использовать их, чтобы выполнить любые другие операции. Программное обеспечение устанавливает период оценки на 1 000 потому что половина ширины эпсилона нечувствительная полоса Epsilon неизвестно. Можно установить Epsilon к положительному скаляру с плавающей точкой при помощи 'Epsilon' аргумент пары "имя-значение". Это действие приводит к периоду оценки по умолчанию 0.

Загрузка данных

Загрузите набор данных манипулятора.

load robotarm

Для получения дополнительной информации на наборе данных, введите Description в командной строке.

Реализуйте пошаговое обучение

Используйте сжатый рабочий процесс, чтобы обновить метрики производительности модели и подбирать инкрементную модель к обучающим данным путем вызова updateMetricsAndfit функция. В каждой итерации:

  • Процесс 50 наблюдений, чтобы симулировать поток данных.

  • Перезапишите предыдущую инкрементную модель с новой, адаптированной к входящему наблюдению.

  • Хранилище β1, совокупные метрики и метрики окна, чтобы видеть, как они развиваются во время пошагового обучения.

% Preallocation
n = numel(ytrain);
numObsPerChunk = 50;
nchunk = floor(n/numObsPerChunk);
ei = array2table(zeros(nchunk,2),'VariableNames',["Cumulative" "Window"]);
beta1 = zeros(nchunk,1);    

% Incremental fitting
for j = 1:nchunk
    ibegin = min(n,numObsPerChunk*(j-1) + 1);
    iend   = min(n,numObsPerChunk*j);
    idx = ibegin:iend;    
    Mdl = updateMetricsAndFit(Mdl,Xtrain(idx,:),ytrain(idx));
    ei{j,:} = Mdl.Metrics{"EpsilonInsensitiveLoss",:};
    beta1(j + 1) = Mdl.Beta(1);
end

IncrementalMdl incrementalRegressionLinear объект модели, обученный на всех данных в потоке. Во время пошагового обучения и после того, как модель подогревается, updateMetricsAndFit проверяет эффективность модели на входящем наблюдении, и затем подбирает модель к тому наблюдению.

Смотрите эволюцию модели

Чтобы видеть, как показатели производительности и β1 развитый во время обучения, постройте их на отдельных подграфиках.

figure;
subplot(2,1,1)
plot(beta1)
ylabel('\beta_1')
xlim([0 nchunk]);
xline(Mdl.EstimationPeriod/numObsPerChunk,'r-.');
subplot(2,1,2)
h = plot(ei.Variables);
xlim([0 nchunk]);
ylabel('Epsilon Insensitive Loss')
xline(Mdl.EstimationPeriod/numObsPerChunk,'r-.');
xline((Mdl.EstimationPeriod + Mdl.MetricsWarmupPeriod)/numObsPerChunk,'g-.');
legend(h,ei.Properties.VariableNames)
xlabel('Iteration')

График предлагает тот updateMetricsAndFit делает следующее:

  • После периода оценки (сначала 20 итераций), подгонка β1 во время всех итераций пошагового обучения.

  • Вычислите показатели производительности после метрического периода прогрева только.

  • Вычислите совокупные метрики во время каждой итерации.

  • Вычислите метрики окна после обработки 500 наблюдений (4 итерации).

Смотрите также

Объекты

Функции

Похожие темы