Наивная Байесова модель классификации для пошагового обучения
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
матрица, где Стоится (
i
J
) = 1
≠ для всех i
, и j
Стоимость (
i
J
) = 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 p
Q
), если наблюдение
находится в классе p
, для каждого наблюдения в заданных данных. Установите другой элемент в строке q
к p
0
.
S
n-by-K числовая матрица предсказанных классификационных оценок. S
похоже на Posterior
выход predict
, где строки соответствуют наблюдениям в данных, и порядок следования столбцов соответствует порядку класса в ClassNames
свойство. S (
классификационная оценка наблюдения p
Q
)
будучи классифицированным на класс 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 является количеством классов и ячейки (k
J
) содержит оценки параметра распределения для экземпляров предиктора j
в классе k
. Порядок строк соответствует порядку классов в свойстве ClassNames
, и порядок столбцов соответствует порядку предикторов в данных о предикторе.
Если класс k
не имеет никаких наблюдений для предиктора j
, затем DistributionParameters {
k
J
}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. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.