В этом примере показано, как использовать сжатый рабочий процесс, чтобы реализовать пошаговое обучение для бинарной классификации с prequential оценкой. А именно, этот пример делает следующее:
Создайте модель пошагового обучения по умолчанию для бинарной классификации.
Симулируйте поток данных с помощью цикла for, который питает маленькие фрагменты наблюдений к алгоритму пошагового обучения.
Для каждого фрагмента используйте 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 наблюдений, чтобы симулировать поток данных.
Перезапишите предыдущую инкрементную модель с новой, адаптированной к входящему наблюдению.
Сохраните совокупные метрики, метрики окна и первый коэффициент чтобы видеть, как они развиваются во время пошагового обучения.
% 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
проверяет эффективность модели на входящем наблюдении, и затем подбирает модель к тому наблюдению.
Чтобы видеть, как показатели производительности и развитый во время обучения, постройте их на отдельных подграфиках.
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')
График предлагает тот updateMetricsAndFit
делает следующее:
Подгонка во время всех итераций пошагового обучения.
Вычислите показатели производительности после метрического периода прогрева только.
Вычислите совокупные метрики во время каждой итерации.
Вычислите метрики окна после обработки 200 наблюдений (4 итерации).