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