exponenta event banner

updateMetricsAndFit

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

Описание

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

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

пример

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

  1. updateMetricsAndFit измеряет производительность модели на входящем предикторе и данных ответа, X и Y соответственно. При теплой входной модели (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 наблюдений.

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

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

% 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;

Модель классификации Train Naive Bayes

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

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 объект модели, представляющий традиционно обученную наивную модель классификации Байеса.

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

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

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. Сохраните частоту ошибок классификации.

% 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 объект модели обучен всем данным в потоке.

Постройте график трассировки частоты ошибок классификации.

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 является ones(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, из новых данных, когда инкрементная модель является теплой (IsWarm свойство - true). Инкрементная модель является теплой, когда инкрементный фитинг, как updateMetricsAndFit выполняет оба следующих действия:

    • Подгонка инкрементной модели к Mdl.MetricsWarmupPeriod наблюдения, которые являются периодом прогрева метрик.

    • Соответствие инкрементной модели всем ожидаемым классам (см. 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] Бифет, Альберт, Рикард Гавальда, Джеффри Холмс и Бернхард Пфахрингер. Машинное обучение для потоков данных с практическим примером в MOA. Кембридж, Массачусетс: MIT Press, 2007.

Представлен в R2021a