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