updateMetricsAndFit

Обновите метрики производительности модели пошагового обучения на новых данных, затем обучите модель

Описание

Учитывая потоковую передачу данных, updateMetricsAndFit сначала оценивает эффективность сконфигурированной модели пошагового обучения для линейной регрессии (incrementalRegressionLinear объект) или линейная, бинарная классификация (incrementalClassificationLinear объект) путем вызова updateMetrics на входящих данных, и затем updateMetricsAndFit подбирает модель к тем данным путем вызова fit. Другими словами, updateMetricsAndFit выполняет prequential evaluation, потому что он обрабатывает каждый входящий фрагмент данных как набор тестов, и он отслеживает показатели производительности, измеренные кумулятивно и по заданному окну [1].

updateMetricsAndFit обеспечивает простой способ обновить метрики производительности модели и обучить модель на каждом фрагменте данных. В отличие от этого можно выполнить операции отдельно путем вызова updateMetrics и затем fit вместо этого, который допускает больше гибкости (например, можно решить, необходимо ли обучить основанное на модели на его эффективности на фрагменте данных).

пример

Mdl = updateMetricsAndFit(Mdl,X,Y) возвращает модель Mdl пошагового обучения, который является входной моделью Mdl пошагового обучения со следующими модификациями:

  1. updateMetricsAndFit измеряет производительность модели на входящем предикторе и данных об ответе, X и Y, соответственно. Когда входной моделью является warm (Mdl.IsWarm true), updateMetricsAndFit перезаписи ранее вычислили метрики, сохраненные в Metrics свойство, с новыми значениями. В противном случае, updateMetricsAndFit хранилища NaN значения в Metrics вместо этого.

  2. updateMetricsAndFit подбирает модифицированную модель к входящим данным путем выполнения этой процедуры:

    1. Инициализируйте решатель настройками и линейным коэффициентом модели и сместите оценки входной модели Mdl.

    2. Подбирайте модель к данным, и хранит обновленные содействующие оценки и настройки в выходной модели Mdl.

Модели ввода и вывода являются совпадающим типом данных.

пример

Mdl = updateMetricsAndFit(Mdl,X,Y,Name,Value) дополнительные опции использования заданы одним или несколькими аргументами пары "имя-значение". Например, можно задать веса наблюдения или что столбцы матрицы данных предиктора соответствуют наблюдениям.

Примеры

свернуть все

Создайте инкрементную линейную модель SVM по умолчанию для бинарной классификации.

Mdl = incrementalClassificationLinear()
Mdl = 
  incrementalClassificationLinear

            IsWarm: 0
           Metrics: [1×2 table]
        ClassNames: [1×0 double]
    ScoreTransform: 'none'
              Beta: [0×1 double]
              Bias: 0
           Learner: 'svm'


  Properties, Methods

Mdl incrementalClassificationLinear модель. Все его свойства только для чтения.

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

Загрузите набор данных деятельности человека. Случайным образом переставьте данные.

load humanactivity
n = numel(actid);
rng(1); % For reproducibility
idx = randsample(n,n);
X = feat(idx,:);
Y = actid(idx);

Для получения дополнительной информации на наборе данных, отобразите Description.

Ответы могут быть одним из пяти классов. Разделите пополам ответ путем идентификации, перемещается ли предмет (actid > 2).

Y = Y > 2;

Используйте updateMetricsAndfit подбирать инкрементную модель к обучающим данным, во фрагментах 50 наблюдений за один раз, симулировать поток данных. В каждой итерации:

  • Процесс 50 наблюдений.

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

  • Хранилище β1, совокупные метрики и метрики окна, чтобы контролировать их эволюцию во время пошагового обучения.

% Preallocation
numObsPerChunk = 50;
nchunk = floor(n/numObsPerChunk);
ce = array2table(zeros(nchunk,2),'VariableNames',["Cumulative" "Window"]);
beta1 = zeros(nchunk,1);    

% Incremental fitting
for j = 1:nchunk
    ibegin = min(n,numObsPerChunk*(j-1) + 1);
    iend   = min(n,numObsPerChunk*j);
    idx = ibegin:iend;    
    Mdl = updateMetricsAndFit(Mdl,X(idx,:),Y(idx));
    ce{j,:} = Mdl.Metrics{"ClassificationError",:};
    beta1(j + 1) = Mdl.Beta(1);
end

Mdl incrementalClassificationLinear объект модели, который испытал все данные в потоке. Во время пошагового обучения и после того, как модель подогревается, updateMetricsAndFit проверяет эффективность модели на входящем наблюдении, затем подбирает модель к тому наблюдению.

Чтобы видеть, как показатели производительности и β1 развитый во время обучения, постройте их на отдельных подграфиках.

figure;
subplot(2,1,1)
plot(beta1)
ylabel('\beta_1')
xlim([0 nchunk]);
xline(Mdl.EstimationPeriod/numObsPerChunk,'r-.');
subplot(2,1,2)
h = plot(ce.Variables);
xlim([0 nchunk]);
ylabel('Classification Error')
xline(Mdl.EstimationPeriod/numObsPerChunk,'r-.');
xline((Mdl.EstimationPeriod + Mdl.MetricsWarmupPeriod)/numObsPerChunk,'g-.');
legend(h,ce.Properties.VariableNames)
xlabel('Iteration')

График предлагает тот updateMetricsAndFit:

  • Подгонки β1 во время всех итераций пошагового обучения

  • Вычисляет показатели производительности только после метрического периода прогрева

  • Вычисляет совокупные метрики во время каждой итерации

  • Вычисляет метрики окна после обработки 500 наблюдений

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

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

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

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

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

n = size(NYCHousing2015,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',...
    'Weights',NYCHousing2015.W(idxtt))
TTMdl = 
  RegressionLinear
         ResponseName: 'Y'
    ResponseTransform: 'none'
                 Beta: [313×1 double]
                 Bias: 0.1116
               Lambda: 2.1977e-05
              Learner: 'svm'


  Properties, Methods

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

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

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

IncrementalMdl = incrementalLearner(TTMdl)
IncrementalMdl = 
  incrementalRegressionLinear

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


  Properties, Methods

Отследите показатели производительности и подбирайте модель

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

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

  2. Сохраните потери и в последний раз оцененный коэффициент β313.

% Preallocation
idxil = ~idxtt;
nil = sum(idxil);
numObsPerChunk = 500;
nchunk = floor(nil/numObsPerChunk);
ei = array2table(zeros(nchunk,2),'VariableNames',["Cumulative" "Window"]);
beta313 = [IncrementalMdl.Beta(end); zeros(nchunk,1)];
Xil = X(:,idxil);
Yil = Y(idxil);
Wil = NYCHousing2015.W(idxil);

% Incremental fitting
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),...
        'ObservationsIn','columns','Weights',Wil(idx));
    ei{j,:} = IncrementalMdl.Metrics{"EpsilonInsensitiveLoss",:};
    beta313(j + 1) = 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')

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

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

Входные параметры

свернуть все

Модель пошагового обучения, уровень которой измерен и затем подходящий к данным в виде incrementalClassificationLinear или incrementalRegressionLinear объект модели, созданный непосредственно или путем преобразования поддерживаемого традиционно обученного использования модели машинного обучения incrementalLearner. Для получения дополнительной информации смотрите, что страница с описанием соответствует проблеме изучения.

Если Mdl.IsWarm false, updateMetricsAndFit не отслеживает эффективность модели. Для получения дополнительной информации см. Алгоритмы.

Фрагмент данных о предикторе, с которыми можно измерить производительность модели, и затем подбирать модель к в виде матрицы с плавающей точкой наблюдений n и Mdl.NumPredictors переменные предикторы. Значение 'ObservationsIn' аргумент пары "имя-значение" определяет ориентацию переменных и наблюдения.

Продолжительность наблюдения маркирует Y и количество наблюдений в X должно быть равным; Y (j) метка наблюдения (строка или столбец) j в X.

Примечание

  • Если Mdl.NumPredictors = 0, updateMetricsAndFit выводит количество предикторов от X, и устанавливает конгруэнтное свойство выходной модели. В противном случае, если количество переменных предикторов в данных о потоковой передаче изменяется от Mdl.NumPredictors, updateMetricsAndFit выдает ошибку.

  • updateMetricsAndFit поддержки только входные данные о предикторе с плавающей точкой. Если входная модель Mdl представляет конвертированное, традиционно обучил подгонку модели к категориальным данным, использовать dummyvar преобразовывать каждую категориальную переменную в числовую матрицу фиктивных переменных и конкатенировать все фиктивные переменные матрицы и любые другие числовые предикторы. Для получения дополнительной информации смотрите Фиктивные Переменные.

Типы данных: single | double

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

Продолжительность наблюдения маркирует Y и количество наблюдений в X должно быть равным; Y (j) метка наблюдения j (строка или столбец) в X.

Для проблем классификации:

  • updateMetricsAndFit классификация двоичных файлов поддержек только.

  • Когда ClassNames свойство входной модели Mdl непусто, следующие условия применяются:

    • Если Y содержит метку, которая не является членом Mdl.ClassNames, updateMetricsAndFit выдает ошибку.

    • Тип данных Y и Mdl.ClassNames должно быть то же самое.

Типы данных: char | string | cell | categorical | logical | single | double

Примечание

  • Если наблюдение (предиктор или метка) или вес Weight содержит по крайней мере одно отсутствие (NaNЗначение, updateMetricsAndFit игнорирует наблюдение. Следовательно, updateMetricsAndFit использование меньше, чем наблюдения n, чтобы вычислить производительность модели.

  • Размер фрагмента n и гиперпараметр стохастического градиентного спуска (SGD) обрабатывает размер в пакетном режиме (Mdl.BatchSize) могут быть различные значения. Если n <Mdl.BatchSize, updateMetricsAndFit использует n доступные наблюдения, когда он применяет SGD.

Аргументы в виде пар имя-значение

Задайте дополнительные разделенные запятой пары Name,Value аргументы. Name имя аргумента и Value соответствующее значение. Name должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN.

Пример: 'ObservationsIn','columns','Weights',W указывает, что столбцы матрицы предиктора соответствуют наблюдениям и векторному W содержит веса наблюдения, чтобы применяться во время пошагового обучения.

Размерность наблюдения данных о предикторе в виде разделенной запятой пары, состоящей из 'ObservationsIn' и 'columns' или 'rows'.

Фрагмент весов наблюдения в виде разделенной запятой пары, состоящей из 'Weights' и вектор с плавающей точкой из положительных значений. updateMetricsAndFit взвешивает наблюдения в X с соответствующими значениями в Weights. Размер Weights должен равняться n, который является количеством наблюдений в X.

По умолчанию, Weights единицы (n,1).

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

Типы данных: double | single

Выходные аргументы

свернуть все

Обновленная модель пошагового обучения, возвращенная как объект модели пошагового обучения совпадающего типа данных как входная модель Mdl, любой incrementalClassificationLinear или incrementalRegressionLinear.

Когда вы вызываете updateMetricsAndFit, следующие условия применяются:

  • Если модель не является теплой, updateMetricsAndFit не вычисляет показатели производительности. В результате Metrics свойство Mdl остается абсолютно составленным из NaN значения. Для получения дополнительной информации см. Алгоритмы.

  • Если Mdl.EstimationPeriod > 0, инкрементные подходящие функции updateMetricsAndFit и fit оцените гиперпараметры с помощью первого Mdl.EstimationPeriod наблюдения передали им; они не обучают входную модель к тем данным. Однако, если входящий фрагмент наблюдений n больше или равен количеству наблюдений, оставленных в период оценки m, updateMetricsAndFit оценочные гиперпараметры с помощью первого n – наблюдения m, и подбирают входную модель к остающимся наблюдениям m. Следовательно, обновления программного обеспечения Beta и Bias свойства, свойства гиперпараметра и свойства ведения записей, такие как NumTrainingObservations.

Для проблем классификации, если ClassNames свойство входной модели Mdl пустой массив, updateMetricsAndFit устанавливает ClassNames свойство выходной модели Mdl к unique(Y).

Алгоритмы

свернуть все

Показатели производительности

  • updateMetricsAndFit дорожки только метрики производительности модели, заданные метками строки таблицы в Mdl.Metrics, из новых данных, когда инкрементной моделью является warm (IsWarm свойством является true). Инкрементная модель является теплой после fit подбирайте инкрементную модель к Mdl.MetricsWarmupPeriod наблюдения, который является metrics warm-up period.

    Если Mdl.EstimationPeriod > 0, функции оценивают гиперпараметры прежде, чем подбирать модель к данным, и, поэтому, функции должны обработать дополнительный EstimationPeriod наблюдения перед моделью запускают метрический период прогрева.

  • Metrics свойство инкрементной модели хранит две формы каждого показателя производительности как переменные (столбцы) таблицы, Cumulative и Window, с отдельными метриками, ориентированными вдоль строк. Когда инкрементная модель является теплой, updateMetrics обновите метрики на следующих частотах:

    • Cumulative — Функции вычисляют совокупные метрики начиная с запуска отслеживания производительности модели. Функции обновляют метрики каждый раз, когда вы вызываете функции и основываете вычисление на целом предоставленном наборе данных.

    • Window — Функции вычисляют метрики на основе всех наблюдений в окне, определенном Mdl.MetricsWindowSize аргумент пары "имя-значение". Mdl.MetricsWindowSize также определяет частоту в который обновления программного обеспечения Window метрики. Например, если Mdl.MetricsWindowSize 20, функции вычисляют метрики на основе последних 20 наблюдений в данных, которыми снабжают (X((end - 20 + 1):end,:) и Y((end - 20 + 1):end)).

      Инкрементные функции, которые отслеживают показатели производительности в окне с помощью следующего процесса:

      1. Для каждой заданной метрики сохраните буфер длины Mdl.MetricsWindowSize и буфер весов наблюдения.

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

      3. Когда буфер заполнен, перезапись Mdl.Metrics.Window со средневзвешенной эффективностью в метрическом окне. Если буфер переполнен когда функциональные процессы пакет наблюдений, последнего, входящего Mdl.MetricsWindowSize наблюдения вводят буфер, и самые ранние наблюдения удалены из буфера. Например, предположите Mdl.MetricsWindowSize 20, метрический буфер имеет 10 значений от ранее обработанного пакета, и поступают 15 значений. Чтобы составить длину 20 окон, функции используют измерения от 15 входящих наблюдений и последние 5 измерений от предыдущего пакета.

Веса наблюдения

Для проблем классификации, если предшествующее вероятностное распределение класса известно (Mdl.Prior не состоит из NaN значения, updateMetricsAndFit нормирует веса наблюдения, чтобы суммировать к предшествующим вероятностям класса в соответствующих классах. Это действие подразумевает, что веса наблюдения являются соответствующими предшествующими вероятностями класса по умолчанию.

Для проблем регрессии или если предшествующее вероятностное распределение класса неизвестно, программное обеспечение нормирует заданные веса наблюдения, чтобы суммировать к 1 каждому разу, когда вы вызываете updateMetricsAndFit.

Ссылки

[1] Bifet, Альберт, Ricard Gavaldá, Джеффри Холмс и Бернхард Пфарингер. Machine Learning for Data Streams with Practical Example in MOA. Кембридж, MA: нажатие MIT, 2007.

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

Объекты

Функции

Введенный в R2020b