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

В этом примере показано, как настроить и обучить линейную модель регрессии SVM использование приложения Regression Learner. Затем в командной строке инициализируйте и обучите инкрементную модель линейной регрессии SVM с помощью информации, полученной от обучения в приложении.

Загрузите и предварительно обработайте данные

Загрузите 2 015 наборов данных корпуса Нью-Йорк Сити и переставьте данные. Для получения дополнительной информации о данных смотрите, что Нью-Йорк Сити Открывает Данные.

load NYCHousing2015
rng(1); % For reproducibility
n = size(NYCHousing2015,1);
idxshuff = randsample(n,n);
NYCHousing2015 = NYCHousing2015(idxshuff,:);

Для числовой устойчивости масштабируйте 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, кликните по стреле Show more, чтобы открыть галерею Apps. Под Machine Learning and Deep Learning кликните по значку приложения.

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

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

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

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

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

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

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

  1. На вкладке Regression Learner, в разделе Model Type, кликают по стреле Show more, чтобы открыть галерею Apps. В разделе Support Vector Machines нажмите Optimizable SVM.

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

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

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

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

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

    SVM hyperparameter optimization options

  4. Закройте диалоговое окно.

  5. На вкладке Regression Learner, в разделе Training, нажимают Train.

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

Minimum MSE of the model

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

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

  2. В диалоговом окне Export Model нажмите OK.

Приложение передает обученную модель, среди других переменных, в массиве структур trainedModel к рабочей области. Закройте Regression Learner .

Преобразуйте экспортируемую модель в инкрементную модель

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

Mdl = trainedModel.RegressionSVM;

Преобразуйте модель в инкрементную модель.

IncrementalMdl = incrementalLearner(Mdl)
IncrementalMdl.Epsilon
IncrementalMdl = 

  incrementalRegressionLinear

               IsWarm: 1
              Metrics: [1×2 table]
    ResponseTransform: 'none'
                 Beta: [312×1 double]
                 Bias: 10.1437
              Learner: 'svm'


  Properties, Methods


ans =

    1.4453

IncrementalMdl incrementalRegressionLinear объект модели для пошагового обучения с помощью линейной модели регрессии SVM. incrementalLearner инициализирует IncrementalMdl использование коэффициентов и оптимизированного значения Epsilon гиперпараметр усвоен из Mdl. Поэтому можно предсказать ответы путем передачи IncrementalMdl и данные к predict. Кроме того, IsWarm свойством является true, что означает, что функции пошагового обучения измеряют производительность модели от запуска пошагового обучения.

Реализуйте пошаговое обучение

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

Xil = NYCHousing2015il{:,1:(end-1)};
Yil = NYCHousing2015il{:,end};

Выполните пошаговое обучение на 99%-м разделе данных при помощи updateMetricsAndFit функция. Симулируйте поток данных путем обработки 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 по умолчанию, updateMetricsAndFit измеряет уровень на основе последних 200 наблюдений в каждых 500 фрагментах наблюдения.

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

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

Приложения

Объекты

Функции

Похожие темы