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