В этом примере показано, как обучить модель логистической регрессии использование 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 путем ввода classificationLearner
в командной строке.
classificationLearner
В качестве альтернативы на вкладке Apps, под Machine Learning and Deep Learning, кликают по значку приложения.
Выберите обучающий набор данных и переменные.
На вкладке Classification Learner, в разделе File, нажимают New Session > From Workspace.
В диалоговом окне New Session, под Переменной Набора данных, выбирают переменный предиктор Xtt.
Под Response выберите From workspace и Ytt.
Под Validation выберите No Validation.
Нажмите Start Session.
Обучите модель логистической регрессии.
На вкладке Classification Learner, в разделе Model Type, кликают по стреле, чтобы расширить список моделей. В разделе Logistic Regression Classifiers выберите Logistic Regression .
На вкладке Classification Learner, в разделе Training, выбирают Train.
Когда Classification Learner закончит обучение модель, постройте матрицу беспорядка. На вкладке Classification Leaner, в разделе Plots, выбирают Confusion Matrix.
Матрица беспорядка предполагает, что модель классифицирует наблюдения в выборке хорошо.
Экспортируйте обученную модель логистической регрессии.
На вкладке Classification Learner, в разделе Export, выбирают Export Model.
В диалоговом окне 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 наблюдений за один раз. В каждой итерации:
Вызовите 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
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')
Совокупная потеря постепенно изменяется с итерацией (фрагмент 50 наблюдений), тогда как потеря окна переходит. Поскольку метрическое окно 200 по умолчанию, и updateMetrcisAndFit
измеряет уровень каждые 4 фрагмента.
β 14 адаптируется к данным как updateMetrcisAndFit
фрагменты процессов наблюдений.