Реализуйте инкрементальное обучение для линейной регрессии с использованием краткого рабочего процесса

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

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

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

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

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

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

Mdl = incrementalRegressionLinear()
Mdl = 
  incrementalRegressionLinear

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


  Properties, Methods

Mdl.EstimationPeriod
ans = 1000

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

Mdl необходимо соответствовать данным, прежде чем использовать их для выполнения любых других операций. Программа устанавливает период оценки равным 1000, потому что половина ширины полосы без эпсилона 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')

Figure contains 2 axes. Axes 1 contains 2 objects of type line, constantline. Axes 2 contains 4 objects of type line, constantline. These objects represent Cumulative, Window.

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

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

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

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

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

См. также

Объекты

Функции

Похожие темы