Наивная классификационная модель Байеса для инкрементного обучения
incrementalClassificationNaiveBayes
создает incrementalClassificationNaiveBayes
объект модели, который представляет наивную многоклассовую классификационную модель Байеса для инкрементного обучения. incrementalClassificationNaiveBayes
поддерживает нормально распределенные переменные предиктора.
В отличие от другого Statistics and Machine Learning Toolbox™ объектов модели, incrementalClassificationNaiveBayes
можно вызвать непосредственно. Кроме того, можно задать опции обучения, такие как строения метрики эффективности и предыдущие вероятности класса, прежде чем подгонять модель к данным. После создания incrementalClassificationNaiveBayes
объект подготовлен для инкрементного обучения.
incrementalClassificationNaiveBayes
лучше всего подходит для инкрементного обучения. Для традиционного подхода к обучению наивной модели Байеса для многоклассовой классификации (такой как создание модели путем подбора ее к данным, выполнения перекрестной валидации, настройки гиперпараметров и так далее), смотрите fitcnb
.
Можно создать incrementalClassificationNaiveBayes
моделировать объект несколькими способами:
Вызов функции непосредственно - настройте опции инкрементного обучения или задайте опции конкретного учащегося, вызывая incrementalClassificationNaiveBayes
непосредственно. Этот подход лучше всего, когда у вас еще нет данных или вы хотите немедленно начать инкрементное обучение. Необходимо задать максимальное количество классов или всех имен классов, ожидаемых в данных отклика во время инкрементного обучения.
Преобразуйте традиционно обученную модель - Чтобы инициализировать наивную классификационную модель Байеса для инкрементного обучения с использованием параметров модели обученного наивного объекта модели Байеса, можно преобразовать традиционно обученную модель в incrementalClassificationNaiveBayes
моделировать объект путем передачи его в incrementalLearner
функция.
Вызовите функцию инкрементного обучения - fit
, updateMetrics
, и updateMetricsAndFit
принять сконфигурированную incrementalClassificationNaiveBayes
моделируйте объект и данные как вход и возвращайте incrementalClassificationNaiveBayes
объект модели обновлен информацией, полученной из модели входа, и данными.
возвращает наивный объект модели классификации Байеса по умолчанию для инкрементного обучения, Mdl
= incrementalClassificationNaiveBayes('MaxNumClasses',MaxNumClasses
)Mdl
, где MaxNumClasses
- максимальное количество классов, ожидаемое в данных отклика во время инкрементного обучения. Свойства модели по умолчанию содержат заполнители для неизвестных параметров модели. Необходимо обучить модель по умолчанию, прежде чем можно будет отследить ее эффективность или сгенерировать предсказания из нее.
задает все имена классов Mdl
= incrementalClassificationNaiveBayes('ClassNames',ClassNames
)ClassNames
ожидается в данных отклика во время инкрементного обучения и устанавливает ClassNames
свойство.
использует любую комбинацию входных аргументов в предыдущих синтаксисах, чтобы задать свойства и дополнительные опции, используя аргументы пары "имя-значение". Заключайте каждое имя в кавычки. Для примера, Mdl
= incrementalClassificationNaiveBayes(___,Name,Value
)incrementalClassificationNaiveBayes('MaxNumClasses',5,'MetricsWarmupPeriod',100)
устанавливает максимальное количество классов, ожидаемых в данных отклика, равным 5
, и устанавливает период разогрева метрики равным 100
.
MaxNumClasses
- Максимальное количество классовМаксимальное количество классов, ожидаемых в данных отклика во время инкрементного обучения, задается как положительное целое число.
Если вы не задаете 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 -by- MaxNumClasses числовая матрица |
|
Массив структур | Массив структур, содержащий два поля:
|
Если вы задаете Cost
, вы также должны задать ClassNames
аргумент. Cost
устанавливает Cost
свойство.
По умолчанию это MaxNumClasses
-by- MaxNumClasses
матрица, где Cost
для всех (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"
| ...Моделируйте метрики производительности для отслеживания во время инкрементного обучения, в дополнение к минимальным ожидаемым затратам на неправильную классификацию, заданным как встроенное имя функции потерь, строковый вектор имен, указатель на функцию (@metricName
), массив структур указателей на функцию или вектор камер с именами, указатели на функцию или массивы структур.
Когда Mdl
warm (см. IsWarm), updateMetrics
и updateMetricsAndFit
отследите показатели эффективности в свойстве Metrics Mdl
.
В следующей таблице перечислены встроенные имена функции потерь. Можно задать больше одного при помощи строкового вектора.
Имя | Описание |
---|---|
"binodeviance" | Биномиальное отклонение |
"classiferror" | Вероятность ошибки неправильной классификации |
"exponential" | Экспоненциал |
"hinge" | Стержень |
"logit" | Логистический |
'"mincost" | Минимальная ожидаемая стоимость неправильной классификации (для классификационных оценок, которые являются апостериорными вероятностями). |
"quadratic" | Квадратный |
Для получения дополнительной информации о встроенных функциях потерь смотрите loss
.
Пример: 'Metrics',["classiferror" "logit"]
Чтобы задать пользовательскую функцию, которая возвращает метрику эффективности, используйте обозначение указателя на функцию. Функция должна иметь следующую форму:
metric = customMetric(C,S,Cost)
Выходной аргумент metric
является n-на-1 числовым вектором, где каждый элемент является потерей соответствующего наблюдения в данных, обработанных инкрементальными функциями обучения во время цикла обучения.
Вы выбираете имя функции (customMetric
).
C
- n -by K логическая матрица с строками, указывающими класс, к которому принадлежит соответствующее наблюдение, где K - количество классов. Порядок столбцов соответствует порядку классов в ClassNames
свойство. Создание C
путем установки C
= (p
, q
)1
, если наблюдение
находится в p
, для каждого наблюдения в заданных данных. Установите другой элемент в строку q классов
на p
0
.
S
является n -by K числовой матрицей предсказанных классификационных оценок. S
аналогичен Posterior
выхода predict
, где строки соответствуют наблюдениям в данных, а порядок столбцов соответствует порядку классов в ClassNames
свойство. S
- классификационная оценка наблюдения (p
, q
)
классифицируется в классах p
.q
Cost
является K -by K числовой матрицей затрат на неправильную классификацию. Смотрите 'Cost'
аргумент имя-значение.
Чтобы задать несколько пользовательских метрик и назначить пользовательское имя каждому, используйте массив структур. Чтобы задать комбинацию встроенных и пользовательских метрик, используйте вектор камеры.
Пример: 'Metrics',struct('Metric1',@customMetric1,'Metric2',@customMetric2)
Пример: 'Metrics',{@customMetric1 @customeMetric2 'logit' struct('Metric3',@customMetric3)}
updateMetrics
и updateMetricsAndFit
хранить указанные метрики в таблице в Metrics
свойство. Тип данных Metrics
определяет имена строк таблицы.
'Metrics' Тип данных значения | Описание Metrics Имя строки свойства | Пример |
---|---|---|
Строка или вектор символов | Имя соответствующей встроенной метрики | Имя строки для "classiferror" является "ClassificationError" |
Массив структур | Имя поля | Имя строки для struct('Metric1',@customMetric1) является "Metric1" |
Указатель на функцию для функции, сохраненной в программном файле | Имя функции | Имя строки для @customMetric является "customMetric" |
Анонимная функция | , где метрический в Metrics | Имя строки для @(C,S,Cost)customMetric(C,S,Cost)... является CustomMetric_1 |
Для получения дополнительной информации о опциях показателей эффективности см. Раздел «Показатели эффективности».
Типы данных: char
| string
| struct
| cell
| function_handle
Вы можете задать большинство свойств, используя синтаксис аргумента пары "имя-значение" только при вызове incrementalClassificationNaiveBayes
непосредственно. Вы можете задать некоторые свойства при вызове incrementalLearner
для преобразования традиционно обученной модели. Вы не можете задать свойства DistributionParameters
, IsWarm
, и NumTrainingObservations
.
Cost
- Стоимость неправильной классификации наблюденияЭто свойство доступно только для чтения.
Стоимость неправильной классификации наблюдения, указанная как MaxNumClasses
-by- 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
- Количество переменных предиктора0
(по умолчанию) | неотрицательный числовой скалярЭто свойство доступно только для чтения.
Количество переменных предиктора, заданное как неотрицательный числовой скаляр.
Если вы преобразовываете традиционно обученную модель, чтобы создать Mdl
, NumPredictors
определяется конгруэнтным свойством традиционно обученной модели. В противном случае инкрементальные функции аппроксимации выводят NumPredictors
из данных предиктора во время обучения.
Типы данных: double
NumTrainingObservations
- Количество наблюдений, подходящих для инкрементальной модели0
(по умолчанию) | неотрицательный числовой скалярЭто свойство доступно только для чтения.
Количество наблюдений, подобранных к инкрементальной модели 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' | 2 x – 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
}[]
).
Потому что все распределения предикторов, заданные 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 не отслеживать метрики эффективности. |
Типы данных: logical
Metrics
- Моделируйте показатели производительностиЭто свойство доступно только для чтения.
Моделируйте метрики производительности, обновленные во время инкрементного обучения updateMetrics
и updateMetricsAndFit
, заданный как таблица с двумя столбцами и m строками, где m - количество метрик, заданное 'Metrics'
аргумент пары "имя-значение".
Столбцы Metrics
маркируются Cumulative
и Window
.
Cumulative
: j элемента
- производительность модели, измеренная метрикой j
, со времени, когда модель стала теплой (IsWarm есть 1
).
Window
: j элемента
- производительность модели, измеренная метрикой j
, рассчитывается по всем наблюдениям в окне, заданном MetricsWindowSize
свойство. Программное обеспечение обновляется Window
после того, как он обрабатывает MetricsWindowSize
наблюдения.
Строки помечены заданными метриками. Для получения дополнительной информации смотрите 'Metrics'
.
Типы данных: table
MetricsWarmupPeriod
- Количество наблюдений перед отслеживанием показателей эффективности1000
(по умолчанию) | неотрицательное целое числоЭто свойство доступно только для чтения.
Количество наблюдений, к которым должна соответствовать инкрементальная модель, прежде чем она отслеживает метрики эффективности в своей Metrics
свойство, заданное как неотрицательное целое число.
Для получения дополнительной информации см. «Показатели эффективности».
Типы данных: single
| double
MetricsWindowSize
- Количество наблюдений, используемых для вычисления показателей эффективности окна200
(по умолчанию) | положительное целое числоЭто свойство доступно только для чтения.
Количество наблюдений, используемых для вычисления показателей эффективности окна, заданное в виде положительного целого числа.
Для получения дополнительной информации о опциях показателей эффективности см. Раздел «Показатели эффективности».
Типы данных: single
| double
fit | Обучите наивную модель классификации Байеса для инкрементного обучения |
updateMetricsAndFit | Обновите метрики эффективности в наивной модели классификации Байеса для инкрементного обучения с учетом новых данных и train |
updateMetrics | Обновляйте метрики эффективности в наивной модели классификации Байеса для инкрементного обучения с учетом новых данных |
logp | Логгирование безусловной плотности вероятностей наивной модели классификации Байеса для инкрементного обучения |
loss | Потеря наивной модели классификации Байеса для инкрементного обучения на пакете данных |
predict | Предсказать ответы на новые наблюдения из наивной модели классификации Байеса для инкрементного обучения |
Чтобы создать наивную модель классификации Байеса для инкрементного обучения, наименьший объем информации, которую вы должны задать, является максимальным количеством классов, которые вы ожидаете, что модель испытает ('MaxNumClasses'
аргумент имя-значение). Когда вы подгоняете модель к входящим пакетам данных с помощью инкрементальной функции подгонки, модель собирает недавно опытные классы в своей ClassNames
свойство. Если заданное ожидаемое максимальное количество классов неточно, возникает одна из следующих альтернатив:
Прежде чем инкрементальная функция аппроксимации испытывает ожидаемое максимальное количество классов, модель является холодной. Следовательно, updateMetrics
и updateMetricsAndFit
функции не измеряют показатели эффективности.
Если количество классов превышает максимально ожидаемое, инкрементальная функция аппроксимации вызывает ошибку.
В этом примере показано, как создать наивную модель классификации Байеса для инкрементного обучения, когда вы знаете только ожидаемое максимальное количество классов в данных. Кроме того, пример иллюстрирует последствия, когда инкрементные функции аппроксимации испытывают все ожидаемые классы рано и поздно в выборке.
В данном примере рассмотрите возможность обучения устройства для предсказания того, сидит ли субъект, стоит ли он, ходит, бегает или танцует, на основе биометрических данных, измеренных на объекте. Поэтому устройство имеет максимум 5 классов, из которых можно выбрать.
Опыт Ожидаемое Максимальное Количество Классов Раннее в Выборке
Создайте инкрементный наивный ученик Бейеса для многоклассового обучения. Задайте в данных не более 5 классов.
MdlEarly = incrementalClassificationNaiveBayes('MaxNumClasses',5)
MdlEarly = incrementalClassificationNaiveBayes IsWarm: 0 Metrics: [1×2 table] ClassNames: [1×0 double] ScoreTransform: 'none' DistributionNames: 'normal' DistributionParameters: {} Properties, Methods
MdlEarly
является incrementalClassificationNaiveBayes
объект модели. Все его свойства доступны только для чтения.
MdlEarly
необходимо соответствовать данным, прежде чем использовать их для выполнения любых других операций.
Загрузите набор данных о деятельности человека. Случайным образом перетасуйте данные.
load humanactivity n = numel(actid); rng(1); % For reproducibility idx = randsample(n,n); X = feat(idx,:); Y = actid(idx);
Для получения дополнительной информации о наборе данных введите Description
в командной строке.
Подгонка инкрементальной модели к обучающим данным с помощью updateMetricsAndfit
функция. Симулируйте поток данных путем обработки фрагментов по 50 наблюдений за раз. При каждой итерации:
Обработайте 50 наблюдений.
Перезаписать предыдущую инкрементальную модель на новую, подобранную входящему наблюдению.
Магазин (среднее значение первой переменной предиктора в первом классе), совокупные метрики и метрики окна, чтобы увидеть, как они развиваются во время инкрементного обучения.
% 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 наблюдений.
Опыт Ожидаемое Максимальное Количество Классов Поздно В Выборке
Создайте другую наивную модель Байеса для инкрементного обучения для цели.
MdlLate = incrementalClassificationNaiveBayes('MaxNumClasses',5)
MdlLate = incrementalClassificationNaiveBayes IsWarm: 0 Metrics: [1×2 table] ClassNames: [1×0 double] ScoreTransform: 'none' DistributionNames: 'normal' DistributionParameters: {} Properties, Methods
Переместите все наблюдения, помеченные классом 5, в конец выборки.
idx5 = Y == 5; Xnew = [X(~idx5,:); X(idx5,:)]; Ynew = [Y(~idx5) ;Y(idx5)];
Подгонка инкрементной модели и результатов графика, как выполнено ранее.
mcnew = array2table(zeros(nchunk,2),'VariableNames',["Cumulative" "Window"]); mu1new = zeros(nchunk,1); for j = 1:nchunk ibegin = min(n,numObsPerChunk*(j-1) + 1); iend = min(n,numObsPerChunk*j); idx = ibegin:iend; MdlLate = updateMetricsAndFit(MdlLate,Xnew(idx,:),Ynew(idx)); mcnew{j,:} = MdlLate.Metrics{"MinimalCost",:}; mu1new(j + 1) = MdlLate.DistributionParameters{1,1}(1); end figure; subplot(2,1,1) plot(mu1new) ylabel('\mu_{11}') xlim([0 nchunk]); subplot(2,1,2) h = plot(mcnew.Variables); xlim([0 nchunk]); ylabel('Minimal Cost') xline(MdlLate.MetricsWarmupPeriod/numObsPerChunk,'r-.'); xline(sum(~idx5)/numObsPerChunk,'g-.'); legend(h,mcnew.Properties.VariableNames,'Location','best') xlabel('Iteration')
The updateMetricsAndFit
функция обучается в течение инкрементного обучения, но функция начинает отслеживать метрики эффективности после того, как модель подгоняется ко всему ожидаемому количеству классов (зеленая вертикальная линия в нижней подграфике).
В этом примере показано, как создать инкрементного наивного учащегося Байеса, когда вы знаете все имена классов в данных.
Рассмотрите обучение устройства, чтобы предсказать, сидит ли субъект, стоит ли он, ходит, бегает или танцует, на основе биометрических данных, измеренных по теме, и вы знаете, что имена классов 1 через 5 к деятельности.
Создайте инкрементный наивный ученик Бейеса для многоклассового обучения. Задайте имена классов.
classnames = 1:5;
Mdl = incrementalClassificationNaiveBayes('ClassNames',classnames)
Mdl = incrementalClassificationNaiveBayes IsWarm: 0 Metrics: [1x2 table] ClassNames: [1 2 3 4 5] ScoreTransform: 'none' DistributionNames: 'normal' DistributionParameters: {5x0 cell} Properties, Methods
Mdl
является incrementalClassificationNaiveBayes
объект модели. Все его свойства доступны только для чтения.
Mdl
необходимо соответствовать данным, прежде чем использовать их для выполнения любых других операций.
Загрузите набор данных о деятельности человека. Случайным образом перетасуйте данные.
load humanactivity n = numel(actid); rng(1); % For reproducibility idx = randsample(n,n); X = feat(idx,:); Y = actid(idx);
Для получения дополнительной информации о наборе данных введите Description
в командной строке.
Подгонка инкрементальной модели к обучающим данным с помощью updateMetricsAndfit
функция. Симулируйте поток данных путем обработки фрагментов по 50 наблюдений за раз. При каждой итерации:
Обработайте 50 наблюдений.
Перезаписать предыдущую инкрементальную модель на новую, подобранную входящему наблюдению.
% Preallocation numObsPerChunk = 50; nchunk = floor(n/numObsPerChunk); % Incremental learning for j = 1:nchunk ibegin = min(n,numObsPerChunk*(j-1) + 1); iend = min(n,numObsPerChunk*j); idx = ibegin:iend; Mdl = updateMetricsAndFit(Mdl,X(idx,:),Y(idx)); end
В дополнение к указанию максимального количества имен классов, подготовьте инкрементального наивного учащегося Байеса путем определения периода разогрева метрики, в течение которого updateMetricsAndFit
функция подходит только для модели. Задайте размер окна метрики 500 наблюдений.
Загрузите набор данных о деятельности человека. Случайным образом перетасуйте данные.
load humanactivity
n = numel(actid);
idx = randsample(n,n);
X = feat(idx,:);
Y = actid(idx);
Для получения дополнительной информации о наборе данных введите Description
в командной строке.
Создайте инкрементальную линейную модель для двоичной классификации. Сконфигурируйте модель следующим образом:
Задайте период прогрева метрики 5000 наблюдений.
Задайте размер окна метрики 500 наблюдений.
Отследите ошибку классификации и минимальные затраты, чтобы измерить эффективность модели.
Mdl = incrementalClassificationNaiveBayes('MaxNumClasses',5,'MetricsWarmupPeriod',5000,... 'MetricsWindowSize',500,'Metrics',["classiferror" "mincost"])
Mdl = incrementalClassificationNaiveBayes IsWarm: 0 Metrics: [2x2 table] ClassNames: [1x0 double] ScoreTransform: 'none' DistributionNames: 'normal' DistributionParameters: {} Properties, Methods
Mdl
является incrementalClassificationNaiveBayes
объект модели, сконфигурированный для инкрементного обучения.
Подгонка инкрементной модели к остальной части данных с помощью updateMetricsAndfit
функция. При каждой итерации:
Симулируйте поток данных путем обработки фрагмента 50 наблюдений.
Перезаписать предыдущую инкрементальную модель на новую, подобранную входящему наблюдению.
Магазин (стандартное отклонение первой переменной предиктора в первом классе), совокупные метрики и метрики окна, чтобы увидеть, как они развиваются во время инкрементного обучения.
% 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 итераций).
Обучите наивную модель Байеса для многоклассовой классификации при помощи fitcnb
преобразуйте его в пошагового ученика, отслеживайте его эффективность и подгоняйте к потоковым данным. Перенос опций обучения от традиционного к инкрементному обучению.
Загрузка и предварительная обработка данных
Загрузите набор данных о деятельности человека. Случайным образом перетасуйте данные.
load humanactivity rng(1); % For reproducibility n = numel(actid); idx = randsample(n,n); X = feat(idx,:); Y = actid(idx);
Для получения дополнительной информации о наборе данных введите Description
в командной строке.
Предположим, что данные, собранные, когда субъект находился в простое (Y
> 2
) имеет удвоенное качество, чем когда субъект двигался. Создайте весовую переменную, которая атрибутирует 2 наблюдениям, собранным от бездействующего субъекта, и 1 - движущемуся субъекту.
W = ones(n,1) + (Y < 3);
Обучите наивную модель Байеса
Подгонка наивной модели Байеса для многоклассовой классификации к случайной выборке из половины данных.
idxtt = randsample([true false],n,true);
TTMdl = fitcnb(X(idxtt,:),Y(idxtt),'Weights',W(idxtt))
TTMdl = ClassificationNaiveBayes ResponseName: 'Y' CategoricalPredictors: [] ClassNames: [1 2 3 4 5] ScoreTransform: 'none' NumObservations: 12053 DistributionNames: {1x60 cell} DistributionParameters: {5x60 cell} Properties, Methods
TTMdl
является ClassificationNaiveBayes
объект модели, представляющий традиционно обученную наивную модель Байеса.
Преобразуйте обученную модель
Преобразуйте традиционно обученную наивную модель Байеса в наивную модель классификации Байеса для инкрементного обучения.
IncrementalMdl = incrementalLearner(TTMdl)
IncrementalMdl = incrementalClassificationNaiveBayes IsWarm: 1 Metrics: [1x2 table] ClassNames: [1 2 3 4 5] ScoreTransform: 'none' DistributionNames: {1x60 cell} DistributionParameters: {5x60 cell} Properties, Methods
Отдельно отслеживайте метрики эффективности и подгоняйте модель
Выполните инкрементальное обучение для остальных данных с помощью updateMetrics
и fit
функций. Симулируйте поток данных путем обработки 50 наблюдений за раз. При каждой итерации:
Функции 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
аргумент имя-значение.
The 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. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.