incrementalLearner

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

Описание

пример

IncrementalMdl = incrementalLearner(Mdl) возвращает наивную модель классификации Байеса для инкрементного обучения, IncrementalMdl, используя гиперпараметры традиционно обученной наивной классификационной модели Байеса, Mdl. Потому что значения его свойств отражают знания, полученные от Mdl, IncrementalMdl может предсказывать метки, заданные новые наблюдения, и это warm, что означает, что его прогнозирующая эффективность отслеживается.

пример

IncrementalMdl = incrementalLearner(Mdl,Name,Value) использует дополнительные опции, заданные одним или несколькими аргументами пары "имя-значение". Некоторые опции требуют от вас обучения IncrementalMdl перед отслеживанием его прогнозирующей эффективности. Для примера, 'MetricsWarmupPeriod',50,'MetricsWindowSize',100 задает предварительный инкрементный период обучения 50 наблюдений перед отслеживанием показателей эффективности и определяет обработку 100 наблюдений перед обновлением показателей эффективности.

Примеры

свернуть все

Обучите наивную модель Байеса при помощи fitcnb, а затем преобразуйте его в пошагового ученика.

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

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

load humanactivity

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

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

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

TTMdl = fitcnb(feat,actid);

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

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

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

IncrementalMdl = incrementalLearner(TTMdl) 
IncrementalMdl = 
  incrementalClassificationNaiveBayes

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


  Properties, Methods

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

  • The incrementalLearner Функция Инициализирует пошагового ученика путем передачи ему выученных параметров условного распределения предикторов вместе с другой информацией TTMdl извлечен из обучающих данных.

  • IncrementalMdl тепло (IsWarm является 1), что означает, что инкрементальные функции обучения могут отслеживать метрики эффективности и делать предсказания.

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

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

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

[~,ttscores] = predict(TTMdl,feat);
[~,ilcores] = predict(IncrementalMdl,feat);
compareScores = norm(ttscores - ilcores)
compareScores = 0

Различие между счетами, сгенерированными моделями, равняется 0.

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

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

load humanactivity

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

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

n = numel(actid);

rng(1) % For reproducibility
cvp = cvpartition(n,'Holdout',0.5);
idxtt = training(cvp);
idxil = test(cvp);

% First half of data
Xtt = feat(idxtt,:);
Ytt = actid(idxtt);

% Second half of data
Xil = feat(idxil,:);
Yil = actid(idxil);

Подгонка наивной модели Байеса к первой половине данных.

TTMdl = fitcnb(Xtt,Ytt);

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

  • Период прогрева показателей эффективности 2000 наблюдений

  • Размер окна метрики 500 наблюдений

  • Использование классификационной ошибки и минимальных затрат для измерения эффективности модели

IncrementalMdl = incrementalLearner(TTMdl,'MetricsWarmupPeriod',2000,'MetricsWindowSize',500,...
    'Metrics',["classiferror" "hinge"]);

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

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

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

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

% Preallocation
nil = numel(Yil);
numObsPerChunk = 20;
nchunk = ceil(nil/numObsPerChunk);
ce = array2table(zeros(nchunk,2),'VariableNames',["Cumulative" "Window"]);
mc = array2table(zeros(nchunk,2),'VariableNames',["Cumulative" "Window"]);
mu12 = zeros(nchunk,1);    

% 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));
    ce{j,:} = IncrementalMdl.Metrics{"ClassificationError",:};
    mc{j,:} = IncrementalMdl.Metrics{"MinimalCost",:};
    mu12(j + 1) = IncrementalMdl.DistributionParameters{1,2}(1);
end

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

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

figure;
subplot(3,1,1)
plot(mu12)
ylabel('\mu_{12}')
xlim([0 nchunk]);
xline(IncrementalMdl.MetricsWarmupPeriod/numObsPerChunk,'r-.');
subplot(3,1,2)
h = plot(ce.Variables);
xlim([0 nchunk]);
ylabel('Classification Error')
xline(IncrementalMdl.MetricsWarmupPeriod/numObsPerChunk,'r-.');
legend(h,ce.Properties.VariableNames,'Location','northwest')
subplot(3,1,3)
h = plot(mc.Variables);
xlim([0 nchunk]);
ylabel('Minimal Cost')
xline(IncrementalMdl.MetricsWarmupPeriod/numObsPerChunk,'r-.');
legend(h,mc.Properties.VariableNames,'Location','northwest')
xlabel('Iteration')

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

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

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

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

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

Поскольку данные упорядочены по действиям, среднее значение и показатели эффективности периодически резко изменяются.

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

свернуть все

Традиционно обученная наивная модель Байеса для многоклассовой классификации, заданная как ClassificationNaiveBayes объект модели, возвращенный fitcnb. Условное распределение каждой переменной предиктора, как сохранено в Mdl.DistributionNames, должно быть нормальным.

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

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

Пример: 'Metrics',["classiferror" "mincost"],'MetricsWindowSize',100 задает отслеживание скорости неправильной классификации и минимальных затрат и обрабатывает 100 наблюдений перед обновлением метрик эффективности.

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

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

ИмяОписание
"binodeviance"Биномиальное отклонение
"classiferror"Ошибка классификации
"exponential"Экспоненциал
"hinge"Стержень
"logit"Логистический
'"mincost"Минимальные ожидаемые затраты на неправильную классификацию (для классификационных оценок, которые являются апостериорными вероятностями)
"quadratic"Квадратный

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

Пример: 'Metrics',["classiferror" "mincost"]

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

metric = customMetric(C,S,Cost)

  • Выходной аргумент metric является n-на-1 числовым вектором, где каждый элемент является потерей соответствующего наблюдения в данных, обработанных инкрементальными функциями обучения во время цикла обучения.

  • Вы выбираете имя функции (customMetric).

  • C - n -by K логическая матрица с строками, указывающими класс, к которому принадлежит соответствующее наблюдение, где K - количество классов. Порядок столбцов соответствует порядку классов в ClassNames свойство. Создание C путем установки C (p, q) = 1, если наблюдение p находится в q классов, для каждого наблюдения в заданных данных. Установите другой элемент в строку p на 0.

  • S является n -by K числовой матрицей предсказанных классификационных оценок. S аналогичен Score выхода predict, где строки соответствуют наблюдениям в данных, а порядок столбцов соответствует порядку классов в ClassNames свойство. S (p, q) - классификационная оценка наблюдения p классифицируется в классах q.

  • Cost является K -by K числовой матрицей затрат на неправильную классификацию. Смотрите 'Cost' аргумент имя-значение.

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

Пример: 'Metrics',struct('Metric1',@customMetric1,'Metric2',@customMetric2)

Пример: 'Metrics',{@customMetric1 @customeMetric2 'logit' struct('Metric3',@customMetric3)}

updateMetrics и updateMetricsAndFit хранить указанные метрики в таблице в свойстве IncrementalMdl.Metrics. Тип данных Metrics определяет имена строк таблицы.

'Metrics' Тип данных значенияОписание Metrics Имя строки свойстваПример
Строка или вектор символовИмя соответствующей встроенной метрикиИмя строки для "classiferror" является "ClassificationError"
Массив структурИмя поляИмя строки для struct('Metric1',@customMetric1) является "Metric1"
Указатель на функцию для функции, сохраненной в программном файлеИмя функцииИмя строки для @customMetric является "customMetric"
Анонимная функцияCustomMetric_<reservedrangesplaceholder0 >, где j метрический j в MetricsИмя строки для @(C,S,Cost)customMetric(C,S,Cost)... является CustomMetric_1

Для получения дополнительной информации о опциях показателей эффективности см. Раздел «Показатели эффективности».

Типы данных: char | string | struct | cell | function_handle

Это свойство доступно только для чтения.

Количество наблюдений, к которым должна соответствовать инкрементальная модель, прежде чем она отслеживает метрики эффективности в своей Metrics свойство, заданное как неотрицательное целое число.

Для получения дополнительной информации см. «Показатели эффективности».

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

Это свойство доступно только для чтения.

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

Для получения дополнительной информации о опциях показателей эффективности см. Раздел «Показатели эффективности».

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

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

свернуть все

Наивная классификационная модель Байеса для инкрементного обучения, возвращенная как incrementalClassificationNaiveBayes объект модели. IncrementalMdl также сконфигурировано, чтобы сгенерировать предсказания, заданные новыми данными (см. predict).

Как инициализировать IncrementalMdl для инкрементного обучения, incrementalLearner передает значения свойств Mdl в этой таблице для соответствия свойств IncrementalMdl.

СвойствоОписание
ClassNamesМетки классов для двоичной классификации, список имен
CostЗатраты на неправильную классификацию, числовая матрица
DistributionNamesИмена условных распределений переменных, массива ячеек, в котором каждая камера содержит 'normal
DistributionParametersЗначения параметров условных распределений переменных, массива ячеек длиной 2 числовых вектора (для получения дополнительной информации см DistributionParameters)
PriorПредшествующее распределение меток классов, числовой вектор
ScoreTransformФункция преобразования счета, имя или указатель на функцию.
YМетки классов, поставляемые в fitcnb для вычисления веса по классам для инкрементного обучения, сохраненного как массив меток (см Y)

Подробнее о

свернуть все

Инкрементальное обучение

Incremental learning, или online learning, является ветвью машинного обучения, связанная с обработкой входящих данных из потока данных, возможно, практически не учитывая распределения переменных предиктора, аспектов предсказания или целевой функции (включая настройку значений параметров) или того, помечены ли наблюдения. Инкрементальное обучение отличается от традиционного машинного обучения, где доступно достаточно маркированных данных, чтобы соответствовать модели, выполнить перекрестную валидацию, чтобы настроить гиперпараметры и вывести распределение предиктора.

Учитывая входящие наблюдения, модель инкрементного обучения обрабатывает данные любым из следующих способов, но обычно в этом порядке:

  • Спрогнозируйте метки.

  • Измерьте прогнозирующую эффективность.

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

  • Подбор модели к входящим наблюдениям.

Алгоритмы

свернуть все

Метрики эффективности

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

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

    • Обработка MaxNumClasses классы или все имена классов, заданные ClassNames аргумент имя-значение.

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

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

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

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

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

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

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

Введенный в R2021a