В этом примере показано, как использовать сжатый рабочий процесс для реализации инкрементного обучения для двоичной классификации с преквенциальной оценкой. В частности, в этом примере выполняется следующее:
Создайте модель инкрементного обучения по умолчанию для двоичной классификации.
Моделирование потока данных с помощью цикла for, который подает небольшие части наблюдений в алгоритм инкрементного обучения.
Для каждого блока используйте updateMetricsAndFit для измерения производительности модели с учетом входящих данных, а затем подгонки модели к этим данным.
Хотя в этом примере приложение рассматривается как проблема двоичной классификации, можно реализовать многоклассовое инкрементное обучение с использованием наивного алгоритма Байеса, следуя тому же рабочему процессу. См. раздел incrementalClassificationNaiveBayes объект.
Создайте модель инкрементного обучения по умолчанию для двоичной классификации.
Mdl = incrementalClassificationLinear()
Mdl =
incrementalClassificationLinear
IsWarm: 0
Metrics: [1x2 table]
ClassNames: [1x0 double]
ScoreTransform: 'none'
Beta: [0x1 double]
Bias: 0
Learner: 'svm'
Properties, Methods
Mdl является incrementalClassificationLinear объект модели. Все его свойства доступны только для чтения.
Mdl должны соответствовать данным, прежде чем их можно будет использовать для выполнения любых других операций.
Загрузите набор данных о деятельности персонала. Произвольно перетасовать данные.
load humanactivity n = numel(actid); rng(1); % For reproducibility idx = randsample(n,n); X = feat(idx,:); Y = actid(idx);
Для получения подробной информации о наборе данных введите Description в командной строке.
Отклики могут быть одним из пяти классов: Сидя, стоя, Ходьба, Бега или Танцы. Дихотомизировать ответ, определив, движется ли субъект (actid > 2).
Y = Y > 2;
Используйте сжатый рабочий процесс для обновления метрик производительности модели и подгонки инкрементной модели к данным обучения путем вызова updateMetricsAndFit функция. При каждой итерации:
Обработка 50 наблюдений для моделирования потока данных.
Перезаписать предыдущую инкрементную модель новой, установленной для входящего наблюдения.
Сохраните кумулятивные метрики, оконные метрики и первый коэффициент , чтобы увидеть, как они развиваются во время инкрементного обучения.
% Preallocation numObsPerChunk = 50; nchunk = floor(n/numObsPerChunk); ce = 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,X(idx,:),Y(idx)); ce{j,:} = Mdl.Metrics{"ClassificationError",:}; beta1(j + 1) = Mdl.Beta(1); end
IncrementalMdl является incrementalClassificationLinear объект модели обучен всем данным в потоке. Во время инкрементного обучения и после разогрева модели 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(ce.Variables); xlim([0 nchunk]); ylabel('Classification Error') xline(Mdl.EstimationPeriod/numObsPerChunk,'r-.'); xline((Mdl.EstimationPeriod + Mdl.MetricsWarmupPeriod)/numObsPerChunk,'g-.'); legend(h,ce.Properties.VariableNames) xlabel('Iteration')

Сюжет говорит о том, что updateMetricsAndFit выполняет следующее:
Вписать во все инкрементные итерации обучения.
Вычислять метрики производительности только после периода прогрева метрик.
Вычислите кумулятивные метрики во время каждой итерации.
Вычислите метрику окна после обработки 200 наблюдений (4 итерации).