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

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

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

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

load(fullfile(matlabroot,'examples','stats','data','humanactivity.mat'))
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, под Machine Learning and Deep Learning, кликают по значку приложения.

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

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

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

  3. Под Response выберите From workspace и Ytt.

  4. Под Validation выберите No Validation.

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

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

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

  2. На вкладке Classification Learner, в разделе Training, выбирают Train.

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

    Confusion matrix

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

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

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

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

Classification Learner передает обученную модель, среди других переменных, в массиве структур trainedModel к рабочей области. Можно отклонить Regression 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.

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

Используйте updateMetricsAndFit функция, чтобы выполнить пошаговое обучение на 99%-м разделе данных. Симулируйте поток данных путем обработки 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 incrementalRegressionLinear объект модели, который испытал все данные в потоке.

Постройте трассировку графики показателей производительности и β 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 по умолчанию, и updateMetrcisAndFit измеряет уровень каждые 4 фрагмента.

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

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

Приложения

Объекты

Функции

Похожие темы