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

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

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

Загрузите набор данных о корпусе NYC 2015 года и перетащите данные. Для получения дополнительной информации о данных смотрите Открытые данные NYC.

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 обрабатывает фрагменты наблюдений.

См. также

Приложения

Объекты

Функции

Похожие темы