В этом примере показано, как обучить модель логистической регрессии с помощью приложения 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
Либо на вкладке Приложения щелкните стрелку Показать дополнительные, чтобы открыть галерею приложений. В разделе Машинное обучение и Глубокое обучение щелкните значок приложения.
Выберите набор данных обучения и переменные.
На вкладке «Классификатор» в разделе «Файл» выберите «Новый сеанс» > «Из рабочей области».
В диалоговом окне Создать сессию из рабочей области (New Session from Workspace) в разделе Переменная набора данных (Data Set Variable) выберите предикторную переменную Xtt.
В разделе Ответ (Response) щелкните Из рабочей области (From workspace); обратите внимание, что Ytt выбирается автоматически.
В разделе Проверка (Validation) щелкните Проверка повторной выборки (Resubstitution Validation).
Щелкните Начать сеанс (Start Session).
Обучение модели логистической регрессии.
На вкладке Ученик по классификации (Classification Learner) в разделе Тип модели (Model Type) щелкните стрелку Показать дополнительные (Show more), чтобы открыть галерею моделей. В разделе «Классификаторы логистической регрессии» выберите «Логистическая регрессия».
На вкладке Classification Learner в разделе Training нажмите Train.
Когда приложение закончит обучение модели, постройте таблицу путаницы. На вкладке «Классификатор» в разделе «Графики» щелкните «Матрица путаницы» и выберите «Данные проверки».

Матрица путаницы предполагает, что модель хорошо классифицирует наблюдения в выборке.
Экспорт обученной модели логистической регрессии.
На вкладке «Классификатор» в разделе «Экспорт» выберите «Экспорт модели» > «Экспорт модели».
В диалоговом окне Экспорт модели (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, MethodsIncrementalMdl является incrementalClassificationLinear объект модели для инкрементного обучения с использованием модели логистической регрессии. Поскольку указаны коэффициенты и все имена классов, можно прогнозировать ответы, передавая IncrementalMdl и данные для predict.
Инкрементное изучение раздела данных 99% с помощью updateMetricsAndFit функция. Моделирование потока данных путем одновременной обработки 50 наблюдений. При каждой итерации:
Звонить updateMetricsAndFit для обновления кумулятивной и оконной ошибки классификации модели с учетом входящего фрагмента наблюдений. Перезаписать предыдущую инкрементную модель для обновления потерь в Metrics собственность. Обратите внимание, что функция не подходит модели к порции данных - порция является «новыми» данными для модели.
Запишите потери и расчетный коэффициент β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')

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