exponenta event banner

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

В этом примере показано, как использовать гибкий рабочий процесс для реализации инкрементного обучения линейной регрессии с преквенциальной оценкой. Традиционно обученная модель инициализирует инкрементную модель. В частности, в этом примере выполняется следующее:

  1. Тренировка модели линейной регрессии по подмножеству данных.

  2. Преобразование традиционно обученной модели в модель инкрементного обучения для линейной регрессии.

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

  4. Для каждого блока используйте updateMetrics для измерения производительности модели с учетом входящих данных и последующего использования fit для соответствия модели этим данным.

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

Загрузите набор данных по жилью в Нью-Йорке за 2015 год и перетасуйте данные. Дополнительные сведения о данных см. в разделе Открытые данные NYC.

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

Предположим, что данные, собранные с Манхэттена (BOROUGH = 1) был собран с использованием нового метода, который удваивает его качество. Создание весовой переменной с атрибутами 2 на наблюдения, собранные с Манхэттена, и 1 ко всем другим замечаниям.

NYCHousing2015.W = ones(n,1) + (NYCHousing2015.BOROUGH == 1);

Извлечь переменную ответа SALEPRICE из таблицы. Для числовой устойчивости, шкала SALEPRICE около 1e6.

Y = NYCHousing2015.SALEPRICE/1e6;
NYCHousing2015.SALEPRICE = [];

Создайте фиктивные матрицы переменных из категориальных предикторов.

catvars = ["BOROUGH" "BUILDINGCLASSCATEGORY" "NEIGHBORHOOD"];
dumvarstbl = varfun(@(x)dummyvar(categorical(x)),NYCHousing2015,...
    'InputVariables',catvars);
dumvarmat = table2array(dumvarstbl);
NYCHousing2015(:,catvars) = [];

Все остальные числовые переменные в таблице рассматриваются как линейные предикторы продажной цены. Соедините матрицу фиктивных переменных с остальными данными предиктора. Транспонируйте данные.

idxnum = varfun(@isnumeric,NYCHousing2015,'OutputFormat','uniform');
X = [dumvarmat NYCHousing2015{:,idxnum}]';

Модель линейной регрессии поезда

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

idxtt = randsample([true false],n,true);
TTMdl = fitrlinear(X(:,idxtt),Y(idxtt),'ObservationsIn','columns')
TTMdl = 
  RegressionLinear
         ResponseName: 'Y'
    ResponseTransform: 'none'
                 Beta: [313x1 double]
                 Bias: 0.1889
               Lambda: 2.1977e-05
              Learner: 'svm'


  Properties, Methods

TTMdl является RegressionLinear объект модели, представляющий традиционно обученную модель линейной регрессии.

Преобразовать обученную модель

Преобразование традиционно обученной модели линейной регрессии в модель линейной регрессии для инкрементного обучения.

IncrementalMdl = incrementalLearner(TTMdl)
IncrementalMdl = 
  incrementalRegressionLinear

               IsWarm: 1
              Metrics: [1x2 table]
    ResponseTransform: 'none'
                 Beta: [313x1 double]
                 Bias: 0.1889
              Learner: 'svm'


  Properties, Methods

Внедрение инкрементного обучения

Используйте гибкий рабочий процесс для обновления метрик производительности модели и подгонки инкрементной модели к данным обучения путем вызова updateMetrics и fit функционирует отдельно. Моделирование потока данных путем одновременной обработки 500 наблюдений. При каждой итерации:

  1. Звонить updateMetrics для обновления кумулятивной и оконной нечувствительной потери модели с учетом входящего фрагмента наблюдений. Перезаписать предыдущую инкрементную модель для обновления потерь в Metrics собственность. Обратите внимание, что функция не подходит модели к порции данных - порция является «новыми» данными для модели. Укажите, что наблюдения ориентированы вдоль столбцов данных.

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

  3. Запишите потери и последний оцененный коэффициент β313.

% Preallocation
numObsPerChunk = 500;
nchunk = floor(n/numObsPerChunk);
ei = array2table(zeros(nchunk,2),'VariableNames',["Cumulative" "Window"]);
beta313 = zeros(nchunk,1);

% Incremental fitting
for j = 1:nchunk
    ibegin = min(n,numObsPerChunk*(j-1) + 1);
    iend   = min(n,numObsPerChunk*j);
    idx = ibegin:iend;
    IncrementalMdl = updateMetrics(IncrementalMdl,X(:,idx),Y(idx),'ObservationsIn','columns');
    ei{j,:} = IncrementalMdl.Metrics{"EpsilonInsensitiveLoss",:};
    IncrementalMdl = fit(IncrementalMdl,X(:,idx),Y(idx),'ObservationsIn','columns');
    beta313(j) = IncrementalMdl.Beta(end);
end

IncrementalMdl является incrementalRegressionLinear объект модели обучен всем данным в потоке.

Кроме того, можно использовать updateMetricsAndFit для обновления метрик производительности модели с учетом нового фрагмента данных, а затем подгонки модели к данным.

Проверка эволюции модели

Постройте график трассировки метрик производительности и оценочного коэффициента β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')

Figure contains 2 axes. Axes 1 contains 2 objects of type line. These objects represent Cumulative, Window. Axes 2 contains an object of type line.

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

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

См. также

Объекты

Функции

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