incrementalClassificationNaiveBayes

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

Описание

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

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

incrementalClassificationNaiveBayes подходит лучше всего для пошагового обучения. Для традиционного подхода к обучению наивная модель Bayes для классификации мультиклассов (такой как создание модели путем подбора кривой ему к данным, выполнения перекрестной проверки, настройки гиперпараметров, и так далее), смотрите 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- MaxNumClasses числовая матрица

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

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

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

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

  • ClassificationCosts содержа матрицу стоимости, как ранее описано.

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

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

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

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

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

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

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

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

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

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

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

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

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

metric = customMetric(C,S,Cost)

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

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

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

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

  • Cost K-by-K числовая матрица затрат misclassification. Смотрите '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_j, где j метрический j в MetricsИмя строки для @(C,S,Cost)customMetric(C,S,Cost)... CustomMetric_1

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

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

Свойства

развернуть все

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

Параметры модели классификации

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

Стоимость неправильной классификации наблюдения в виде MaxNumClasses- 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 + e x)
'none' или 'identity'x (никакое преобразование)
'sign'– 1 для x <0
0 для x = 0
1 для x> 0
'symmetric'2x – 1
'symmetricismax'Устанавливает счет к классу с самым большим счетом к 1 и устанавливает музыку ко всем другим классам к –1
'symmetriclogit'2/(1 + e x) – 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 является количеством классов и ячейки (kJ) содержит оценки параметра распределения для экземпляров предиктора j в классе k. Порядок строк соответствует порядку классов в свойстве ClassNames, и порядок столбцов соответствует порядку предикторов в данных о предикторе.

Если класс k не имеет никаких наблюдений для предиктора j, затем DistributionParameters {kJ} isempty).

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

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

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

Отметьте указание, отслеживает ли инкрементная модель показатели производительности в виде false или true.

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

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

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

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

Типы данных: логический

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

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

Испытайте ожидаемое максимальное количество классов поздно в выборке

Создайте различную наивную модель Bayes для пошагового обучения для цели.

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')

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

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

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

  • Задайте метрический размер окна 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 итераций).

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

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

Подбирайте наивную модель 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: {1x60 cell}
    DistributionParameters: {5x60 cell}


  Properties, Methods

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

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

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

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