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

В этом примере показано, как обучить модель логистической регрессии использование приложения Classification Learner. Затем в командной строке инициализируйте и обучите инкрементную модель бинарной классификации с помощью информации, полученной от обучения в приложении.

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

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

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

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

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

moveidx = actid > 2;
Y = repmat("NotMoving",n,1);
Y(moveidx) = "Moving";
Y = categorical(Y);

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

Случайным образом разделите данные в 1% и 99% подмножеств путем вызова cvpartition и определение затяжки (тест) демонстрационная пропорция 0.99. Создайте переменные для 1% и 99% разделов.

cvp = cvpartition(n,'HoldOut',0.99);
idxtt = cvp.training;
idxil = cvp.test;

Xtt = X(idxtt,:);
Xil = X(idxil,:);
Ytt = Y(idxtt);
Yil = Y(idxil);

Обучите модель Используя Classification Learner

Откройте Classification Learner путем ввода classificationLearner в командной строке.

classificationLearner

В качестве альтернативы на вкладке Apps, кликните по стреле Show more, чтобы открыть галерею Apps. Под Machine Learning and Deep Learning кликните по значку приложения.

Выберите обучающий набор данных и переменные.

  1. На вкладке Classification Learner, в разделе File, выбирают New Session > From Workspace.

  2. В диалоговом окне New Session from Workspace, под Переменной Набора данных, выбирают переменный предиктор Xtt.

  3. Под Response нажмите From workspace; обратите внимание, что Ytt выбран автоматически.

  4. Под Validation нажмите Resubstitution Validation.

  5. Нажмите Start Session.

Обучите модель логистической регрессии.

  1. На вкладке Classification Learner, в разделе Model Type, кликают по стреле Show more, чтобы открыть галерею моделей. В разделе Logistic Regression Classifiers нажмите Logistic Regression.

  2. На вкладке Classification Learner, в разделе Training, нажимают Train.

  3. Когда приложение закончит обучение модель, постройте матрицу беспорядка. На вкладке Classification Learner, в разделе Plots, нажимают Confusion Matrix и выбирают Validation Data.

    Confusion matrix

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

Экспортируйте обученную модель логистической регрессии.

  1. На вкладке Classification Learner, в разделе Export, выбирают Export Model> Export Model.

  2. В диалоговом окне Export Model нажмите OK.

Приложение передает обученную модель, среди других переменных, в массиве структур trainedModel к рабочей области. Закройте Classification Learner .

Инициализируйте инкрементную модель Используя экспортируемую модель

В командной строке извлеките обученную модель логистической регрессии и имена классов от trainedModel. Моделью является GeneralizedLinearModel объект. Поскольку имена классов должны совпадать с типом данных переменной отклика, преобразуйте хранимую сумму в categorical.

Mdl = trainedModel.GeneralizedLinearModel;
ClassNames = categorical(trainedModel.ClassNames);

Извлеките точку пересечения и коэффициенты из модели. Точка пересечения является первым коэффициентом.

Bias = Mdl.Coefficients.Estimate(1);
Beta = Mdl.Coefficients.Estimate(2:end);

Вы не можете преобразовать GeneralizedLinearModel возразите против инкрементной модели непосредственно. Однако можно инициализировать инкрементную модель для бинарной классификации передающей информацией, усвоенной из приложения, такого как оцененные коэффициенты и имена классов.

Создайте инкрементную модель для бинарной классификации непосредственно. Задайте ученика, точку пересечения, содействующие оценки и имена классов, усвоенные из Classification Learner. Поскольку хорошие начальные значения коэффициентов существуют, и все имена классов известны, задают метрический период прогрева длины 0.

IncrementalMdl = incrementalClassificationLinear('Learner','logistic',...
    'Beta',Beta,'Bias',Bias,'ClassNames',ClassNames,...
    'MetricsWarmupPeriod',0)
IncrementalMdl = 

  incrementalClassificationLinear

            IsWarm: 0
           Metrics: [1×2 table]
        ClassNames: [Moving    NotMoving]
    ScoreTransform: 'logit'
              Beta: [60×1 double]
              Bias: -471.7873
           Learner: 'logistic'


  Properties, Methods

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

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

Выполните пошаговое обучение на 99%-м разделе данных при помощи updateMetricsAndFit функция. Симулируйте поток данных путем обработки 50 наблюдений за один раз. В каждой итерации:

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

  2. Сохраните потери и предполагаемый коэффициент β 14.

% Preallocation
nil = sum(idxil);
numObsPerChunk = 50;
nchunk = floor(nil/numObsPerChunk);
ce = array2table(zeros(nchunk,2),'VariableNames',["Cumulative" "Window"]);
beta14 = [IncrementalMdl.Beta(14); zeros(nchunk,1)];

% Incremental learning
for j = 1:nchunk
    ibegin = min(nil,numObsPerChunk*(j-1) + 1);
    iend   = min(nil,numObsPerChunk*j);
    idx = ibegin:iend;
    IncrementalMdl = updateMetricsAndFit(IncrementalMdl,Xil(idx,:),Yil(idx));
    ce{j,:} = IncrementalMdl.Metrics{"ClassificationError",:};
    beta14(j + 1) = IncrementalMdl.Beta(14);
end

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

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

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(beta14)
ylabel('\beta_{14}')
xlim([0 nchunk]);
xlabel('Iteration')

Trace plots of the epsilon-insensitive loss and last coefficient

Совокупная потеря постепенно изменяется с каждой итерацией (фрагмент 50 наблюдений), тогда как потеря окна переходит. Поскольку метрическое окно 200 по умолчанию и updateMetricsAndFit измеряет уровень каждые четыре итерации.

β 14 адаптируется к данным как updateMetricsAndFit фрагменты процессов наблюдений.

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

Приложения

Объекты

Функции

Похожие темы