В этом примере показано, как обучить наивную модель классификации Bayes mutliclass для инкрементного обучения только тогда, когда производительность модели неудовлетворительна.
Гибкий поток операций инкрементного обучения позволяет обучать инкрементную модель входящему пакету данных только в случае необходимости (см. раздел Что такое инкрементное обучение?). Например, если показатели производительности модели удовлетворительны, то для повышения эффективности можно пропустить обучение по входящим пакетам до тех пор, пока показатели не станут неудовлетворительными.
Загрузите набор данных о деятельности персонала. Произвольно перетасовать данные.
load humanactivity n = numel(actid); rng(1) % For reproducibility idx = randsample(n,n); X = feat(idx,:); Y = actid(idx);
Для получения подробной информации о наборе данных введите Description в командной строке.
Настройте наивную модель классификации Байеса для инкрементного обучения, установив все следующие параметры:
Максимальное число ожидаемых классов до 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%.
Выполните инкрементное обучение с условным обучением, выполнив следующую процедуру для каждой итерации:
Моделирование потока данных путем одновременной обработки части из 100 наблюдений.
Обновление производительности модели путем передачи модели и текущего фрагмента данных updateMetrics. Перезаписать входную модель выходной моделью.
Подгоняйте модель к порции данных, только когда частота ошибок неправильной классификации превышает 0,05. Перезаписать входную модель выходной моделью при проведении обучения.
Сохраните частоту ошибок неправильной классификации и среднее значение первого предиктора во втором классе , чтобы увидеть, как они развиваются во время обучения.
Отслеживать, когда 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 объект модели обучен всем данным в потоке.
Чтобы увидеть, как развивались производительность модели и во время обучения, постройте их график на отдельных вложенных графиках. Определение периодов обучения модели.
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')

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