Обучите наивную модель классификации Бейеса пошаговому обучению
fit
функция подбирает сконфигурированную наивную модель классификации Бейеса для пошагового обучения (incrementalClassificationNaiveBayes
объект) к потоковой передаче данных. Чтобы дополнительно отследить показатели производительности с помощью данных, когда это прибывает, использовать 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 имен классов к действию. Кроме того, предположите, что исследователи планируют отсоединить устройство каждому классу однородно.
Создайте инкрементного наивного ученика Бейеса для изучения мультикласса. Задайте имена классов и универсальное предшествующее распределение класса.
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, отслеженный показатель производительности включает misclassification коэффициент ошибок и метрический размер окна 1 000. Подбирайте сконфигурированную модель к первым 1 000 наблюдений.
Mdl = incrementalClassificationNaiveBayes('MaxNumClasses',5,'MetricsWindowSize',1000,... 'Metrics','classiferror'); initobs = 1000; Mdl = fit(Mdl,X(1:initobs,:),Y(1:initobs));
Mdl
incrementalClassificationNaiveBayes
объект модели.
Выполните пошаговое обучение, с условным подбором кривой, путем выполнения этой процедуры для каждой итерации:
Симулируйте поток данных путем обработки фрагмента 100 наблюдений за один раз.
Обновите производительность модели на входящем фрагменте данных.
Подбирайте модель к фрагменту данных только, когда misclassification коэффициент ошибок будет больше 0.05.
При отслеживании эффективности и подбора кривой, перезапишите предыдущую инкрементную модель.
Сохраните misclassification коэффициент ошибок и среднее значение первого предиктора во втором классе чтобы видеть, как они развиваются во время обучения.
Отследите когда 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')
График трассировки показывает периоды постоянных значений, во время которых потеря в предыдущих 1 000 окон наблюдения самое большее 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
выдает ошибку.
Типы данных: 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
, incrementalClassificationNaiveBayes
объект.
В дополнение к обновлению параметров модели распределения, fit
выполняет следующие действия когда Y
содержит ожидаемый, но необработанный, классы:
Если вы не задаете все ожидаемые классы при помощи ClassNames
аргумент значения имени, когда вы создаете входную модель Mdl
использование incrementalClassificationNaiveBayes
, fit
:
Добавляет любые метки, с которыми недавно сталкиваются, в Y
к хвосту Mdl.ClassNames
.
Расширяет Mdl.Cost
к c-by-c матрица, где c является количеством классов Mdl.ClassNames
. Получившаяся матрица стоимости misclassification сбалансирована.
Расширяет Mdl.Prior
к длине вектор c из обновленного эмпирического распределения класса.
Если вы задаете все ожидаемые классы, когда вы создаете входную модель Mdl
или преобразуйте традиционно обученное наивное использование модели Bayes incrementalLearner
, но вы не указываете, что misclassification стоил матрицы (Mdl.Cost
), fit
наборы misclassification затраты на обработанные классы к 1
и необработанные классы к NaN
. Например, если fit
обрабатывает первые два класса возможных трех классы, Mdl.Cost
[0 1 NaN; 1 0 NaN; 1 1 0]
.
В модели сумки лексем значении предиктора j является неотрицательным количеством случаев маркерного j в наблюдении. Количество категорий (интервалы) в модели многочлена является количеством отличных лексем (количество предикторов).
В отличие от традиционного обучения, пошаговое обучение не может иметь отдельного теста (затяжка) набор. Поэтому, чтобы обработать каждый входящий фрагмент данных как набор тестов, передайте инкрементную модель и каждый входящий фрагмент к updateMetrics
перед обучением модель на тех же данных.
Если переменный предиктор j
имеет условное нормальное распределение (см. DistributionNames
свойство), программное обеспечение соответствует распределению к данным путем вычисления специфичного для класса взвешенного среднего и смещенного (наибольшее правдоподобие) оценка взвешенного стандартного отклонения. Для каждого класса k:
Взвешенное среднее предиктора j
где wi является весом для наблюдения i. Программное обеспечение нормирует веса в классе, таким образом, что они суммируют к априорной вероятности для того класса.
Несмещенное средство оценки взвешенного стандартного отклонения предиктора j
Если все переменные предикторы составляют условное распределение многочлена (см. DistributionNames
свойство), программное обеспечение соответствует распределению с помощью Модели Сумки Лексем. Программное обеспечение хранит вероятность тот маркерный j
появляется в классе k
в свойстве DistributionParameters {
. С дополнением, сглаживающим [1], предполагаемая вероятностьk
J
}
где:
который является взвешенным количеством случаев маркерного j в классе k.
nk является количеством наблюдений в классе k.
вес для наблюдения i. Программное обеспечение нормирует веса в классе так, чтобы они суммировали к априорной вероятности для того класса.
который является общим взвешенным количеством случаев всех лексем в классе k.
Если переменный предиктор j
имеет условное многомерное распределение многочлена (см. DistributionNames
свойство), программное обеспечение выполняет эту процедуру:
Программное обеспечение собирает список уникальных уровней, хранит отсортированный список в CategoricalLevels
, и считает каждый уровень интервалом. Каждая комбинация предиктора и класса является отдельной, независимой случайной переменной многочлена.
Для каждого класса k, экземпляры программно-реализованных счетчиков каждого категориального уровня с помощью списка, сохраненного в CategoricalLevels {
.j
}
Программное обеспечение хранит вероятность тот предиктор j
в классе k
имеет уровень L в свойстве DistributionParameters {
, для всех уровней в k
J
}CategoricalLevels {
. С дополнением, сглаживающим [1], предполагаемая вероятностьj
}
где:
который является взвешенным количеством наблюдений, для которого предиктора j равняется L в классе k.
nk является количеством наблюдений в классе k.
если xij = L, и 0 в противном случае.
вес для наблюдения i. Программное обеспечение нормирует веса в классе так, чтобы они суммировали к априорной вероятности для того класса.
mj является количеством отличных уровней в предикторе j.
mk является взвешенным количеством наблюдений в классе k.
Для каждого условного распределения предиктора, fit
вычисляет средневзвешенное и стандартное отклонение.
Если предшествующее вероятностное распределение класса известно (другими словами, предшествующее распределение не является эмпирическим), fit
нормирует веса наблюдения, чтобы суммировать к предшествующим вероятностям класса в соответствующих классах. Это действие подразумевает, что веса наблюдения по умолчанию являются соответствующими предшествующими вероятностями класса.
Если предшествующее вероятностное распределение класса является эмпирическим, программное обеспечение нормирует заданные веса наблюдения, чтобы суммировать к 1 каждому разу, когда вы вызываете fit
.
Поведение изменяется в R2021b
Запуск в R2021b, наивный Бейес инкрементные подходящие функции fit
и updateMetricsAndFit
вычислите смещенный (наибольшее правдоподобие) оценки взвешенных стандартных отклонений для условно нормальных переменных предикторов во время обучения. Другими словами, для каждого класса k, инкрементные подходящие функции нормируют сумму взвешенных отклонений квадрата условно нормального предиктора xj суммой весов в классе k. Перед R2021b наивный Бейес инкрементные подходящие функции вычислили несмещенное стандартное отклонение, как fitcnb
. В настоящее время возвращенные взвешенные оценки стандартного отклонения отличаются от вычисленных перед R2021b на коэффициент
Фактор приближается 1, когда объем выборки увеличивается.
[1] Укомплектование людьми, Кристофер Д., Prabhakar Raghavan и Hinrich Schütze. Введение в Информэйшн-Ретривэл, Нью-Йорк: Издательство Кембриджского университета, 2008.
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.