exponenta event banner

Инициализация модели инкрементного обучения из модели регрессии SVM, обученной слушателю регрессии

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

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

Загрузите набор данных по жилью в Нью-Йорке за 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% данных и резервирования оставшихся данных для инкрементного обучения.

Обучающийся регрессии поддерживает категориальные переменные. Однако, поскольку модели 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,:);

Настройка и обучение модели с использованием регрессионного ученика

Открытие регрессионного ученика путем ввода regressionLearner в командной строке.

regressionLearner

Либо на вкладке Приложения щелкните стрелку Показать дополнительные, чтобы открыть галерею приложений. В разделе Машинное обучение и Глубокое обучение щелкните значок приложения.

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

  1. На вкладке Обучающийся регрессии в разделе Файл выберите Создать сеанс, а затем выберите Из рабочей области.

  2. В диалоговом окне «Новая сессия из рабочей области» в разделе «Переменная набора данных» выберите NYCHousing2015tt набора данных.

  3. В разделе Ответ убедитесь, что выбрана переменная ответа SALEPRICE.

  4. Щелкните Начать сеанс (Start Session).

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

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

  1. На вкладке Обучающийся регрессии (Regression Learner) в разделе Тип модели (Model Type) щелкните стрелку Показать дополнительные (Show more), чтобы открыть галерею приложений. В разделе Поддерживающие векторные машины (Support Vector Machines) щелкните Оптимизируемый SVM (Optimizable SVM).

  2. На вкладке «Регрессионный обучающийся» в разделе «Тип модели» выберите «Дополнительно», а затем «Дополнительно».

  3. В диалоговом окне «Выбор гиперпараметров SVM для оптимизации»:

    1. Снимите флажки «Оптимизировать» для всех параметров, кроме «Эпсилона».

    2. Задайте значение масштаба ядра, равное Manual и 1.

    3. Снимите флажок «Значение» «Стандартизировать данные».

    SVM hyperparameter optimization options

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

  5. На вкладке «Обучающийся регрессии» в разделе «Обучение» нажмите кнопку «Обучение».

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

Minimum MSE of the model

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

  1. На вкладке «Регрессионный обучающийся» в разделе «Экспорт» выберите «Экспорт модели» и «Экспорт модели».

  2. В диалоговом окне Экспорт модели (Export Model) нажмите кнопку ОК.

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

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

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

См. также

Приложения

Объекты

Функции

Связанные темы