incrementalClassificationNaiveBayes

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

Описание

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

В отличие от другого Statistics and Machine Learning Toolbox™ объектов модели, incrementalClassificationNaiveBayes можно вызвать непосредственно. Кроме того, можно задать опции обучения, такие как строения метрики эффективности и предыдущие вероятности класса, прежде чем подгонять модель к данным. После создания incrementalClassificationNaiveBayes объект подготовлен для инкрементного обучения.

incrementalClassificationNaiveBayes лучше всего подходит для инкрементного обучения. Для традиционного подхода к обучению наивной модели Байеса для многоклассовой классификации (такой как создание модели путем подбора ее к данным, выполнения перекрестной валидации, настройки гиперпараметров и так далее), смотрите fitcnb.

Создание

Можно создать incrementalClassificationNaiveBayes моделировать объект несколькими способами:

  • Вызов функции непосредственно - настройте опции инкрементного обучения или задайте опции конкретного учащегося, вызывая incrementalClassificationNaiveBayes непосредственно. Этот подход лучше всего, когда у вас еще нет данных или вы хотите немедленно начать инкрементное обучение. Необходимо задать максимальное количество классов или всех имен классов, ожидаемых в данных отклика во время инкрементного обучения.

  • Преобразуйте традиционно обученную модель - Чтобы инициализировать наивную классификационную модель Байеса для инкрементного обучения с использованием параметров модели обученного наивного объекта модели Байеса, можно преобразовать традиционно обученную модель в incrementalClassificationNaiveBayes моделировать объект путем передачи его в incrementalLearner функция.

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

Описание

пример

Mdl = incrementalClassificationNaiveBayes('MaxNumClasses',MaxNumClasses) возвращает наивный объект модели классификации Байеса по умолчанию для инкрементного обучения, Mdl, где MaxNumClasses - максимальное количество классов, ожидаемое в данных отклика во время инкрементного обучения. Свойства модели по умолчанию содержат заполнители для неизвестных параметров модели. Необходимо обучить модель по умолчанию, прежде чем можно будет отследить ее эффективность или сгенерировать предсказания из нее.

пример

Mdl = incrementalClassificationNaiveBayes('ClassNames',ClassNames) задает все имена классов ClassNames ожидается в данных отклика во время инкрементного обучения и устанавливает ClassNames свойство.

пример

Mdl = incrementalClassificationNaiveBayes(___,Name,Value) использует любую комбинацию входных аргументов в предыдущих синтаксисах, чтобы задать свойства и дополнительные опции, используя аргументы пары "имя-значение". Заключайте каждое имя в кавычки. Для примера, incrementalClassificationNaiveBayes('MaxNumClasses',5,'MetricsWarmupPeriod',100) устанавливает максимальное количество классов, ожидаемых в данных отклика, равным 5, и устанавливает период разогрева метрики равным 100.

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

расширить все

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

Если вы не задаете MaxNumClasses, вы должны задать ClassNames аргумент. В этом случае MaxNumClasses количество имен классов в ClassNames.

Пример: 'MaxNumClasses',5

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

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

ClassNames задает порядок любой размерности входного или выходного аргумента, который соответствует порядку классов. Для примера задайте 'ClassNames' для определения порядка размерностей Cost или порядок классификационных оценок, возвращаемых predict

Если вы не задаете ClassNames, вы должны задать MaxNumClasses аргумент. В этом случае программное обеспечение выводит MaxNumClasses ClassNames из данных во время инкрементного обучения.

Пример: 'ClassNames',["virginica" "setosa" "versicolor"}

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

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

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

Пример: 'NumPredictors',4,'Prior',[0.3 0.3 0.4] задает 4 переменные в данных предиктора и предыдущий класс распределения вероятностей [0.3 0.3 0.4].

Стоимость неправильной классификации наблюдения, заданная как значение в этой таблице, где MaxNumClasses количество классов в ClassNames свойство:

ЗначениеОписание
MaxNumClasses-by- MaxNumClasses числовая матрица

Cost(i,j) - стоимость классификации наблюдений в классы j когда его истинный класс i. Другими словами, строки соответствуют истинному классу, а столбцы - предсказанному классу. Для примера, Cost = [0 2;1 0] применяет двойной штраф за неправильную классификацию ClassNames(1) для неправильной классификации ClassNames(2).

Массив структур

Массив структур, содержащий два поля:

  • ClassNames содержащее имена классов, то же значение что и ClassNames

  • ClassificationCosts содержащая матрицу затрат, как описано выше.

Если вы задаете Cost, вы также должны задать ClassNames аргумент. Cost устанавливает Cost свойство.

По умолчанию это MaxNumClasses-by- MaxNumClasses матрица, где Cost (i, j) = 1 для всех ij, и стоимость (i, j) = 0 для всех i = j.

Пример: 'Cost',struct('ClassNames',{'b','g'},'ClassificationCosts',[0 2; 1 0])

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

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

Когда Mdl warm (см. IsWarm), updateMetrics и updateMetricsAndFit отследите показатели эффективности в свойстве Metrics Mdl.

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

ИмяОписание
"binodeviance"Биномиальное отклонение
"classiferror"Вероятность ошибки неправильной классификации
"exponential"Экспоненциал
"hinge"Стержень
"logit"Логистический
'"mincost"

Минимальная ожидаемая стоимость неправильной классификации (для классификационных оценок, которые являются апостериорными вероятностями). incrementalClassificationNaiveBayes всегда отслеживает эту метрику.

"quadratic"Квадратный

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

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

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

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 аналогичен Posterior выхода 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 хранить указанные метрики в таблице в 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

Свойства

расширить все

Вы можете задать большинство свойств, используя синтаксис аргумента пары "имя-значение" только при вызове incrementalClassificationNaiveBayes непосредственно. Вы можете задать некоторые свойства при вызове incrementalLearner для преобразования традиционно обученной модели. Вы не можете задать свойства DistributionParameters, IsWarm, и NumTrainingObservations.

Параметры модели

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

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

Если вы задаете 'Cost' аргумент имя-значение, его наборы значений Cost. Если вы задаете массив структур, Cost - значение ClassificationCosts поле.

Если вы преобразовываете традиционно обученную модель, чтобы создать Mdl, Cost является Cost свойство традиционно обученной модели.

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

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

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

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

  • Если вы задаете ClassNames аргумент, incrementalClassificationNaiveBayes хранит ваши спецификации в ClassNames. Если вы задаете строковый вектор, incrementalClassificationNaiveBayes сохраняет его как массив ячеек из векторов символов.

  • Если вы преобразовываете традиционно обученную модель, чтобы создать Mdl, ClassNames является ClassNames свойство традиционно обученной модели.

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

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

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

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

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

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

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

Примечание

Если вы преобразовываете традиционно обученную модель, чтобы создать Mdl, incrementalClassificationNaiveBayes не добавляет количество наблюдений в соответствии с традиционно обученной моделью к NumTrainingObservations.

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

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

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

ЗначениеОписание
'empirical'Инкрементные функции обучения выводят вероятности предыдущего класса из наблюдаемых относительных частот класса в данных отклика во время инкрементного обучения.
'uniform'Для каждого класса априорная вероятность равна 1/ K, где K - количество классов.
числовой векторПользовательские, нормированные предыдущие вероятности. Порядок элементов Prior соответствует элементам ClassNames свойство.

  • Если вы преобразовываете традиционно обученную модель, чтобы создать Mdl, incrementalClassificationNaiveBayes использует Prior свойство традиционно обученной модели.

  • В противном случае Prior является 'empirical'.

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

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

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

Эта таблица описывает доступные встроенные функции для преобразования счета.

ЗначениеОписание
'doublelogit'1/(1 + e–2x)
'invlogit'журнал (x/( 1 - x))
'ismax'Устанавливает счет для класса с самым большим счетом равным 1 и устанавливает счета для всех других классов равным 0
'logit'1/(1 + ex)
'none' или 'identity'x (без преобразования)
'sign'-1 для x < 0
0 для x = 0
1 для x > 0
'symmetric'2 x – 1
'symmetricismax'Устанавливает счет для класса с самым большим счетом равным 1 и устанавливает счета для всех других классов равной -1
'symmetriclogit'2/(1 + ex) – 1

Для MATLAB® функцию или функцию, которую вы задаете, вводите указатель на функцию; для примера, 'ScoreTransform',@function, где:

  • function принимает n -by - K матрицу (исходные счета) и возвращает матрицу того же размера (преобразованные счета).

  • n - количество наблюдений, а строка j матрицы содержит счета j наблюдений.

  • K - количество классов, а k столбцов - ClassNames (k).

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

Значение по умолчанию 'none' задает возвращаемые вероятности апостериорных классов.

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

Параметры обучения

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

Распределения предиктора, заданные как 'normal' или 1-байт- NumPredictors массив ячеек со всеми камерами, содержащими 'normal'. Условное распределение P (xj | ck) нормально (Гауссов), для j = 1,..., NumPredictors и каждый kClassNames.

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

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

Оценки параметров распределения, заданные как массив ячеек. DistributionParameters является K -by- NumPredictors массив ячеек, где K количество классов и камера (k, j) содержит оценки параметров распределения для образцов предиктора j в классах k. Порядок строк соответствует порядку классов в свойстве ClassNames, и порядок столбцов соответствует порядку предикторов в данных предиктора.

Если k класса не имеет наблюдений для предиктора j, затем DistributionParameters {k, j} пуст ([]).

Потому что все распределения предикторов, заданные DistributionNames свойство, 'normal', каждая камера DistributionParameters является числовым вектором 2 на 1, где первый элемент является средним значением выборки, а второй элемент является стандартным отклонением выборки.

Типы данных: cell

Параметры метрики эффективности

Флаг, указывающий, отслеживает ли инкрементальная модель метрики эффективности, заданный как false или true.

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

  • Подгонка инкрементальной модели к MetricsWarmupPeriod наблюдения.

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

ЗначениеОписание
trueИнкрементальная модель Mdl тепло. Следовательно, updateMetrics и updateMetricsAndFit отслеживать показатели эффективности в Metrics свойство Mdl.
falseupdateMetrics и updateMetricsAndFit не отслеживать метрики эффективности.

Типы данных: logical

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

Моделируйте метрики производительности, обновленные во время инкрементного обучения updateMetrics и updateMetricsAndFit, заданный как таблица с двумя столбцами и m строками, где m - количество метрик, заданное 'Metrics' аргумент пары "имя-значение".

Столбцы Metrics маркируются Cumulative и Window.

  • Cumulative: j элемента - производительность модели, измеренная метрикой j, со времени, когда модель стала теплой (IsWarm есть 1).

  • Window: j элемента - производительность модели, измеренная метрикой j, рассчитывается по всем наблюдениям в окне, заданном MetricsWindowSize свойство. Программное обеспечение обновляется Window после того, как он обрабатывает MetricsWindowSize наблюдения.

Строки помечены заданными метриками. Для получения дополнительной информации смотрите 'Metrics'.

Типы данных: table

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

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

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

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

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

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

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

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

Функции объекта

fitОбучите наивную модель классификации Байеса для инкрементного обучения
updateMetricsAndFitОбновите метрики эффективности в наивной модели классификации Байеса для инкрементного обучения с учетом новых данных и train
updateMetricsОбновляйте метрики эффективности в наивной модели классификации Байеса для инкрементного обучения с учетом новых данных
logpЛоггирование безусловной плотности вероятностей наивной модели классификации Байеса для инкрементного обучения
lossПотеря наивной модели классификации Байеса для инкрементного обучения на пакете данных
predictПредсказать ответы на новые наблюдения из наивной модели классификации Байеса для инкрементного обучения

Примеры

свернуть все

Чтобы создать наивную модель классификации Байеса для инкрементного обучения, наименьший объем информации, которую вы должны задать, является максимальным количеством классов, которые вы ожидаете, что модель испытает ('MaxNumClasses' аргумент имя-значение). Когда вы подгоняете модель к входящим пакетам данных с помощью инкрементальной функции подгонки, модель собирает недавно опытные классы в своей ClassNames свойство. Если заданное ожидаемое максимальное количество классов неточно, возникает одна из следующих альтернатив:

  • Прежде чем инкрементальная функция аппроксимации испытывает ожидаемое максимальное количество классов, модель является холодной. Следовательно, updateMetrics и updateMetricsAndFit функции не измеряют показатели эффективности.

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

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

В данном примере рассмотрите возможность обучения устройства для предсказания того, сидит ли субъект, стоит ли он, ходит, бегает или танцует, на основе биометрических данных, измеренных на объекте. Поэтому устройство имеет максимум 5 классов, из которых можно выбрать.

Опыт Ожидаемое Максимальное Количество Классов Раннее в Выборке

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

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

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


  Properties, Methods

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

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

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

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

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

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

  • Обработайте 50 наблюдений.

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

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

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

% Incremental learning
for j = 1:nchunk
    ibegin = min(n,numObsPerChunk*(j-1) + 1);
    iend   = min(n,numObsPerChunk*j);
    idx = ibegin:iend;    
    MdlEarly = updateMetricsAndFit(MdlEarly,X(idx,:),Y(idx));
    mc{j,:} = MdlEarly.Metrics{"MinimalCost",:};
    mu1(j + 1) = MdlEarly.DistributionParameters{1,1}(1);
end

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

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

figure;
subplot(2,1,1)
plot(mu1)
ylabel('\mu_{11}')
xlim([0 nchunk]);
subplot(2,1,2)
h = plot(mc.Variables);
xlim([0 nchunk]);
ylabel('Minimal Cost')
xline(MdlEarly.MetricsWarmupPeriod/numObsPerChunk,'r-.');
legend(h,mc.Properties.VariableNames)
xlabel('Iteration')

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

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

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

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

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

Опыт Ожидаемое Максимальное Количество Классов Поздно В Выборке

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

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

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


  Properties, Methods

Переместите все наблюдения, помеченные классом 5, в конец выборки.

idx5 = Y == 5;
Xnew = [X(~idx5,:); X(idx5,:)];
Ynew = [Y(~idx5) ;Y(idx5)];

Подгонка инкрементной модели и результатов графика, как выполнено ранее.

mcnew = array2table(zeros(nchunk,2),'VariableNames',["Cumulative" "Window"]);
mu1new = zeros(nchunk,1);    

for j = 1:nchunk
    ibegin = min(n,numObsPerChunk*(j-1) + 1);
    iend   = min(n,numObsPerChunk*j);
    idx = ibegin:iend;    
    MdlLate = updateMetricsAndFit(MdlLate,Xnew(idx,:),Ynew(idx));
    mcnew{j,:} = MdlLate.Metrics{"MinimalCost",:};
    mu1new(j + 1) = MdlLate.DistributionParameters{1,1}(1);
end

figure;
subplot(2,1,1)
plot(mu1new)
ylabel('\mu_{11}')
xlim([0 nchunk]);
subplot(2,1,2)
h = plot(mcnew.Variables);
xlim([0 nchunk]);
ylabel('Minimal Cost')
xline(MdlLate.MetricsWarmupPeriod/numObsPerChunk,'r-.');
xline(sum(~idx5)/numObsPerChunk,'g-.');
legend(h,mcnew.Properties.VariableNames,'Location','best')
xlabel('Iteration')

The updateMetricsAndFit функция обучается в течение инкрементного обучения, но функция начинает отслеживать метрики эффективности после того, как модель подгоняется ко всему ожидаемому количеству классов (зеленая вертикальная линия в нижней подграфике).

В этом примере показано, как создать инкрементного наивного учащегося Байеса, когда вы знаете все имена классов в данных.

Рассмотрите обучение устройства, чтобы предсказать, сидит ли субъект, стоит ли он, ходит, бегает или танцует, на основе биометрических данных, измеренных по теме, и вы знаете, что имена классов 1 через 5 к деятельности.

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

classnames = 1:5;
Mdl = incrementalClassificationNaiveBayes('ClassNames',classnames)
Mdl = 
  incrementalClassificationNaiveBayes

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


  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 в командной строке.

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

  • Обработайте 50 наблюдений.

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

% Preallocation
numObsPerChunk = 50;
nchunk = floor(n/numObsPerChunk);

% Incremental learning
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));
end

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

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

load humanactivity
n = numel(actid);
idx = randsample(n,n);
X = feat(idx,:);
Y = actid(idx);

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

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

  • Задайте период прогрева метрики 5000 наблюдений.

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

  • Отследите ошибку классификации и минимальные затраты, чтобы измерить эффективность модели.

Mdl = incrementalClassificationNaiveBayes('MaxNumClasses',5,'MetricsWarmupPeriod',5000,...
    'MetricsWindowSize',500,'Metrics',["classiferror" "mincost"])
Mdl = 
  incrementalClassificationNaiveBayes

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


  Properties, Methods

Mdl является incrementalClassificationNaiveBayes объект модели, сконфигурированный для инкрементного обучения.

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

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

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

  • Магазин σ11 (стандартное отклонение первой переменной предиктора в первом классе), совокупные метрики и метрики окна, чтобы увидеть, как они развиваются во время инкрементного обучения.

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

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

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

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

Figure contains 3 axes. Axes 1 contains 2 objects of type line, constantline. Axes 2 contains 3 objects of type line, constantline. These objects represent Cumulative, Window. Axes 3 contains 3 objects of type line, constantline. These objects represent Cumulative, Window.

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

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

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

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

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

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

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

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

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: {1x60 cell}
    DistributionParameters: {5x60 cell}


  Properties, Methods

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

Отдельно отслеживайте метрики эффективности и подгоняйте модель

Выполните инкрементальное обучение для остальных данных с помощью updateMetrics и fit функций. Симулируйте поток данных путем обработки 50 наблюдений за раз. При каждой итерации:

  1. Функции updateMetrics обновить совокупную и оконную ошибку классификации модели с учетом входящего фрагмента наблюдений. Перезаписайте предыдущую инкрементальную модель, чтобы обновить потери в Metrics свойство. Обратите внимание, что функция не подгоняет модель к фрагменту данных - фрагмент является «новыми» данными для модели. Задайте веса наблюдений.

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

  3. Сохраните минимальные затраты и среднее значение первой переменной первого класса μ11.

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

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

Также можно использовать updateMetricsAndFit чтобы обновить метрики эффективности модели, заданные новый фрагмент данных, и затем подгонять модель к данным.

Постройте график трассировки метрик эффективности и оценочного коэффициента μ11.

figure;
subplot(2,1,1)
h = plot(mc.Variables);
xlim([0 nchunk]);
ylabel('Minimal Cost')
legend(h,mc.Properties.VariableNames)
subplot(2,1,2)
plot(mu11)
ylabel('\mu_11')
xlim([0 nchunk]);
xlabel('Iteration')

Figure contains 2 axes. Axes 1 contains 2 objects of type line. These objects represent Cumulative, Window. Axes 2 contains an object of type line.

Совокупные потери стабильны и постепенно уменьшаются, в то время как потери окна скачут.

μ11 сначала резко изменяется, затем постепенно выравнивается как fit обрабатывает больше фрагменты.

Подробнее о

расширить все

Алгоритмы

расширить все

Введенный в R2021a