updateMetricsAndFit

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

Описание

Учитывая потоковую передачу данных, updateMetricsAndFit сначала оценивает эффективность сконфигурированной наивной модели классификации Бейеса для пошагового обучения (incrementalClassificationNaiveBayes объект) путем вызова 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 подбирает модифицированную модель к входящим данным путем обновления условного следующего среднего и стандартного отклонения каждого переменного предиктора, учитывая класс, и хранит новые оценки, среди других настроек, в выходной модели Mdl.

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

пример

Mdl = updateMetricsAndFit(Mdl,X,Y,'Weights',Weights) задает веса наблюдения Weights.

Примеры

свернуть все

Создайте наивную модель классификации Бейеса для пошагового обучения путем вызова incrementalClassificationNaiveBayes и определение максимума 5 ожидаемых классов в данных.

Mdl = incrementalClassificationNaiveBayes('MaxNumClasses',5)
Mdl = 
  incrementalClassificationNaiveBayes

                    IsWarm: 0
                   Metrics: [1×2 table]
                ClassNames: [1×0 double]
            ScoreTransform: 'none'
         DistributionNames: 'normal'
    DistributionParameters: {}


  Properties, Methods

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

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

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

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

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

Реализуйте пошаговое обучение путем выполнения следующих действий в каждой итерации:

  • Симулируйте поток данных путем обработки фрагмента 50 наблюдений.

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

  • Сохраните условное среднее значение первого предиктора в первом классе μ11, совокупные метрики и метрики окна, чтобы видеть, как они развиваются во время пошагового обучения.

% Preallocation
numObsPerChunk = 50;
nchunk = floor(n/numObsPerChunk);
mc = array2table(zeros(nchunk,2),'VariableNames',["Cumulative" "Window"]);
mu11 = 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));
    mc{j,:} = Mdl.Metrics{"MinimalCost",:};
    mu11(j + 1) = Mdl.DistributionParameters{1,1}(1);
end

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

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

figure;
subplot(2,1,1)
plot(mu11)
ylabel('\beta_1')
xlim([0 nchunk]);
subplot(2,1,2)
h = plot(mc.Variables);
xlim([0 nchunk]);
ylabel('Minimal Cost')
xline(Mdl.MetricsWarmupPeriod/numObsPerChunk,'r-.');
legend(h,mc.Properties.VariableNames)
xlabel('Iteration')

График предлагает тот updateMetricsAndFit делает следующее:

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

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

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

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

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

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

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

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

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

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

W = ones(n,1) + ~Y;

Обучите наивную байесовую модель классификации

Подбирайте наивную модель классификации Бейеса к случайной выборке половины данных.

idxtt = randsample([true false],n,true);
TTMdl = fitcnb(X(idxtt,:),Y(idxtt),'Weights',W(idxtt))
TTMdl = 
  ClassificationNaiveBayes
              ResponseName: 'Y'
     CategoricalPredictors: []
                ClassNames: [1 2 3 4 5]
            ScoreTransform: 'none'
           NumObservations: 12053
         DistributionNames: {1×60 cell}
    DistributionParameters: {5×60 cell}


  Properties, Methods

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

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

Преобразуйте традиционно обученную модель в наивную классификацию Бейеса для пошагового обучения. Задайте отслеживание misclassification коэффициента ошибок во время пошагового обучения.

IncrementalMdl = incrementalLearner(TTMdl,'Metrics',"classiferror")
IncrementalMdl = 
  incrementalClassificationNaiveBayes

                    IsWarm: 1
                   Metrics: [2×2 table]
                ClassNames: [1 2 3 4 5]
            ScoreTransform: 'none'
         DistributionNames: {1×60 cell}
    DistributionParameters: {5×60 cell}


  Properties, Methods

IncrementalMdl incrementalClassificationNaiveBayes модель. Поскольку имена классов заданы в Mdl.ClassNames, метки, с которыми сталкиваются во время пошагового обучения, должны быть в Mdl.ClassNames.

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

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

  1. Симулируйте поток данных путем обработки 50 наблюдений за один раз.

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

  3. Сохраните misclassification коэффициент ошибок.

% Preallocation
idxil = ~idxtt;
nil = sum(idxil);
numObsPerChunk = 50;
nchunk = floor(nil/numObsPerChunk);
mc = array2table(zeros(nchunk,2),'VariableNames',["Cumulative" "Window"]);
Xil = X(idxil,:);
Yil = Y(idxil);
Wil = 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),...
        'Weights',Wil(idx));
    mc{j,:} = IncrementalMdl.Metrics{"ClassificationError",:};
end

IncrementalMdl incrementalClassificationNaiveBayes объект модели, обученный на всех данных в потоке.

Постройте график трассировки misclassification коэффициента ошибок.

h = plot(mc.Variables);
xlim([0 nchunk]);
ylabel('Classification Error')
legend(h,mc.Properties.VariableNames)
xlabel('Iteration')

Совокупная потеря первоначально переходит, но стабилизирует приблизительно 0,05, тогда как потеря окна переходит.

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

свернуть все

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

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

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

Продолжительность наблюдения маркирует 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 выдает ошибку, когда по крайней мере одно из условий соблюдают:

  • Y содержит метку, с которой недавно сталкиваются, и максимальное количество классов было достигнуто ранее (см. MaxNumClasses и ClassNames аргументы incrementalClassificationNaiveBayes).

  • Типы данных Y и Mdl.ClassNames отличаются.

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

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

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

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

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

Примечание

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

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

свернуть все

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

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

Если ClassNames свойство входной модели Mdl пустой массив, updateMetricsAndFit устанавливает ClassNames свойство выходной модели Mdl к unique(Y). Если максимальное количество классов не достигнуто, updateMetricsAndFit добавляет к Mdl.ClassNames любые метки, с которыми недавно сталкиваются, в Y.

Алгоритмы

свернуть все

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

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

    • Подбирайте инкрементную модель к Mdl.MetricsWarmupPeriod наблюдения, который является metrics warm-up period.

    • Подбирайте инкрементную модель ко всем ожидаемым классам (см. MaxNumClasses и ClassNames аргументы incrementalClassificationNaiveBayes)

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

    • 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 измерений от предыдущего пакета.

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

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

Если предшествующее вероятностное распределение класса известно (другими словами, предшествующее распределение не является эмпирическим), updateMetricsAndFit нормирует веса наблюдения, чтобы суммировать к предшествующим вероятностям класса в соответствующих классах. Это действие подразумевает, что веса наблюдения по умолчанию являются соответствующими предшествующими вероятностями класса.

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

Ссылки

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

Введенный в R2021a