Инициализируйте модель пошагового обучения из модели регрессии SVM, обученной в Regression Learner

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

Откройте Regression Learner путем ввода regressionLearner в командной строке.

regressionLearner

В качестве альтернативы на вкладке Apps, под Machine Learning and Deep Learning, кликают по значку приложения.

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

  1. На вкладке Regression Learner, в разделе File, нажимают New Session > From Workspace.

  2. В диалоговом окне New Session, под Переменной Набора данных, выбирают набор данных NYCHousing2015tt.

  3. Под Response выберите переменную отклика SALEPRICE.

  4. Нажмите Start Session.

Приложение реализует 5-кратную перекрестную проверку по умолчанию.

Обучите линейную модель регрессии SVM. Настройте только гиперпараметр Epsilon при помощи Байесовой оптимизации.

  1. На вкладке Regression Learner, в разделе Model Type, кликают по стреле, чтобы расширить список моделей. В разделе Support Vector Machines выберите Optimizable SVM Optimizable SVM button.

  2. На вкладке Regression Learner, в разделе Model Type, выбирают Advanced.

  3. В диалоговом окне Select SVM Hyperparameters to Optimize:

    1. Отмените выбор полей Optimize для всех опций кроме Epsilon.

    2. Установите значение Kernel scale к Manual и 1.

    3. Отмените выбор поля Value Standardize data.

    SVM hyperparameter optimization options

  4. Отклоните диалоговое окно Select SVM Hyperparameters to Optimize.

  5. На вкладке Regression Learner, в разделе Training, выбирают Train.

Regression Learner показывает график минимума обобщения MSE модели, в то время как оптимизация прогрессирует.

Minimum MSE of the model

Экспортируйте обученную, оптимизированную линейную модель регрессии SVM.

  1. На вкладке Regression Learner, в разделе Export, выбирают Export Model.

  2. В диалоговом окне 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 наблюдений за один раз. В каждой итерации:

  1. Вызовите updateMetricsAndFit обновить совокупный эпсилон и эпсилон окна нечувствительная потеря модели, учитывая входящий фрагмент наблюдений. Перезапишите предыдущую инкрементную модель, чтобы обновить потери в Metrics свойство. Обратите внимание на то, что функция не подбирает модель к фрагменту данных — фрагмент является "новыми" данными для модели.

  2. Сохраните потери и в последний раз оцененный коэффициент β 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')

Trace plots of the epsilon-insensitive loss and last coefficient

Совокупная потеря постепенно изменяется с итерацией (фрагмент 500 наблюдений), тогда как потеря окна переходит. Поскольку метрическое окно 200 по умолчанию, и updateMetrcisAndFit измеряет уровень на основе последних 200 наблюдений в каждых 500 фрагментах наблюдения.

β 313 изменений резко, затем выравнивается как updateMetrcisAndFit фрагменты процессов наблюдений.

Смотрите также

Приложения

Объекты

Функции

Похожие темы