Наивная Байесова модель классификации для пошагового обучения
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 — Максимальное количество классовМаксимальное количество классов ожидается в данных об ответе во время пошагового обучения в виде положительного целого числа.
Если вы не задаете MaxNumClasses, необходимо задать ClassNames аргумент. В этом случае, MaxNumClasses количество имен классов в ClassNames.
Пример: 'MaxNumClasses',5
Типы данных: single | double
ClassNames — Все уникальные метки классаВсе уникальные метки класса, ожидаемые в данных об ответе во время пошагового обучения в виде категориального или символьного массива; логический, числовой, или вектор строки или массив ячеек из символьных векторов. 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].'Cost' — Стоимость неправильной классификации наблюденияСтоимость неправильной классификации наблюдения в виде значения в этой таблице, где MaxNumClasses количество классов в ClassNames свойство:
| Значение | Описание |
|---|---|
MaxNumClasses- MaxNumClasses числовая матрица |
|
| Массив структур | Массив структур, имеющий два поля:
|
Если вы задаете Cost, необходимо также задать ClassNames аргумент. Cost устанавливает Cost свойство.
Значением по умолчанию является MaxNumClasses- MaxNumClasses матрица, где Стоится ( iJ) = 1 ≠ для всех i, и jСтоимость ( iJ) = 0 = для всех i.j
Пример: 'Cost',struct('ClassNames',{'b','g'},'ClassificationCosts',[0 2; 1 0])
Типы данных: single | double | struct
'Metrics' — Метрики производительности модели, чтобы отследить во время пошагового обучения"mincost" (значение по умолчанию) | "classiferror" | представьте вектор в виде строки | указатель на функцию | вектор ячейки | массив структур | "binodeviance" | "exponential" | "hinge" | "logit" | "quadratic" | ...Метрики производительности модели, чтобы отследить во время пошагового обучения, в дополнение к минимальному ожидали стоимость misclassification в виде встроенного имени функции потерь, вектора строки из имен, указатель на функцию (@metricName), массив структур указателей на функцию или вектор ячейки из имен, указателей на функцию или массивов структур.
Когда Mdl warm (см. IsWarm), updateMetrics и updateMetricsAndFit отследите показатели производительности в свойстве Metrics Mdl.
В следующей таблице перечислены встроенные имена функции потерь. Можно задать больше чем один при помощи вектора строки.
| Имя | Описание |
|---|---|
"binodeviance" | Биномиальное отклонение |
"classiferror" | Коэффициент ошибок Misclassification |
"exponential" | Экспоненциал |
"hinge" | Стержень |
"logit" | Логистический |
'"mincost" | Минимальный ожидал стоимость misclassification (для классификационных оценок, которые являются апостериорными вероятностями). |
"quadratic" | Квадратичный |
Для получения дополнительной информации о встроенных функциях потерь смотрите loss.
Пример: 'Metrics',["classiferror" "logit"]
Чтобы задать пользовательскую функцию, которая возвращает показатель производительности, используйте обозначение указателя на функцию. Функция должна иметь эту форму:
metric = customMetric(C,S,Cost)
Выходной аргумент metric n-by-1 числовой вектор, где каждым элементом является потеря соответствующего наблюдения в данных, обработанных функциями пошагового обучения во время цикла изучения.
Вы выбираете имя функции (customMetric).
C n-by-K логическая матрица со строками, указывающими на класс, которому принадлежит соответствующее наблюдение, где K является количеством классов. Порядок следования столбцов соответствует порядку класса в ClassNames свойство. Создайте C установкой C (= 1 pQ), если наблюдение находится в классе p, для каждого наблюдения в заданных данных. Установите другой элемент в строке q к p0.
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_, где метрический в Metrics | Имя строки для @(C,S,Cost)customMetric(C,S,Cost)... CustomMetric_1 |
Для получения дополнительной информации об опциях показателей производительности смотрите показатели производительности.
Типы данных: char | string | struct | cell | function_handle
Можно установить большинство свойств при помощи синтаксиса аргумента пары "имя-значение" только, когда вы вызываете incrementalClassificationNaiveBayes непосредственно. Можно установить некоторые свойства, когда вы вызываете incrementalLearner преобразовывать традиционно обученную модель. Вы не можете установить свойства DistributionParameters, IsWarm, и NumTrainingObservations.
Cost — Стоимость неправильной классификации наблюденияЭто свойство доступно только для чтения.
Стоимость неправильной классификации наблюдения в виде MaxNumClasses- MaxNumClasses числовая матрица.
Если вы задаете 'Cost' аргумент значения имени, его наборы значений Cost. Если вы задаете массив структур, Cost значение ClassificationCosts поле .
Если вы преобразуете традиционно обученную модель, чтобы создать Mdl, Cost Cost свойство традиционно обученной модели.
Типы данных: single | double
ClassNames — Все уникальные метки классаЭто свойство доступно только для чтения.
Все уникальные метки класса, ожидаемые в данных об ответе во время пошагового обучения в виде категориального или символьного массива, логического или числового вектора или массива ячеек из символьных векторов.
Если вы задаете MaxNumClasses аргумент, программное обеспечение выводит ClassNames во время пошагового обучения.
Если вы задаете ClassNames аргумент, incrementalClassificationNaiveBayes хранит вашу спецификацию в ClassNames. Если вы задаете вектор строки, incrementalClassificationNaiveBayes хранилища это как массив ячеек из символьных векторов вместо этого.
Если вы преобразуете традиционно обученную модель, чтобы создать Mdl, ClassNames ClassNames свойство традиционно обученной модели.
Типы данных: single | double | logical | char | cell | categorical
NumPredictors — Количество переменных предикторов (значение по умолчанию) | неотрицательный числовой скалярЭто свойство доступно только для чтения.
Количество переменных предикторов в виде неотрицательного числового скаляра.
Если вы преобразуете традиционно обученную модель, чтобы создать Mdl, NumPredictors задан как конгруэнтное свойство традиционно обученной модели. В противном случае инкрементные подходящие функции выводят NumPredictors из данных о предикторе во время обучения.
Типы данных: double
NumTrainingObservations — Количество наблюдений соответствует к инкрементной модели (значение по умолчанию) | неотрицательный числовой скалярЭто свойство доступно только для чтения.
Количество наблюдений соответствует к инкрементной модели MdlВ виде неотрицательного числового скаляра. NumTrainingObservations увеличения, когда вы передаете Mdl и обучающие данные к fit или updateMetricsAndFit.
Примечание
Если вы преобразуете традиционно обученную модель, чтобы создать Mdl, incrementalClassificationNaiveBayes не добавляет количество подгонки наблюдений к традиционно обученной модели к NumTrainingObservations.
Типы данных: double
Prior — Предшествующие вероятности класса'empirical' | 'uniform'Это свойство доступно только для чтения.
Предшествующие вероятности класса в виде значения в этой таблице. Можно установить этот синтаксис аргумента пары "имя-значение" использования свойства, но incrementalClassificationNaiveBayes всегда хранит числовой вектор.
| Значение | Описание |
|---|---|
'empirical' | Функции пошагового обучения выводят предшествующие вероятности класса из наблюдаемых частот родственника класса в данных об ответе во время инкрементного обучения. |
'uniform' | Для каждого класса априорная вероятность является 1/K, где K является количеством классов. |
| числовой вектор | Пользовательские, нормированные априорные вероятности. Порядок элементов Prior соответствует элементам ClassNames свойство. |
Если вы преобразуете традиционно обученную модель, чтобы создать Mdl, incrementalClassificationNaiveBayes использует Prior свойство традиционно обученной модели.
В противном случае, Prior 'empirical'.
Типы данных: single | double
ScoreTransform — Выиграйте функцию преобразования'none' (значение по умолчанию) | строковый скаляр | вектор символов | указатель на функциюЭто свойство доступно только для чтения.
Выиграйте функцию преобразования описание, как функции пошагового обучения преобразовывают необработанные значения отклика в виде вектора символов, строкового скаляра или указателя на функцию. 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
DistributionNames — Распределения предиктора'normal' (значение по умолчанию) | массив ячеек из символьных векторовЭто свойство доступно только для чтения.
Распределения предиктора в виде 'normal' или 1 NumPredictors массив ячеек со всеми ячейками, содержащими 'normal'. Условное распределение P (xj |ck) нормально (Гауссов), для j = 1, …, NumPredictors и каждый k ∈ ClassNames.
Типы данных: char | string | cell
DistributionParameters — Оценки параметра распределенияЭто свойство доступно только для чтения.
Параметр распределения оценивает в виде массива ячеек. DistributionParameters K-by-NumPredictors массив ячеек, где K является количеством классов и ячейки (kJ) содержит оценки параметра распределения для экземпляров предиктора j в классе k. Порядок строк соответствует порядку классов в свойстве ClassNames, и порядок столбцов соответствует порядку предикторов в данных о предикторе.
Если класс k не имеет никаких наблюдений для предиктора j, затем DistributionParameters { kJ}isempty).
Поскольку все распределения предиктора, заданные DistributionNames свойство, 'normal', каждая ячейка DistributionParameters 2 1 числовой вектор, где первым элементом является демонстрационное среднее значение, и вторым элементом является демонстрационное стандартное отклонение.
Типы данных: cell
IsWarm — Отметьте указание, отслеживает ли модель показатели производительностиfalse | trueОтметьте указание, отслеживает ли инкрементная модель показатели производительности в виде false или true.
Инкрементная модель Mdl warm (IsWarm становится true) когда инкрементные подходящие функции выполняют оба из следующих действий:
Подбирайте инкрементную модель к MetricsWarmupPeriod наблюдения.
Процесс MaxNumClasses классы или все имена классов заданы ClassNames аргумент значения имени.
| Значение | Описание |
|---|---|
true | Инкрементная модель Mdl является теплым. Следовательно, updateMetrics и updateMetricsAndFit отследите показатели производительности в Metrics свойство Mdl. |
false | updateMetrics и updateMetricsAndFit не отслеживайте показатели производительности. |
Типы данных: логический
Metrics — Метрики производительности моделиЭто свойство доступно только для чтения.
Метрики производительности модели, обновленные во время пошагового обучения updateMetrics и updateMetricsAndFitВ виде таблицы с двумя столбцами и строками m, где m является количеством метрик, заданных 'Metrics' аргумент пары "имя-значение".
Столбцы Metrics помечены Cumulative и Window.
Cumulative: Элемент j производительность модели, как измерено метрическим j, со времени модель стала теплой (IsWarm является 1).
Window: Элемент j производительность модели, как измерено метрическим j, оцененный по всем наблюдениям в окне задан MetricsWindowSize свойство. Обновления программного обеспечения Window после того, как это обрабатывает MetricsWindowSize наблюдения.
Строки помечены заданными метриками. Для получения дополнительной информации смотрите 'Metrics'.
Типы данных: table
MetricsWarmupPeriod — Количество подгонки наблюдений прежде, чем отследить показатели производительности (значение по умолчанию) | неотрицательное целое числоЭто свойство доступно только для чтения.
Количество наблюдений, инкрементная модель должна быть подходящей к тому, прежде чем это отследит показатели производительности в своем Metrics свойство в виде неотрицательного целого числа.
Для получения дополнительной информации смотрите показатели производительности.
Типы данных: single | double
MetricsWindowSize — Количество наблюдений, чтобы использоваться для расчета показателей производительности окна (значение по умолчанию) | положительное целое числоЭто свойство доступно только для чтения.
Количество наблюдений, чтобы использоваться для расчета показателей производительности окна в виде положительного целого числа.
Для получения дополнительной информации об опциях показателей производительности смотрите показатели производительности.
Типы данных: 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 наблюдений.
Перезапишите предыдущую инкрементную модель с новой, адаптированной к входящему наблюдению.
Хранилище (среднее значение первого переменного предиктора в первом классе), совокупные метрики и метрики окна, чтобы видеть, как они развиваются во время пошагового обучения.
% 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 проверяет эффективность модели на входящем наблюдении, и затем подбирает модель к тому наблюдению.
Чтобы видеть, как показатели производительности и развитый во время обучения, постройте их на отдельных подграфиках.
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 делает следующее:
Подгонка во время всех итераций пошагового обучения
Вычислите показатели производительности после метрического периода прогрева только.
Вычислите совокупные метрики во время каждой итерации.
Вычислите метрики окна после обработки 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 наблюдений.
Перезапишите предыдущую инкрементную модель с новой, адаптированной к входящему наблюдению.
Хранилище (стандартное отклонение первого переменного предиктора в первом классе), совокупные метрики и метрики окна, чтобы видеть, как они развиваются во время пошагового обучения.
% 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 проверяет эффективность модели на входящем наблюдении, и затем подбирает модель к тому наблюдению.
Чтобы видеть, как показатели производительности и развитый во время обучения, постройте их на отдельных подграфиках.
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')

График предлагает тот updateMetricsAndFit делает следующее:
Подгонка во время всех итераций пошагового обучения
Вычислите показатели производительности после метрического периода прогрева только.
Вычислите совокупные метрики во время каждой итерации.
Вычислите метрики окна после обработки 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 наблюдений за один раз. В каждой итерации:
Вызовите updateMetrics обновить совокупное и ошибку классификации окон модели, учитывая входящий фрагмент наблюдений. Перезапишите предыдущую инкрементную модель, чтобы обновить потери в Metrics свойство. Обратите внимание на то, что функция не подбирает модель к фрагменту данных — фрагмент является "новыми" данными для модели. Задайте веса наблюдения.
Вызовите fit подбирать модель к входящему фрагменту наблюдений. Перезапишите предыдущую инкрементную модель, чтобы обновить параметры модели. Задайте веса наблюдения.
Сохраните минимальную стоимость и среднее значение первого переменного предиктора первого класса .
% 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 обновить показатели производительности модели, учитывая новый фрагмент данных, и затем подбирать модель к данным.
Постройте график трассировки показателей производительности и оцененного коэффициента .
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')

Совокупная потеря устойчива и постепенно уменьшается, тогда как потеря окна переходит.
изменения резко сначала, затем постепенно выравнивается как fit процессы больше фрагментов.
Incremental learning или online learning, является ветвью машинного обучения, касавшегося обработки входящих данных от потока данных, возможно, учитывая мало ни к какому знанию распределения переменных предикторов, аспектов предсказания или целевой функции (включая настройку значений параметров), или помечены ли наблюдения. Пошаговое обучение отличается от традиционного машинного обучения, где достаточно маркированных данных доступно, чтобы соответствовать к модели, выполните перекрестную проверку, чтобы настроить гиперпараметры и вывести распределение предиктора.
Учитывая входящие наблюдения, модель пошагового обучения обрабатывает данные любым из следующих способов, но обычно этим порядком:
Предскажите метки.
Измерьте прогнозирующий уровень.
Проверяйте на структурные пропуски или дрейфуйте в модели.
Подбирайте модель к входящим наблюдениям.
updateMetrics и updateMetricsAndFit функции отслеживают метрики производительности модели ('Metrics') из новых данных, когда инкрементной моделью является warm (IsWarm свойство. Инкрементная модель является теплой когда fit или updateMetricsAndFit выполните оба из следующих действий:
Подбирайте инкрементную модель к наблюдениям MetricsWarmupPeriod, которая является metrics warm-up period.
Процесс MaxNumClasses классы или все имена классов заданы ClassNames аргумент значения имени.
Metrics свойство инкрементной модели хранит две формы каждого показателя производительности как переменные (столбцы) таблицы, Cumulative и Window, с отдельными метриками в строках. Когда инкрементная модель является теплой, updateMetrics и updateMetricsAndFit обновите метрики на следующих частотах:
Cumulative — Функции вычисляют совокупные метрики начиная с запуска отслеживания производительности модели. Функции обновляют метрики каждый раз, когда вы вызываете функции и основываете вычисление на целом предоставленном наборе данных.
Window — Функции вычисляют метрики на основе всех наблюдений в окне, определенном аргументом пары "имя-значение" MetricsWindowSize. MetricsWindowSize также определяет частоту в который обновления программного обеспечения Window метрики. Например, если MetricsWindowSize 20, функции вычисляют метрики на основе последних 20 наблюдений в данных, которыми снабжают (X((end – 20 + 1):end,:) и Y((end – 20 + 1):end)).
Инкрементные функции, которые отслеживают показатели производительности в окне, используют следующий процесс:
Для каждой заданной метрики сохраните буфер длины MetricsWindowSize и буфер весов наблюдения.
Заполните элементы метрического буфера с производительностью модели на основе пакетов входящих наблюдений и сохраните соответствующие веса наблюдения в буфере весов.
Когда буфер заполнен, перезапись Mdl.Metrics.Window со средневзвешенной эффективностью в метрическом окне. Если буфер переполнен когда функциональные процессы пакет наблюдений, последнего входящего MetricsWindowSize наблюдения вводят буфер, и самые ранние наблюдения удалены из буфера. Например, предположите MetricsWindowSize 20, метрический буфер имеет 10 значений от ранее обработанного пакета, и поступают 15 значений. Чтобы составить длину 20 окон, функции используют измерения от 15 входящих наблюдений и последние 5 измерений от предыдущего пакета.
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.