В этом примере показано, как использовать гибкий рабочий процесс для реализации инкрементного обучения для двоичной классификации с преквенциальной оценкой. Традиционно обученная модель инициализирует инкрементную модель. В частности, в этом примере выполняется следующее:
Подготовка линейной модели для двоичной классификации по подмножеству данных.
Преобразование традиционно обученной модели в модель инкрементного обучения для двоичной классификации.
Моделирование потока данных с помощью цикла for, который подает небольшие части наблюдений в алгоритм инкрементного обучения.
Для каждого блока используйте updateMetrics для измерения производительности модели с учетом входящих данных и последующего использования fit для соответствия модели этим данным.
Хотя в этом примере приложение рассматривается как проблема двоичной классификации, можно реализовать многоклассовое инкрементное обучение с использованием наивного алгоритма Байеса, следуя тому же рабочему процессу. См. раздел incrementalClassificationNaiveBayes объект.
Загрузите набор данных о деятельности персонала. Произвольно перетасовать данные. Сориентируйте наблюдения данных предиктора в столбцах.
load humanactivity rng(1); % For reproducibility n = numel(actid); idx = randsample(n,n); X = feat(idx,:)'; Y = actid(idx);
Для получения подробной информации о наборе данных введите Description в командной строке.
Отклики могут быть одним из пяти классов: Сидя, стоя, Ходьба, Бега или Танцы. Дихотомизировать ответ, определив, движется ли субъект (actid > 2).
Y = Y > 2;
Поместите линейную модель для двоичной классификации в случайную выборку из половины данных. Укажите, что наблюдения ориентированы вдоль столбцов данных.
idxtt = randsample([true false],n,true); TTMdl = fitclinear(X(:,idxtt),Y(idxtt),'ObservationsIn','columns')
TTMdl =
ClassificationLinear
ResponseName: 'Y'
ClassNames: [0 1]
ScoreTransform: 'none'
Beta: [60x1 double]
Bias: -0.4621
Lambda: 8.2967e-05
Learner: 'svm'
Properties, Methods
TTMdl является ClassificationLinear объект модели, представляющий традиционно обученную линейную модель для двоичной классификации.
Преобразование традиционно обученной модели классификации в линейную модель двоичной классификации для инкрементного обучения.
IncrementalMdl = incrementalLearner(TTMdl)
IncrementalMdl =
incrementalClassificationLinear
IsWarm: 1
Metrics: [1x2 table]
ClassNames: [0 1]
ScoreTransform: 'none'
Beta: [60x1 double]
Bias: -0.4621
Learner: 'svm'
Properties, Methods
Используйте гибкий рабочий процесс для обновления метрик производительности модели и подгонки инкрементной модели к данным обучения путем вызова updateMetrics и fit функционирует отдельно. Моделирование потока данных путем одновременной обработки 50 наблюдений. При каждой итерации:
Звонить updateMetrics для обновления кумулятивной и оконной ошибки классификации модели с учетом входящего фрагмента наблюдений. Перезаписать предыдущую инкрементную модель для обновления потерь в Metrics собственность. Обратите внимание, что функция не подходит модели к порции данных - порция является «новыми» данными для модели. Укажите, что наблюдения ориентированы в столбцах.
Звонить fit для соответствия модели входящему фрагменту наблюдений. Перезаписать предыдущую инкрементную модель для обновления параметров модели. Укажите, что наблюдения ориентированы в столбцах.
Сохраните ошибку классификации и первый оцененный коэффициент .
% Preallocation idxil = ~idxtt; nil = sum(idxil); numObsPerChunk = 50; nchunk = floor(nil/numObsPerChunk); ce = array2table(zeros(nchunk,2),'VariableNames',["Cumulative" "Window"]); beta1 = [IncrementalMdl.Beta(1); zeros(nchunk,1)]; Xil = X(:,idxil); Yil = Y(idxil); % Incremental fitting for j = 1:nchunk ibegin = min(nil,numObsPerChunk*(j-1) + 1); iend = min(nil,numObsPerChunk*j); idx = ibegin:iend; IncrementalMdl = updateMetrics(IncrementalMdl,Xil(:,idx),Yil(idx),... 'ObservationsIn','columns'); ce{j,:} = IncrementalMdl.Metrics{"ClassificationError",:}; IncrementalMdl = fit(IncrementalMdl,Xil(:,idx),Yil(idx),'ObservationsIn','columns'); beta1(j + 1) = IncrementalMdl.Beta(end); end
IncrementalMdl является incrementalClassificationLinear объект модели обучен всем данным в потоке.
Кроме того, можно использовать updateMetricsAndFit для обновления метрик производительности модели с учетом нового фрагмента данных, а затем подгонки модели к данным.
Постройте график трассировки метрик производительности и оценочного коэффициента .
figure; subplot(2,1,1) h = plot(ce.Variables); xlim([0 nchunk]); ylabel('Classification Error') legend(h,ce.Properties.VariableNames) subplot(2,1,2) plot(beta1) ylabel('\beta_1') xlim([0 nchunk]); xlabel('Iteration')

Кумулятивные потери стабильны и постепенно уменьшаются, тогда как оконные потери скачет.
сначала резко изменяется, а затем постепенно выравнивается как fit обрабатывает больше кусков наблюдений.