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

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

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

Загрузка данных

Загрузите набор данных деятельности человека. Случайным образом переставьте данные.

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

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

Обучите наивную байесовую модель классификации

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

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

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

  • Метрический размер окна к 1 000

  • Метрический период прогрева к 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 наблюдения.

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

Выполните Incremetnal изучение с условным обучением

Предположим, что вы хотите обучить модель только, когда новые 1 000 наблюдений имеют misclassification ошибку, больше, чем 5%.

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

  1. Симулируйте поток данных путем обработки фрагмента 100 наблюдений за один раз.

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

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

  4. Сохраните misclassification коэффициент ошибок и среднее значение первого предиктора во втором классе μ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 показывает периоды постоянных значений, во время которых производительность модели в предыдущих 1 000 окон наблюдения самое большее 0.05.

Смотрите также

Объекты

Функции

Похожие темы