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