Реализуйте пошаговое обучение для классификации Используя гибкий рабочий процесс

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

  1. Обучите линейную модель бинарной классификации на подмножестве данных.

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

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

  4. Для каждого фрагмента используйте updateMetrics измерять производительность модели, учитывая входящие данные, и затем использовать fit подбирать модель к тем данным.

Несмотря на то, что этот пример обрабатывает приложение как бинарную проблему классификации, можно реализовать пошаговое обучение мультикласса с помощью наивного алгоритма Бейеса вместо этого следующим этот тот же рабочий процесс. Смотрите incrementalClassificationNaiveBayes объект.

Загрузите и предварительно обработайте данные

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

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

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

Ответы могут быть одним из пяти классов: Нахождение, Положение, Обход, Выполнение или Танец. Разделите пополам ответ путем идентификации, перемещается ли предмет (actid > 2).

Y = Y > 2;

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

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

idxtt = randsample([true false],n,true);
TTMdl = fitclinear(X(:,idxtt),Y(idxtt),'ObservationsIn','columns')
TTMdl = 
  ClassificationLinear
      ResponseName: 'Y'
        ClassNames: [0 1]
    ScoreTransform: 'none'
              Beta: [60x1 double]
              Bias: -0.3005
            Lambda: 8.2967e-05
           Learner: 'svm'


  Properties, Methods

TTMdl ClassificationLinear объект модели, представляющий традиционно обученную линейную модель для бинарной классификации.

Преобразуйте обученную модель

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

IncrementalMdl = incrementalLearner(TTMdl)
IncrementalMdl = 
  incrementalClassificationLinear

            IsWarm: 1
           Metrics: [1x2 table]
        ClassNames: [0 1]
    ScoreTransform: 'none'
              Beta: [60x1 double]
              Bias: -0.3005
           Learner: 'svm'


  Properties, Methods

Реализуйте пошаговое обучение

Используйте гибкий рабочий процесс, чтобы обновить метрики производительности модели и подбирать инкрементную модель к обучающим данным путем вызова updateMetrics и fit функции отдельно. Симулируйте поток данных путем обработки 50 наблюдений за один раз. В каждой итерации:

  1. Вызовите updateMetrics обновить совокупное и ошибку классификации окон модели, учитывая входящий фрагмент наблюдений. Перезапишите предыдущую инкрементную модель, чтобы обновить потери в Metrics свойство. Обратите внимание на то, что функция не подбирает модель к фрагменту данных — фрагмент является "новыми" данными для модели. Укажите, что наблюдения ориентированы в столбцах.

  2. Вызовите fit подбирать модель к входящему фрагменту наблюдений. Перезапишите предыдущую инкрементную модель, чтобы обновить параметры модели. Укажите, что наблюдения ориентированы в столбцах.

  3. Сохраните ошибку классификации и сначала оцененный коэффициент β1.

% Preallocation
idxil = ~idxtt;
nil = sum(idxil);
numObsPerChunk = 50;
nchunk = floor(nil/numObsPerChunk);
ce = array2table(zeros(nchunk,2),'VariableNames',["Cumulative" "Window"]);
beta1 = [IncrementalMdl.Beta(1); zeros(nchunk,1)];
Xil = X(:,idxil);
Yil = Y(idxil);

% Incremental fitting
for j = 1:nchunk
    ibegin = min(nil,numObsPerChunk*(j-1) + 1);
    iend   = min(nil,numObsPerChunk*j);
    idx = ibegin:iend;
    IncrementalMdl = updateMetrics(IncrementalMdl,Xil(:,idx),Yil(idx),...
        'ObservationsIn','columns');
    ce{j,:} = IncrementalMdl.Metrics{"ClassificationError",:};
    IncrementalMdl = fit(IncrementalMdl,Xil(:,idx),Yil(idx),'ObservationsIn','columns');
    beta1(j + 1) = IncrementalMdl.Beta(end);
end

IncrementalMdl incrementalClassificationLinear объект модели, обученный на всех данных в потоке.

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

Смотрите эволюцию модели

Постройте график трассировки показателей производительности и оцененного коэффициента β1.

figure;
subplot(2,1,1)
h = plot(ce.Variables);
xlim([0 nchunk]);
ylabel('Classification Error')
legend(h,ce.Properties.VariableNames)
subplot(2,1,2)
plot(beta1)
ylabel('\beta_1')
xlim([0 nchunk]);
xlabel('Iteration')

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

Совокупная потеря устойчива и постепенно уменьшается, тогда как потеря окна переходит.

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

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

Объекты

Функции

Похожие темы