Обучите наивную модель классификации Байеса для инкрементного обучения
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. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.