Обучите наивную модель классификации Байеса для инкрементного обучения
fit функция подходит для сконфигурированной наивной классификационной модели Байеса для инкрементного обучения (incrementalClassificationNaiveBayes объект) для потоковой передачи данных. Чтобы дополнительно отследить показатели эффективности, используя данные по мере их поступления, используйте updateMetricsAndFit вместо этого.
Для подгонки или перекрестной проверки наивной модели классификации Байеса ко всему пакету данных сразу, см. fitcnb.
возвращает наивную модель классификации Байеса для инкрементного обучения Mdl = fit(Mdl,X,Y)Mdl, которая представляет входу наивную модель классификации Байеса для инкрементного обучения Mdl обучен с использованием предиктора и данных отклика, X и Y соответственно. В частности, fit обновляет условное апостериорное распределение переменных предиктора, учитывая данные.
Этот пример показывает аппроксимацию инкрементного наивного учащегося Байеса, когда вы знаете только ожидаемое максимальное количество классов в данных.
Создайте инкрементальную наивную модель Байеса. Укажите, что максимальное количество ожидаемых классов составляет 5.
Mdl = incrementalClassificationNaiveBayes('MaxNumClasses',5)Mdl =
incrementalClassificationNaiveBayes
IsWarm: 0
Metrics: [1×2 table]
ClassNames: [1×0 double]
ScoreTransform: 'none'
DistributionNames: 'normal'
DistributionParameters: {}
Properties, Methods
Mdl является incrementalClassificationNaiveBayes модель. Все его свойства доступны только для чтения. Mdl может столкнуться не более чем с 5 уникальными классами. По умолчанию предшествующее распределение классов Mdl.Prior является эмпирическим, что означает, что программное обеспечение обновляет предыдущее распределение, сталкиваясь с метками.
Mdl необходимо соответствовать данным, прежде чем использовать их для выполнения любых других операций.
Загрузите набор данных о деятельности человека. Случайным образом перетасуйте данные.
load humanactivity n = numel(actid); rng(1) % For reproducibility idx = randsample(n,n); X = feat(idx,:); Y = actid(idx);
Для получения дополнительной информации о наборе данных введите Description в командной строке.
Подгонка инкрементальной модели к обучающим данным в фрагментах по 50 наблюдений за раз при помощи fit функция. При каждой итерации:
Симулируйте поток данных путем обработки 50 наблюдений.
Перезаписать предыдущую инкрементальную модель на новую, подобранную входящему наблюдению.
Сохраните среднее значение первого предиктора в первом классе и априорная вероятность того, что субъект движется (Y > 2), чтобы увидеть, как они развиваются во время инкрементного обучения.
% Preallocation numObsPerChunk = 50; nchunk = floor(n/numObsPerChunk); mu11 = zeros(nchunk,1); priormoved = 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 = fit(Mdl,X(idx,:),Y(idx)); mu11(j) = Mdl.DistributionParameters{1,1}(1); priormoved(j) = sum(Mdl.Prior(Mdl.ClassNames > 2)); end
IncrementalMdl является incrementalClassificationNaiveBayes объект модели обучен на всех данных в потоке.
Чтобы увидеть, как параметры развивались во время инкрементного обучения, постройте их на отдельных подграфиках.
figure; subplot(2,1,1) plot(mu11) ylabel('\mu_{11}') xlabel('Iteration') axis tight subplot(2,1,2) plot(priormoved); ylabel('Prior P(Subject Moved)') xlabel('Iteration') axis tight

fit обновляет среднее апостериорное распределения предиктора, когда он обрабатывает каждый фрагмент. Поскольку предшествующее распределение классов эмпирически, (субъект движется) изменяется как fit обрабатывает каждый фрагмент.
Этот пример показывает аппроксимацию инкрементного наивного учащегося Байеса, когда вы знаете все имена классов в данных.
Рассмотрите обучение устройства, чтобы предсказать, сидит ли субъект, стоит ли он, ходит, бегает или танцует, на основе биометрических данных, измеренных по теме, и вы знаете, что имена классов 1 через 5 к деятельности. Кроме того, предположим, что исследователи планируют равномерно подвергать устройство воздействию каждого класса.
Создайте инкрементный наивный ученик Бейеса для многоклассового обучения. Задайте имена классов и равномерное предшествующее распределение классов.
classnames = 1:5; Mdl = incrementalClassificationNaiveBayes('ClassNames',classnames,'Prior','uniform')
Mdl =
incrementalClassificationNaiveBayes
IsWarm: 0
Metrics: [1×2 table]
ClassNames: [1 2 3 4 5]
ScoreTransform: 'none'
DistributionNames: 'normal'
DistributionParameters: {5×0 cell}
Properties, Methods
Mdl является incrementalClassificationNaiveBayes объект модели. Все его свойства доступны только для чтения. Во время обучения наблюдаемые метки должны быть в Mdl.ClassNames.
Mdl необходимо соответствовать данным, прежде чем использовать их для выполнения любых других операций.
Загрузите набор данных о деятельности человека. Случайным образом перетасуйте данные.
load humanactivity n = numel(actid); rng(1); % For reproducibility idx = randsample(n,n); X = feat(idx,:); Y = actid(idx);
Для получения дополнительной информации о наборе данных введите Description в командной строке.
Подгонка инкрементальной модели к обучающим данным с помощью fit функция. Симулируйте поток данных путем обработки фрагментов по 50 наблюдений за раз. При каждой итерации:
Обработайте 50 наблюдений.
Перезаписать предыдущую инкрементальную модель на новую, подобранную входящему наблюдению.
Сохраните среднее значение первого предиктора в первом классе и априорная вероятность того, что субъект движется (Y > 2), чтобы увидеть, как они развиваются во время инкрементного обучения.
% Preallocation numObsPerChunk = 50; nchunk = floor(n/numObsPerChunk); mu11 = zeros(nchunk,1); priormoved = 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 = fit(Mdl,X(idx,:),Y(idx)); mu11(j) = Mdl.DistributionParameters{1,1}(1); priormoved(j) = sum(Mdl.Prior(Mdl.ClassNames > 2)); end
IncrementalMdl является incrementalClassificationNaiveBayes объект модели обучен на всех данных в потоке.
Чтобы увидеть, как параметры развивались во время инкрементного обучения, постройте их на отдельных подграфиках.
figure; subplot(2,1,1) plot(mu11) ylabel('\mu_{11}') xlabel('Iteration') axis tight subplot(2,1,2) plot(priormoved); ylabel('Prior P(Subject Moved)') xlabel('Iteration') axis tight

fit обновляет среднее апостериорное распределения предиктора, когда он обрабатывает каждый фрагмент. Поскольку предшествующее распределение классов задано как равномерное, (субъект движется) = 0,6 и не меняется следующим fit обрабатывает каждый фрагмент.
Обучите наивную модель классификации Байеса с помощью 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;
Обучите наивную модель классификации Байеса
Подгонка наивной модели классификации Байеса к случайной выборке из половины данных.
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: {1×60 cell}
DistributionParameters: {5×60 cell}
Properties, Methods
TTMdl является ClassificationNaiveBayes объект модели, представляющий традиционно обученную наивную классификационную модель Байеса.
Преобразуйте обученную модель
Преобразуйте традиционно обученную модель в наивную классификацию Байеса для инкрементного обучения.
IncrementalMdl = incrementalLearner(TTMdl)
IncrementalMdl =
incrementalClassificationNaiveBayes
IsWarm: 1
Metrics: [1×2 table]
ClassNames: [1 2 3 4 5]
ScoreTransform: 'none'
DistributionNames: {1×60 cell}
DistributionParameters: {5×60 cell}
Properties, Methods
IncrementalMdl является incrementalClassificationNaiveBayes модель. Поскольку имена классов заданы в Mdl.ClassNamesМетки, с которыми сталкиваются во время инкрементного обучения, должны быть в Mdl.ClassNames.
Отдельно отслеживайте метрики эффективности и подгоняйте модель
Выполните инкрементальное обучение для остальных данных с помощью 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"]); 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)); end
IncrementalMdl является incrementalClassificationNaiveBayes объект модели обучен на всех данных в потоке.
Также можно использовать updateMetricsAndFit чтобы обновить метрики эффективности модели, заданные новый фрагмент данных, и затем подгонять модель к данным.
Постройте график трассировки показателей эффективности.
h = plot(mc.Variables); xlim([0 nchunk]); ylabel('Minimal Cost') legend(h,mc.Properties.VariableNames) xlabel('Iteration')

Совокупные потери постепенно стабилизируются, в то время как потери окна скачут.
Пошагово обучайте наивную модель классификации Байеса, только когда ее эффективность ухудшается.
Загрузите набор данных о деятельности человека. Случайным образом перетасуйте данные.
load humanactivity n = numel(actid); rng(1) % For reproducibility idx = randsample(n,n); X = feat(idx,:); Y = actid(idx);
Для получения дополнительной информации о наборе данных введите Description в командной строке.
Сконфигурируйте наивную модель классификации Байеса для инкрементного обучения так, чтобы максимальное количество ожидаемых классов было 5, отслеживаемая метрика эффективности включает ошибочную частоту ошибок классификации и размер окна метрики 1000. Подгонка сконфигурированной модели к первым 1000 наблюдениям.
Mdl = incrementalClassificationNaiveBayes('MaxNumClasses',5,'MetricsWindowSize',1000,... 'Metrics','classiferror'); initobs = 1000; Mdl = fit(Mdl,X(1:initobs,:),Y(1:initobs));
Mdl является incrementalClassificationNaiveBayes объект модели.
Выполните инкрементальное обучение с условным подбором кривой, выполнив эту процедуру для каждой итерации:
Симулируйте поток данных путем обработки фрагмента 100 наблюдений за раз.
Обновите производительность модели на входящем фрагменты данных.
Подгонка модели к фрагменту данных только тогда, когда вероятность ошибки неправильной классификации больше 0,05.
При отслеживании эффективности и подбора кривой перезаписайте предыдущую инкрементную модель.
Сохраните вероятность ошибки неправильной классификации и среднее значение первого предиктора во втором классе чтобы увидеть, как они развиваются во время обучения.
Отследите, когда fit обучает модель.
% Preallocation numObsPerChunk = 100; nchunk = floor((n - initobs)/numObsPerChunk); mu21 = zeros(nchunk,1); ce = array2table(nan(nchunk,2),'VariableNames',["Cumulative" "Window"]); trained = false(nchunk,1); % Incremental fitting for j = 1:nchunk ibegin = min(n,numObsPerChunk*(j-1) + 1 + initobs); iend = min(n,numObsPerChunk*j + initobs); idx = ibegin:iend; Mdl = updateMetrics(Mdl,X(idx,:),Y(idx)); ce{j,:} = Mdl.Metrics{"ClassificationError",:}; if ce{j,2} > 0.05 Mdl = fit(Mdl,X(idx,:),Y(idx)); trained(j) = true; end mu21(j) = Mdl.DistributionParameters{2,1}(1); end
Mdl является incrementalClassificationNaiveBayes объект модели обучен на всех данных в потоке.
Чтобы увидеть, как производительность модели и развивался во время обучения, строил их на отдельных подграфиках.
subplot(2,1,1) plot(mu21) hold on plot(find(trained),mu21(trained),'r.') ylabel('\mu_{21}') legend('\mu_{21}','Training occurs','Location','best') hold off subplot(2,1,2) plot(ce.Variables) ylabel('Misclassification Error Rate') xlabel('Iteration') legend(ce.Properties.VariableNames,'Location','best')

График трассировки показывает периоды постоянных значений, в течение которых потеря в предыдущем окне наблюдения 1000 составляет самое большее 0,05.
Mdl - Наивная классификационная модель Байеса для инкрементного обучения в соответствии с потоковыми даннымиincrementalClassificationNaiveBayes объект моделиНаивная модель классификации Байеса для инкрементного обучения в соответствии с потоковыми данными, заданная как incrementalClassificationNaiveBayes объект модели. Можно создавать Mdl непосредственно или путем преобразования поддерживаемой, традиционно обученной модели машинного обучения с помощью incrementalLearner функция. Для получения дополнительной информации см. соответствующую страницу с описанием.
X - Фрагмент данных предиктораФрагмент данных предиктора, к которым подходит модель, задается как n -by- Mdl.NumPredictors матрица с плавающей точкой.
Длина меток наблюдений Y и количество наблюдений в X должна быть равной; Y - метка j наблюдения (строка или столбец) в (j)X.
Примечание
Если Mdl.NumPredictors = 0, fit выводит количество предикторов из X, и устанавливает свойство congruent модели выхода. В противном случае, если количество переменных предиктора в потоковых данных изменяется с Mdl.NumPredictors, fit выдает ошибку.
fit поддерживает только входные данные предиктора с плавающей точкой. Если модель входа Mdl представляет собой преобразованную, традиционно обученную модель, подходящую для категориальных данных, использование dummyvar чтобы преобразовать каждую категориальную переменную в числовую матрицу фиктивных переменных и объединить все фиктивные переменные матрицы и любые другие числовые предикторы. Для получения дополнительной информации см. Dummy Переменных.
Типы данных: single | double
Y - Фрагмент метокФрагмент меток, к которым подгоняется модель, задается как категориальные символьные или строковые массивы, логический вектор или вектор с плавающей точкой или массив ячеек из векторов символов.
Длина меток наблюдений Y и количество наблюдений в X должна быть равной; Y - метка j наблюдения (строка или столбец) в (j)X. fit выдает ошибку, когда достигается по крайней мере одно из условий:
Y содержит вновь встречающуюся метку, и максимальное количество классов было достигнуто ранее (см MaxNumClasses и ClassNames аргументы incrementalClassificationNaiveBayes).
Типы данных Y и Mdl.ClassNames разные.
Типы данных: char | string | cell | categorical | logical | single | double
Weights - Фрагмент весов наблюденийФрагмент весов наблюдений, заданный как вектор с плавающей точкой положительных значений. fit взвешивает наблюдения в X с соответствующими значениями в Weights. Размер Weights должен равняться n, это количество наблюдений в X.
По умолчанию Weights это таковые .(n,1)
Для получения дополнительной информации, включая схемы нормализации, см. «Веса наблюдений».
Типы данных: double | single
Примечание
Если наблюдение (предиктор или метка) или вес содержат хотя бы один отсутствующий (NaN) значение, fit игнорирует наблюдение. Следовательно, fit использует меньше n наблюдений для вычисления производительности модели.
Mdl - Обновленная наивная классификационная модель Байеса для инкрементного обученияincrementalClassificationNaiveBayes объект моделиОбновленная наивная модель классификации Байеса для инкрементного обучения, возвращенная как объект модели инкрементного обучения совпадающего типа данных, что и входная модель Mdl, an incrementalClassificationNaiveBayes объект.
Если на ClassNames свойство модели входа Mdl - пустой массив, fit устанавливает ClassNames свойство модели выхода Mdl на unique(Y). Если максимальное количество классов не достигнуто, fit добавляется к Mdl.ClassNames все вновь встретившиеся метки в Y.
В отличие от традиционного обучения, инкрементальное обучение может не иметь отдельного теста (holdout) набора. Поэтому, чтобы обработать каждый входящий фрагмент данных как тестовый набор, передайте инкрементальную модель и каждый входящий фрагмент updateMetrics перед обучением модели на тех же данных.
Для каждого условного распределения предиктора, fit вычисляет взвешенные средние значения и стандартное отклонение.
Если известное распределение вероятностей классов (другими словами, предшествующее распределение не эмпирическое), fit нормализует веса наблюдений в сумме с предшествующими вероятностями классов в соответствующих классах. Это действие подразумевает, что веса наблюдений по умолчанию являются соответствующими вероятностями предыдущего класса.
Если распределение вероятностей предыдущего класса эмпирическое, программное обеспечение нормализует указанные веса наблюдений до суммы 1 каждый раз, когда вы вызываете fit.
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.