В этом примере показано, как использовать сжатый рабочий процесс, чтобы реализовать пошаговое обучение для линейной регрессии с prequential оценкой. А именно, этот пример делает следующее:
Создайте модель пошагового обучения по умолчанию для линейной регрессии.
Симулируйте поток данных с помощью цикла for, который питает маленькие фрагменты наблюдений к алгоритму пошагового обучения.
Для каждого фрагмента используйте 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
должно быть подходящим к данным, прежде чем можно будет использовать их, чтобы выполнить любые другие операции. Программное обеспечение устанавливает период оценки на 1 000 потому что половина ширины эпсилона нечувствительная полоса Epsilon
неизвестно. Можно установить Epsilon
к положительному скаляру с плавающей точкой при помощи 'Epsilon'
аргумент пары "имя-значение". Это действие приводит к периоду оценки по умолчанию 0.
Загрузите набор данных манипулятора.
load robotarm
Для получения дополнительной информации на наборе данных, введите Description
в командной строке.
Используйте сжатый рабочий процесс, чтобы обновить метрики производительности модели и подбирать инкрементную модель к обучающим данным путем вызова updateMetricsAndFit
функция. В каждой итерации:
Процесс 50 наблюдений, чтобы симулировать поток данных.
Перезапишите предыдущую инкрементную модель с новой, адаптированной к входящему наблюдению.
Сохраните совокупные метрики, метрики окна и первый коэффициент чтобы видеть, как они развиваются во время пошагового обучения.
% 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
проверяет эффективность модели на входящем наблюдении, и затем подбирает модель к тому наблюдению.
Чтобы видеть, как показатели производительности и развитый во время обучения, постройте их на отдельных подграфиках.
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 итераций), подгонка во время всех итераций пошагового обучения.
Вычислите показатели производительности после метрического периода прогрева только.
Вычислите совокупные метрики во время каждой итерации.
Вычислите метрики окна после обработки 200 наблюдений (4 итерации).