exponenta event banner

Выполнение условного обучения во время инкрементного обучения

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

Гибкий поток операций инкрементного обучения позволяет обучать инкрементную модель входящему пакету данных только в случае необходимости (см. раздел Что такое инкрементное обучение?). Например, если показатели производительности модели удовлетворительны, то для повышения эффективности можно пропустить обучение по входящим пакетам до тех пор, пока показатели не станут неудовлетворительными.

Загрузить данные

Загрузите набор данных о деятельности персонала. Произвольно перетасовать данные.

load humanactivity
n = numel(actid);
rng(1) % For reproducibility
idx = randsample(n,n);
X = feat(idx,:);
Y = actid(idx);

Для получения подробной информации о наборе данных введите Description в командной строке.

Модель классификации Train Naive Bayes

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

  • Максимальное число ожидаемых классов до 5

  • Отслеживаемая метрика производительности по частоте ошибок классификации, которая также включает минимальные затраты

  • Размер окна метрик до 1000

  • Период прогрева метрик до 50

initobs = 50;
Mdl = incrementalClassificationNaiveBayes('MaxNumClasses',5,'MetricsWindowSize',1000,...
    'Metrics','classiferror','MetricsWarmupPeriod',initobs);

Поместите настроенную модель в первые 50 наблюдений.

Mdl = fit(Mdl,X(1:initobs,:),Y(1:initobs))
Mdl = 
  incrementalClassificationNaiveBayes

                    IsWarm: 1
                   Metrics: [2×2 table]
                ClassNames: [1 2 3 4 5]
            ScoreTransform: 'none'
         DistributionNames: {1×60 cell}
    DistributionParameters: {5×60 cell}


  Properties, Methods

haveTrainedAllClasses = numel(unique(Y(1:initobs))) == 5
haveTrainedAllClasses = logical
   1

Mdl является incrementalClassificationNaiveBayes объект модели. Модель теплая (IsWarm является 1), поскольку применяются все следующие условия:

  • Исходные данные обучения содержат все ожидаемые классы (haveTrainedAllClasses является true).

  • Mdl был пригоден для Mdl.MetricsWarmupPeriod наблюдения.

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

Выполнение инкрементного обучения с помощью условного обучения

Предположим, что необходимо обучить модель только в том случае, если в самых последних 1000 наблюдениях ошибка классификации превышает 5%.

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

  1. Моделирование потока данных путем одновременной обработки части из 100 наблюдений.

  2. Обновление производительности модели путем передачи модели и текущего фрагмента данных updateMetrics. Перезаписать входную модель выходной моделью.

  3. Подгоняйте модель к порции данных, только когда частота ошибок неправильной классификации превышает 0,05. Перезаписать входную модель выходной моделью при проведении обучения.

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

  5. Отслеживать, когда fit тренирует модель.

% Preallocation
numObsPerChunk = 100;
nchunk = floor((n - initobs)/numObsPerChunk);
mu21 = zeros(nchunk,1);
ce = array2table(nan(nchunk,2),'VariableNames',["Cumulative" "Window"]);
trained = false(nchunk,1);

% Incremental fitting
for j = 1:nchunk
    ibegin = min(n,numObsPerChunk*(j-1) + 1 + initobs);
    iend   = min(n,numObsPerChunk*j + initobs);
    idx = ibegin:iend;
    Mdl = updateMetrics(Mdl,X(idx,:),Y(idx));
    ce{j,:} = Mdl.Metrics{"ClassificationError",:};
    if ce{j,"Window"} > 0.05
        Mdl = fit(Mdl,X(idx,:),Y(idx));
        trained(j) = true;
    end    
    mu21(j) = Mdl.DistributionParameters{2,1}(1);
end

Mdl является incrementalClassificationNaiveBayes объект модели обучен всем данным в потоке.

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

subplot(2,1,1)
plot(mu21)
hold on
plot(find(trained),mu21(trained),'r.')
ylabel('\mu_{21}')
legend('\mu_{21}','Training occurs','Location','best')
hold off
subplot(2,1,2)
plot(ce.Variables)
ylabel('Misclassification Error Rate')
xlabel('Iteration')
legend(ce.Properties.VariableNames,'Location','best')

График следов мк21 показывает периоды постоянных значений, в течение которых производительность модели в предыдущем 1000 окне наблюдения составляет не более 0,05.

См. также

Объекты

Функции

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