exponenta event banner

Инициализация модели инкрементного обучения на основе модели логистической регрессии, обученной классификатору

В этом примере показано, как обучить модель логистической регрессии с помощью приложения 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);

Обучение модели с использованием классификатора

Открыть классификатор путем ввода classificationLearner в командной строке.

classificationLearner

Либо на вкладке Приложения щелкните стрелку Показать дополнительные, чтобы открыть галерею приложений. В разделе Машинное обучение и Глубокое обучение щелкните значок приложения.

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

  1. На вкладке «Классификатор» в разделе «Файл» выберите «Новый сеанс» > «Из рабочей области».

  2. В диалоговом окне Создать сессию из рабочей области (New Session from Workspace) в разделе Переменная набора данных (Data Set Variable) выберите предикторную переменную Xtt.

  3. В разделе Ответ (Response) щелкните Из рабочей области (From workspace); обратите внимание, что Ytt выбирается автоматически.

  4. В разделе Проверка (Validation) щелкните Проверка повторной выборки (Resubstitution Validation).

  5. Щелкните Начать сеанс (Start Session).

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

  1. На вкладке Ученик по классификации (Classification Learner) в разделе Тип модели (Model Type) щелкните стрелку Показать дополнительные (Show more), чтобы открыть галерею моделей. В разделе «Классификаторы логистической регрессии» выберите «Логистическая регрессия».

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

  3. Когда приложение закончит обучение модели, постройте таблицу путаницы. На вкладке «Классификатор» в разделе «Графики» щелкните «Матрица путаницы» и выберите «Данные проверки».

    Confusion matrix

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

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

  1. На вкладке «Классификатор» в разделе «Экспорт» выберите «Экспорт модели» > «Экспорт модели».

  2. В диалоговом окне Экспорт модели (Export Model) нажмите кнопку ОК.

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

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

В командной строке извлеките обученную модель логистической регрессии и имена классов из 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 обрабатывает куски наблюдений.

См. также

Приложения

Объекты

Функции

Связанные темы