В этом примере показано, как настроить и обучить линейную модель регрессии SVM использование Regression Learner. Затем в командной строке инициализируйте и обучите инкрементную модель линейной регрессии SVM с помощью информации, полученной от обучения в приложении.
Загрузите 2 015 наборов данных корпуса Нью-Йорк Сити и переставьте данные. Для получения дополнительной информации о данных смотрите, что Нью-Йорк Сити Открывает Данные.
load(fullfile(matlabroot,'examples','stats','data','NYCHousing2015.mat')) rng(1); % For reproducibility n = size(NYCHousing2015,1); idxshuff = randsample(n,n); NYCHousing2015 = NYCHousing2015(idxshuff,:);
Для получения дополнительной информации на наборе данных, введите Description
в командной строке.
Для числовой устойчивости масштабируйте SALEPRICE
1e6
.
NYCHousing2015.SALEPRICE = NYCHousing2015.SALEPRICE/1e6;
Считайте обучение линейной моделью регрессии SVM приблизительно к 1% данных и резервированием остающихся данных для пошагового обучения.
Regression Learner поддерживает категориальные переменные. Однако, потому что модели SVM требуют, чтобы макет закодировал категориальные переменные и BUILDINGCLASSCATEGORY
и NEIGHBORHOOD
переменные содержат много уровней и некоторых с низким представлением, вероятность, что раздел не имеет всех категорий, высока. Поэтому фиктивный код все категориальные переменные. Конкатенируйте матрицу фиктивных переменных к остальной части числовых переменных.
catvars = ["BOROUGH" "BUILDINGCLASSCATEGORY" "NEIGHBORHOOD"]; dumvars = splitvars(varfun(@(x)dummyvar(categorical(x)),NYCHousing2015,... 'InputVariables',catvars)); NYCHousing2015(:,catvars) = []; idxnum = varfun(@isnumeric,NYCHousing2015,'OutputFormat','uniform'); NYCHousing2015 = [dumvars NYCHousing2015(:,idxnum)];
Случайным образом разделите данные в 1% и 99% подмножеств путем вызова cvpartition
и определение затяжки (тест) демонстрационная пропорция 0.99
. Составьте таблицы для 1% и 99% разделов.
cvp = cvpartition(n,'HoldOut',0.99);
idxtt = cvp.training;
idxil = cvp.test;
NYCHousing2015tt = NYCHousing2015(idxtt,:);
NYCHousing2015il = NYCHousing2015(idxil,:);
Откройте Regression Learner путем ввода regressionLearner
в командной строке.
regressionLearner
В качестве альтернативы на вкладке Apps, под Machine Learning and Deep Learning, кликают по значку приложения.
Выберите обучающий набор данных и переменные.
На вкладке Regression Learner, в разделе File, нажимают New Session > From Workspace.
В диалоговом окне New Session, под Переменной Набора данных, выбирают набор данных NYCHousing2015tt.
Под Response выберите переменную отклика SALEPRICE.
Нажмите Start Session.
Приложение реализует 5-кратную перекрестную проверку по умолчанию.
Обучите линейную модель регрессии SVM. Настройте только гиперпараметр Epsilon при помощи Байесовой оптимизации.
На вкладке Regression Learner, в разделе Model Type, кликают по стреле, чтобы расширить список моделей. В разделе Support Vector Machines выберите Optimizable SVM .
На вкладке Regression Learner, в разделе Model Type, выбирают Advanced.
В диалоговом окне Select SVM Hyperparameters to Optimize:
Отмените выбор полей Optimize для всех опций кроме Epsilon.
Установите значение Kernel scale к Manual
и 1
.
Отмените выбор поля Value Standardize data.
Отклоните диалоговое окно Select SVM Hyperparameters to Optimize.
На вкладке Regression Learner, в разделе Training, выбирают Train.
Regression Learner показывает график минимума обобщения MSE модели, в то время как оптимизация прогрессирует.
Экспортируйте обученную, оптимизированную линейную модель регрессии SVM.
На вкладке Regression Learner, в разделе Export, выбирают Export Model.
В диалоговом окне Export Model выберите OK.
Regression Learner передает обученную модель, среди других переменных, в массиве структур trainedModel
к рабочей области. Можно отклонить Regression Learner .
Извлеките обученную модель регрессии SVM из trainedModel
.
Mdl = trainedModel.RegressionSVM;
Преобразуйте модель в инкрементную модель.
IncrementalMdl = incrementalLearner(Mdl) IncrementalMdl.Epsilon
IncrementalMdl = incrementalRegressionLinear IsWarm: 1 Metrics: [1×2 table] ResponseTransform: 'none' Beta: [44×1 double] Bias: 19.7917 Learner: 'svm' Properties, Methods
IncrementalMdl
incrementalRegressionLinear
объект модели для пошагового обучения с помощью линейной модели регрессии SVM. incrementalLearner
инициализирует IncrementalMdl
использование коэффициентов и оптимизированного значения Epsilon
гиперпараметр усвоен из Mdl
. Поэтому можно предсказать ответы путем передачи IncrementalMdl
и данные к predict
. Кроме того, IsWarm
свойством является true
, что означает, что функции пошагового обучения измеряют производительность модели от запуска пошагового обучения.
Поскольку функции пошагового обучения принимают матрицы с плавающей точкой только, создают матрицы для данных об ответе и предиктора.
Xil = NYCHousing2015il{:,1:(end-1)}; Yil = NYCHousing2015il{:,end};
Используйте updateMetricsAndFit
функция, чтобы выполнить пошаговое обучение на 99%-м разделе данных. Симулируйте поток данных путем обработки 500 наблюдений за один раз. В каждой итерации:
Вызовите updateMetricsAndFit
обновить совокупный эпсилон и эпсилон окна нечувствительная потеря модели, учитывая входящий фрагмент наблюдений. Перезапишите предыдущую инкрементную модель, чтобы обновить потери в Metrics
свойство. Обратите внимание на то, что функция не подбирает модель к фрагменту данных — фрагмент является "новыми" данными для модели.
Сохраните потери и в последний раз оцененный коэффициент β 313.
% Preallocation nil = sum(idxil); numObsPerChunk = 500; nchunk = floor(nil/numObsPerChunk); ei = array2table(zeros(nchunk,2),'VariableNames',["Cumulative" "Window"]); beta313 = [IncrementalMdl.Beta(end); 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)); ei{j,:} = IncrementalMdl.Metrics{"EpsilonInsensitiveLoss",:}; beta313(j + 1) = IncrementalMdl.Beta(end); end
IncrementalMdl
incrementalRegressionLinear
объект модели, который испытал все данные в потоке.
Постройте трассировку графики показателей производительности и оцененного коэффициента β 313.
figure; subplot(2,1,1) h = plot(ei.Variables); xlim([0 nchunk]); ylabel('Epsilon Insensitive Loss') legend(h,ei.Properties.VariableNames) subplot(2,1,2) plot(beta313) ylabel('\beta_{313}') xlim([0 nchunk]); xlabel('Iteration')
Совокупная потеря постепенно изменяется с итерацией (фрагмент 500 наблюдений), тогда как потеря окна переходит. Поскольку метрическое окно 200 по умолчанию, и updateMetrcisAndFit
измеряет уровень на основе последних 200 наблюдений в каждых 500 фрагментах наблюдения.
β 313 изменений резко, затем выравнивается как updateMetrcisAndFit
фрагменты процессов наблюдений.