exponenta event banner

incrementalLearner

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

Описание

пример

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

пример

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

  • 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 наблюдений.

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

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

% 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_j, где 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)

Подробнее

свернуть все

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

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

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

  • Прогнозировать метки.

  • Измерьте прогностическую производительность.

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

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

Алгоритмы

свернуть все

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

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

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

    • Процесс MaxNumClasses классы или все имена классов, указанные ClassNames аргумент «имя-значение».

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

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

    • Window - функции вычисляют метрику на основе всех наблюдений в пределах окна, определяемого аргументом пары имя-значение MetrityWindowSize. 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