Наивная модель классификации Байеса для инкрементного обучения
incrementalClassificationNaiveBayes создает incrementalClassificationNaiveBayes объект модели, который представляет наивную многоклассную классификационную модель Байеса для инкрементного обучения. incrementalClassificationNaiveBayes поддерживает нормально распределенные переменные предиктора.
В отличие от других объектов модели 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 собственность.
использует любую из комбинаций input-argument в предыдущих синтаксисах для установки свойств и дополнительных параметров с использованием аргументов пары name-value. Заключите каждое имя в кавычки. Например, 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 матрица, где Cost( для всех i,j) = 1 ≠ i, и jCost( для всех 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 теплый (см. IsThream), 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 кому p0.
S - числовая матрица n-by-K прогнозируемых классификационных оценок. S аналогичен Posterior вывод predict, где строки соответствуют наблюдениям в данных, а порядок столбцов соответствует порядку классов в ClassNames собственность. S( - классификационный балл наблюдения p,q) классифицируется по классу p.q
Cost является цифровой матрицей K-by-K затрат на неправильную классификацию. См. раздел 'Cost' аргумент «имя-значение».
Чтобы указать несколько пользовательских метрик и назначить каждому пользовательское имя, используйте массив структуры. Чтобы задать комбинацию встроенных и пользовательских метрик, используйте вектор ячейки.
Пример: 'Metrics',struct('Metric1',@customMetric1,'Metric2',@customMetric2)
Пример: 'Metrics',{@customMetric1 @customeMetric2 'logit' struct('Metric3',@customMetric3)}
updateMetrics и updateMetricsAndFit сохранить указанные метрики в таблице в Metrics собственность. Тип данных Metrics определяет имена строк таблицы.
'Metrics' Тип данных значения | Описание Metrics Имя строки свойства | Пример |
|---|---|---|
| Строковый или символьный вектор | Наименование соответствующей встроенной метрики | Имя строки для "classiferror" является "ClassificationError" |
| Структурный массив | Имя поля | Имя строки для struct('Metric1',@customMetric1) является "Metric1" |
| Дескриптор функции для функции, сохраненной в файле программы | Наименование функции | Имя строки для @customMetric является "customMetric" |
| Анонимная функция | CustomMetric_, где является метрикой в 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 - Количество переменных предиктора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' | log (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}[]).
Потому что все предикторные распределения, указанные DistributionNames свойство, являются 'normal', каждая ячейка DistributionParameters является числовым вектором 2 на 1, где первым элементом является среднее значение выборки, а вторым элементом является стандартное отклонение выборки.
Типы данных: cell
IsWarm - Флаг, указывающий, отслеживает ли модель метрики производительностиfalse | trueФлаг, указывающий, отслеживает ли инкрементная модель метрики производительности, указанные как false или true.
Инкрементная модель Mdl теплый (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, с момента, когда модель стала теплой (IsHeam 1).
Window: Элемент j - производительность модели, измеряемая метрикой j, оценивается по всем наблюдениям в пределах окна, указанного MetricsWindowSize собственность. Обновления программного обеспечения Window после обработки MetricsWindowSize наблюдения.
Строки помечены указанными метриками. Для получения более подробной информации см. 'Metrics'.
Типы данных: table
MetricsWarmupPeriod - Количество наблюдений перед отслеживанием показателей производительности1000 (по умолчанию) | неотрицательное целое числоЭто свойство доступно только для чтения.
Количество наблюдений, которым должна соответствовать инкрементная модель, прежде чем она будет отслеживать метрики производительности в своей Metrics , указанное как неотрицательное целое число.
Дополнительные сведения см. в разделе Показатели производительности.
Типы данных: single | double
MetricsWindowSize - Количество наблюдений, используемых для вычисления показателей производительности окна200 (по умолчанию) | положительное целое числоЭто свойство доступно только для чтения.
Число наблюдений, используемых для вычисления метрик производительности окна, указанных как положительное целое число.
Дополнительные сведения о параметрах показателей производительности см. в разделе Показатели производительности.
Типы данных: single | double
fit | Обучить наивную модель классификации Байеса для инкрементного обучения |
updateMetricsAndFit | Обновление показателей производительности в наивной модели классификации Байеса для инкрементного обучения с учетом новых данных и модели обучения |
updateMetrics | Обновление показателей производительности в наивной модели классификации Байеса для инкрементного обучения с учетом новых данных |
logp | Логарифмическая безусловная плотность вероятности наивной модели классификации Байеса для инкрементного обучения |
loss | Потеря наивной модели классификации Байеса для инкрементного обучения на пакете данных |
predict | Прогнозировать ответы для новых наблюдений из наивной модели классификации Байеса для инкрементного обучения |
Чтобы создать наивную модель классификации Байеса для инкрементного обучения, необходимо указать наименьший объем информации - максимальное количество классов, которое, как ожидается, будет испытано моделью ('MaxNumClasses' аргумент «имя-значение»). При подгонке модели к входящим пакетам данных с помощью инкрементной функции фитинга модель собирает новые опытные классы в своих ClassNames собственность. Если указанное ожидаемое максимальное число классов неточно, возникает одна из следующих альтернатив:
Прежде чем функция инкрементной подгонки получит ожидаемое максимальное количество классов, модель будет холодной. Следовательно, updateMetrics и updateMetricsAndFit функции не измеряют показатели производительности.
Если число классов превышает максимально допустимое, функция инкрементной подгонки выдает ошибку.
В этом примере показано, как создать наивную модель классификации Байеса для инкрементного обучения, если известно только ожидаемое максимальное количество классов в данных. Кроме того, пример иллюстрирует последствия, когда инкрементные фитинговые функции испытывают все ожидаемые классы на ранних и поздних этапах выборки.
Для этого примера рассмотрим тренировку устройства, чтобы предсказать, сидит ли субъект, стоит, ходит, бегает или танцует на основе биометрических данных, измеренных на предмете. Поэтому устройство имеет максимум 5 классов, из которых можно выбрать.
Ожидаемое максимальное количество классов на ранних этапах выборки
Создание инкрементного наивного обучающегося Bayes для многоклассового обучения. Укажите максимум 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 проверяет производительность модели на входящем наблюдении, а затем подгоняет модель под это наблюдение.
Чтобы увидеть, как во время обучения развивались показатели производительности и мк11, постройте их график на отдельных вложенных графиках.
figure; subplot(2,1,1) plot(mu1) ylabel('\mu_{11}') xlim([0 nchunk]); subplot(2,1,2) h = plot(mc.Variables); xlim([0 nchunk]); ylabel('Minimal Cost') xline(MdlEarly.MetricsWarmupPeriod/numObsPerChunk,'r-.'); legend(h,mc.Properties.VariableNames) xlabel('Iteration')

Сюжет говорит о том, что updateMetricsAndFit выполняет следующее:
Подгоняйте во время всех инкрементных итераций обучения
Вычислять метрики производительности только после периода прогрева метрик.
Вычислите кумулятивные метрики во время каждой итерации.
Вычислите метрику окна после обработки 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')

updateMetricsAndFit функция проходит через инкрементное обучение, но функция начинает отслеживать метрики производительности после того, как модель будет адаптирована ко всему ожидаемому количеству классов (зеленая вертикальная линия в нижней части графика).
В этом примере показано, как создать инкрементного наивного ученика Байеса, когда вы знаете все имена классов в данных.
Рассмотрите возможность обучения устройству, чтобы предсказать, сидит ли субъект, стоит, ходит, бегает или танцует на основе биометрических данных, измеренных по предмету, и вы знаете, что названия классов отображают 1-5 на мероприятие.
Создание инкрементного наивного обучающегося Bayes для многоклассового обучения. Укажите имена классов.
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 проверяет производительность модели на входящем наблюдении, а затем подгоняет модель под это наблюдение.
Чтобы увидеть, как во время обучения развивались метрики производительности и start11, постройте их график на отдельных субплотах.
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 обрабатывает больше кусков.
Инкрементное обучение, или онлайн-обучение, - это ветвь машинного обучения, связанная с обработкой входящих данных из потока данных, возможно, без знания распределения переменных предиктора, аспектов предсказания или целевой функции (включая значения параметров настройки) или того, помечены ли наблюдения. Инкрементное обучение отличается от традиционного машинного обучения, когда достаточно помеченных данных доступно для соответствия модели, выполнения перекрестной проверки для настройки гиперпараметров и вывода распределения предиктора.
Учитывая поступающие наблюдения, модель инкрементного обучения обрабатывает данные любым из следующих способов, но обычно в таком порядке:
Прогнозировать метки.
Измерьте прогностическую производительность.
Проверьте наличие структурных разрывов или дрейфа в модели.
Подгоните модель к входящим наблюдениям.
updateMetrics и updateMetricsAndFit функции отслеживают показатели производительности модели ('Metrics') из новых данных, когда инкрементная модель является теплой (IsWarm свойство). Инкрементная модель является теплой, когда fit или updateMetricsAndFit выполните оба следующих действия:
Подгоните инкрементную модель к наблюдениям MetrityWarmupPeriod, которые являются периодом прогрева метрик.
Процесс MaxNumClasses классы или все имена классов, указанные ClassNames аргумент «имя-значение».
Metrics свойство инкрементной модели хранит две формы каждой метрики производительности в качестве переменных (столбцов) таблицы, Cumulative и Window, с отдельными метриками в строках. Когда инкрементная модель является теплой, updateMetrics и updateMetricsAndFit обновить метрики на следующих частотах:
Cumulative - Функции вычисляют кумулятивные метрики с момента начала отслеживания производительности модели. Функции обновляют метрики при каждом вызове функций и основывают расчет на всем предоставленном наборе данных.
Window - функции вычисляют метрику на основе всех наблюдений в пределах окна, определяемого аргументом пары имя-значение MetrityWindowSize. 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. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.