exponenta event banner

Внедрение инкрементного обучения для классификации с использованием краткого рабочего процесса

В этом примере показано, как использовать сжатый рабочий процесс для реализации инкрементного обучения для двоичной классификации с преквенциальной оценкой. В частности, в этом примере выполняется следующее:

  1. Создайте модель инкрементного обучения по умолчанию для двоичной классификации.

  2. Моделирование потока данных с помощью цикла for, который подает небольшие части наблюдений в алгоритм инкрементного обучения.

  3. Для каждого блока используйте 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 наблюдений для моделирования потока данных.

  • Перезаписать предыдущую инкрементную модель новой, установленной для входящего наблюдения.

  • Сохраните кумулятивные метрики, оконные метрики и первый коэффициент β1, чтобы увидеть, как они развиваются во время инкрементного обучения.

% 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 проверяет производительность модели на входящем наблюдении, а затем подгоняет модель под это наблюдение.

Проверка эволюции модели

Чтобы увидеть, как метрики производительности и β1 развивались во время обучения, постройте их график на отдельных вложенных графиках.

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')

Figure contains 2 axes. Axes 1 contains 2 objects of type line, constantline. Axes 2 contains 4 objects of type line, constantline. These objects represent Cumulative, Window.

Сюжет говорит о том, что updateMetricsAndFit выполняет следующее:

  • Вписать β1 во все инкрементные итерации обучения.

  • Вычислять метрики производительности только после периода прогрева метрик.

  • Вычислите кумулятивные метрики во время каждой итерации.

  • Вычислите метрику окна после обработки 200 наблюдений (4 итерации).

См. также

Объекты

Функции

Связанные темы