Обучить наивную модель классификации Байеса для инкрементного обучения
fit функция подходит для настроенной наивной модели классификации Байеса для инкрементного обучения (incrementalClassificationNaiveBayes object) для потоковой передачи данных. Для дополнительного отслеживания показателей производительности с использованием данных по мере их поступления используйте updateMetricsAndFit вместо этого.
Сведения о подгонке или перекрестной проверке наивной модели классификации Байеса для всего пакета данных одновременно см. в разделе fitcnb.
возвращает наивную модель классификации Байеса для инкрементного обучения Mdl = fit(Mdl,X,Y)Mdl, которая представляет входную наивную модель классификации Байеса для инкрементного обучения Mdl обучены с использованием данных предиктора и ответа, X и Y соответственно. В частности, fit обновляет условное апостериорное распределение переменных предиктора с учетом данных.
В этом примере показано, как приспосабливаться к инкрементному наивному ученику Bayes, если известно только ожидаемое максимальное количество классов в данных.
Создайте инкрементную наивную модель Байеса. Укажите, что максимальное число ожидаемых классов равно 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 на мероприятие. Кроме того, предположим, что исследователи планируют подвергнуть устройство каждому классу равномерно.
Создание инкрементного наивного обучающегося Bayes для многоклассового обучения. Укажите имена классов и единообразное предыдущее распределение классов.
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;
Модель классификации Train Naive Bayes
Поместите наивную модель классификации Байеса в случайную выборку из половины данных.
idxtt = randsample([true false],n,true);
TTMdl = fitcnb(X(idxtt,:),Y(idxtt),'Weights',W(idxtt))TTMdl =
ClassificationNaiveBayes
ResponseName: 'Y'
CategoricalPredictors: []
ClassNames: [1 2 3 4 5]
ScoreTransform: 'none'
NumObservations: 12053
DistributionNames: {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и устанавливает конгруэнтное свойство выходной модели. В противном случае, если число переменных предиктора в потоковых данных изменяется с Mdl.NumPredictors, fit выдает ошибку.
fit поддерживает только входные данные предсказателя с плавающей запятой. Если входная модель Mdl представляет преобразованную, традиционно обученную модель, подходящую для категориальных данных, использование dummyvar преобразовать каждую категориальную переменную в числовую матрицу фиктивных переменных и объединить все фиктивные матрицы переменных и любые другие числовые предикторы. Дополнительные сведения см. в разделе Фиктивные переменные.
Типы данных: 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 является ones(.n,1)
Дополнительные сведения, включая схемы нормализации, см. в разделе Веса наблюдений.
Типы данных: double | single
Примечание
Если наблюдение (предиктор или метка) или вес содержат по крайней мере одно отсутствующее (NaN) значение, fit игнорирует наблюдение. Следовательно, fit использует менее n наблюдений для вычисления производительности модели.
Mdl - Обновленная наивная модель классификации Байеса для инкрементного обученияincrementalClassificationNaiveBayes объект моделиОбновленная наивная модель классификации Байеса для инкрементного обучения, возвращенная как объект модели инкрементного обучения того же типа данных, что и входная модель Mdlодин incrementalClassificationNaiveBayes объект.
Если ClassNames свойство входной модели Mdl является пустым массивом, fit устанавливает ClassNames свойство выходной модели Mdl кому unique(Y). Если максимальное количество классов не достигнуто, fit добавляет к Mdl.ClassNames любые вновь обнаруженные метки в Y.
В отличие от традиционного обучения, инкрементное обучение может не иметь отдельного набора тестов (holdout). Поэтому для обработки каждого входящего блока данных как тестового набора передайте инкрементную модель и каждый входящий блок в updateMetrics перед обучением модели тем же данным.
Для каждого условного предикторного распределения, fit вычисляет средневзвешенное и стандартное отклонение.
Если известно распределение вероятности предыдущего класса (другими словами, предварительное распределение не является эмпирическим), fit нормализует веса наблюдения для суммирования вероятностей предыдущего класса в соответствующих классах. Это действие подразумевает, что весами наблюдения по умолчанию являются соответствующие предшествующие вероятности классов.
Если распределение вероятности предыдущего класса эмпирическое, программное обеспечение нормализует указанные веса наблюдения, чтобы суммировать 1 при каждом вызове fit.
Имеется измененная версия этого примера. Открыть этот пример с помощью изменений?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.