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

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

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

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

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

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

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

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

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: [60×1 double]
              Bias: -0.2998
            Lambda: 8.2967e-05
           Learner: 'svm'


  Properties, Methods

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

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

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

IncrementalMdl = incrementalLearner(TTMdl)
IncrementalMdl = 
  incrementalClassificationLinear

            IsWarm: 1
           Metrics: [1×2 table]
        ClassNames: [0 1]
    ScoreTransform: 'none'
              Beta: [60×1 double]
              Bias: -0.2998
           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')

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

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

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

Объекты

Функции

Похожие темы

Для просмотра документации необходимо авторизоваться на сайте