Обновите показатели производительности в наивной модели классификации Бейеса для пошагового обучения, данного новые данные
Учитывая потоковую передачу данных, updateMetrics
измеряет уровень сконфигурированной наивной модели классификации Бейеса для пошагового обучения (incrementalClassificationNaiveBayes
объект. updateMetrics
хранит показатели производительности в выходной модели.
updateMetrics
допускает гибкое пошаговое обучение. После того, как вы вызываете функцию, чтобы обновить метрики производительности модели на входящем фрагменте данных, можно выполнить другие действия, прежде чем вы обучите модель к данным. Например, можно решить, необходимо ли обучить основанное на модели на его эффективности на фрагменте данных. В качестве альтернативы можно и обновить метрики производительности модели и обучить модель на данных, когда это прибывает, в одном вызове, при помощи updateMetricsAndFit
функция.
Чтобы измерить производительность модели на заданном пакете данных, вызвать loss
вместо этого.
возвращает наивную модель классификации Бейеса для пошагового обучения Mdl
= updateMetrics(Mdl
,X
,Y
)Mdl
, который является входом наивная модель классификации Бейеса для пошагового обучения Mdl
измененный, чтобы содержать метрики производительности модели на входящем предикторе и данных об ответе, X
и Y
соответственно.
Когда входной моделью является warm (Mdl.IsWarm
true
), updateMetrics
перезаписи ранее вычислили метрики, сохраненные в Metrics
свойство, с новыми значениями. В противном случае, updateMetrics
хранилища NaN
значения в Metrics
вместо этого.
Модели ввода и вывода имеют совпадающий тип данных.
Обучите наивную модель классификации Бейеса при помощи fitcnb
, преобразуйте его в инкрементного ученика, и затем отследите его эффективность к потоковой передаче данных.
Загрузите и предварительно обработайте данные
Загрузите набор данных деятельности человека. Случайным образом переставьте данные.
load humanactivity rng(1); % For reproducibility n = numel(actid); idx = randsample(n,n); X = feat(idx,:); Y = actid(idx);
Для получения дополнительной информации на наборе данных, введите Description
в командной строке.
Обучите наивную байесовую модель классификации
Подбирайте наивную модель классификации Бейеса к случайной выборке половины данных.
idxtt = randsample([true false],n,true); TTMdl = fitcnb(X(idxtt,:),Y(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
Инкрементная модель является теплой. Поэтому updateMetrics
может отследить метрические определенные данные производительности модели.
Отследите показатели производительности
Отследите производительность модели на остальной части данных при помощи updateMetrics
функция. Симулируйте поток данных путем обработки 50 наблюдений за один раз. В каждой итерации:
Вызовите updateMetrics
обновить совокупное и окно минимальная стоимость модели, учитывая входящий фрагмент наблюдений. Перезапишите предыдущую инкрементную модель, чтобы обновить потери в Metrics
свойство. Обратите внимание на то, что функция не подбирает модель к фрагменту данных — фрагмент является "новыми" данными для модели.
Сохраните минимальную стоимость и среднее значение первого предиктора в первом классе .
% 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); % 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)); mc{j,:} = IncrementalMdl.Metrics{"MinimalCost",:}; mu11(j + 1) = IncrementalMdl.DistributionParameters{1,1}(1); end
IncrementalMdl
incrementalClassificationNaiveBayes
объект модели, который отследил производительность модели к наблюдениям в потоке данных.
Постройте график трассировки показателей производительности и оцененного коэффициента .
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')
Совокупная потеря устойчива, тогда как потеря окна переходит.
не изменяется потому что updateMetrics
не подбирает модель к данным.
Создайте наивную модель классификации Бейеса для пошагового обучения путем вызова incrementalClassificationNaiveBayes
и определение максимума 5 ожидаемых классов в данных. Задайте отслеживание misclassification коэффициент ошибок в дополнение к минимальной стоимости.
Mdl = incrementalClassificationNaiveBayes('MaxNumClasses',5,'Metrics',"classiferror");
Mdl
incrementalClassificationNaiveBayes
модель. Все его свойства только для чтения.
Определите, является ли модель теплой и размер метрического периода прогрева путем запроса свойств модели.
isWarm = Mdl.IsWarm
isWarm = logical
0
mwp = Mdl.MetricsWarmupPeriod
mwp = 1000
Mdl.IsWarm
0;
поэтому, Mdl
не является теплым.
Определите количество наблюдений инкрементные подходящие функции, такие как fit
, должен обработать прежде, чем измерить уровень модели.
numObsBeforeMetrics = Mdl.MetricsWarmupPeriod
numObsBeforeMetrics = 1000
Загрузите набор данных деятельности человека. Случайным образом переставьте данные.
load humanactivity n = numel(actid); rng(1) % For reproducibility idx = randsample(n,n); X = feat(idx,:); Y = actid(idx);
Для получения дополнительной информации на наборе данных, введите Description
в командной строке.
Предположим, что данные собрались, когда предмет не перемещался (Y
<= 2), имеет дважды качество чем тогда, когда предмет перемещался. Создайте переменную веса, которая приписывает 2 наблюдениям, собранным из все еще предмет, и 1 к движущемуся предмету.
W = ones(n,1) + ~Y;
Реализуйте пошаговое обучение путем выполнения следующих действий в каждой итерации:
Симулируйте поток данных путем обработки фрагмента 50 наблюдений.
Измерьте метрики производительности модели на входящем фрагменте с помощью updateMetrics
. Задайте соответствующие веса наблюдения и перезапишите входную модель.
Подбирайте модель к входящему фрагменту. Задайте соответствующие веса наблюдения и перезапишите входную модель.
Хранилище и misclassification коэффициент ошибок, чтобы видеть, как они развиваются во время пошагового обучения.
% Preallocation numObsPerChunk = 50; nchunk = floor(n/numObsPerChunk); ce = array2table(zeros(nchunk,2),'VariableNames',["Cumulative" "Window"]); mu11 = zeros(nchunk,1); % Incremental learning for j = 1:nchunk ibegin = min(n,numObsPerChunk*(j-1) + 1); iend = min(n,numObsPerChunk*j); idx = ibegin:iend; Mdl = updateMetrics(Mdl,X(idx,:),Y(idx),'Weights',W(idx)); ce{j,:} = Mdl.Metrics{"ClassificationError",:}; Mdl = fit(Mdl,X(idx,:),Y(idx),'Weights',W(idx)); mu11(j) = Mdl.DistributionParameters{1,1}(1); end
IncrementalMdl
incrementalClassificationNaiveBayes
объект модели, обученный на всех данных в потоке.
Чтобы видеть, как параметры, развитые во время пошагового обучения, постройте их на отдельных подграфиках.
figure; subplot(2,1,1) plot(mu11) ylabel('\mu_{11}') xlabel('Iteration') axis tight subplot(2,1,2) plot(ce.Variables); ylabel('ClassificationError') xline(numObsBeforeMetrics/numObsPerChunk,'r-.'); xlabel('Iteration') xlim([0 nchunk]); legend(ce.Properties.VariableNames)
mdlIsWarm = numObsBeforeMetrics/numObsPerChunk
mdlIsWarm = 20
График предлагает тот fit
всегда подбирает модель к данным и updateMetrics
не отслеживает ошибку классификации до окончания метрического периода прогрева (20 фрагментов).
Инкрементно обучите наивную модель классификации Бейеса только, когда ее эффективность ухудшится.
Загрузите набор данных деятельности человека. Случайным образом переставьте данные.
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
функция. Для получения дополнительной информации смотрите соответствующую страницу с описанием.
Если Mdl.IsWarm
false
, updateMetrics
не отслеживает эффективность модели. Прежде updateMetrics
может отследить показатели производительности, необходимо выполнить все следующие действия:
Соответствуйте входной модели Mdl
ко всем ожидаемым классам (см. MaxNumClasses
и ClassNames
аргументы incrementalClassificationNaiveBayes
)
Соответствуйте входной модели Mdl
к Mdl.MetricsWarmupPeriod
наблюдения путем передачи Mdl
и данные к fit
. Для получения дополнительной информации смотрите показатели производительности.
X
— Фрагмент данных о предиктореФрагмент данных о предикторе, с которыми можно измерить производительность модели
Продолжительность наблюдения маркирует Y
и количество наблюдений в X
должно быть равным; Y (
метка наблюдения j (строка или столбец) в j
)X
.
Примечание
Если Mdl.NumPredictors
= 0, updateMetrics
выводит количество предикторов от X
, и устанавливает конгруэнтное свойство выходной модели. В противном случае, если количество переменных предикторов в данных о потоковой передаче изменяется от Mdl.NumPredictors
, updateMetrics
выдает ошибку.
Типы данных: single
| double
Y
— Фрагмент метокФрагмент меток, с которыми можно измерить производительность модели в виде категориального, символа, или массива строк, логического или вектора с плавающей точкой или массива ячеек из символьных векторов.
Продолжительность наблюдения маркирует Y
и количество наблюдений в X
должно быть равным; Y (
метка наблюдения j (строка или столбец) в j
)X
. updateMetrics
выдает ошибку, когда по крайней мере одно из условий соблюдают:
Y
содержит метку, с которой недавно сталкиваются, и максимальное количество классов было достигнуто ранее (см. MaxNumClasses
и ClassNames
аргументы incrementalClassificationNaiveBayes
).
Типы данных Y
и Mdl.ClassNames
отличаются.
Типы данных: char |
string
| cell
| categorical
| logical
| single
| double
Weights
— Фрагмент весов наблюденияФрагмент весов наблюдения в виде вектора с плавающей точкой из положительных значений. updateMetrics
взвешивает наблюдения в X
с соответствующими значениями в Weights
. Размер Weights
должен равняться n, который является количеством наблюдений в X
.
По умолчанию, Weights
единицы (
.n
,1)
Для получения дополнительной информации, включая схемы нормализации, смотрите Веса Наблюдения.
Типы данных: double |
single
Примечание
Если наблюдение (предиктор или метка) или вес Weight
содержит по крайней мере одно отсутствие (NaN
Значение, updateMetrics
игнорирует наблюдение. Следовательно, updateMetrics
использование меньше, чем наблюдения n, чтобы вычислить производительность модели.
Mdl
— Обновленная наивная модель классификации Бейеса для пошагового обученияincrementalClassificationNaiveBayes
объект моделиОбновленная наивная модель классификации Бейеса для пошагового обучения, возвращенного как объект модели пошагового обучения совпадающего типа данных как входная модель Mdl
, incrementalClassificationNaiveBayes
объект.
Если модель не является теплой, updateMetrics
не вычисляет показатели производительности. В результате Metrics
свойство Mdl
остается абсолютно составленным из NaN
значения. Если модель является теплой, updateMetrics
вычисляет совокупные показатели производительности и показатели производительности окна на новых данных X
и Y
, и перезаписывает соответствующие элементы Mdl.Metrics
. Все другие свойства входной модели Mdl
перенесите на выходную модель Mdl
. Для получения дополнительной информации смотрите показатели производительности.
В отличие от традиционного обучения, пошаговое обучение не может иметь отдельного теста (затяжка) набор. Поэтому, чтобы обработать каждый входящий фрагмент данных как набор тестов, передайте инкрементную модель и каждый входящий фрагмент к updateMetrics
перед обучением модель на том же использовании данных fit
.
updateMetrics
дорожки только метрики производительности модели, заданные метками строки таблицы в Mdl.Metrics
, из новых данных, когда инкрементной моделью является warm (IsWarm
свойством является true
). Инкрементная модель является теплой когда fit
функция выполняет оба из следующих действий:
Подбирайте инкрементную модель к Mdl.MetricsWarmupPeriod
наблюдения, который является metrics warm-up period.
Подбирайте инкрементную модель ко всем ожидаемым классам (см. MaxNumClasses
и ClassNames
аргументы incrementalClassificationNaiveBayes
)
Mdl.Metrics
хранилища две формы каждого показателя производительности как переменные (столбцы) таблицы, Cumulative
и Window
, с отдельными метриками в строках. Когда инкрементная модель является теплой, updateMetrics
обновляет метрики на следующих частотах:
Cumulative
— Функция вычисляет совокупные метрики начиная с запуска отслеживания производительности модели. Функция обновляет метрики каждый раз, когда вы вызываете ее, и основывает вычисление на целом предоставленном наборе данных.
Window
— Функция вычисляет метрики на основе всех наблюдений в окне, определенном Mdl.MetricsWindowSize
свойство. Mdl.MetricsWindowSize
также определяет частоту в который обновления программного обеспечения Window
метрики. Например, если Mdl.MetricsWindowSize
20, функция вычисляет метрики на основе последних 20 наблюдений в данных, которыми снабжают (X((end – 20 + 1):end,:)
и Y((end – 20 + 1):end)
).
Инкрементные функции, которые отслеживают показатели производительности в окне, используют следующий процесс:
Для каждой заданной метрики сохраните буфер длины Mdl.MetricsWindowSize
и буфер весов наблюдения.
Заполните элементы метрического буфера с производительностью модели на основе пакетов входящих наблюдений и сохраните соответствующие веса наблюдений в буфере весов.
Когда буфер заполнен, перезапись Mdl.Metrics.Window
со средневзвешенной эффективностью в метрическом окне. Если буфер переполнен когда функциональные процессы пакет наблюдений, последнего входящего Mdl.MetricsWindowSize
наблюдения вводят буфер, и самые ранние наблюдения удалены из буфера. Например, предположите Mdl.MetricsWindowSize
20, метрический буфер имеет 10 значений от ранее обработанного пакета, и поступают 15 значений. Чтобы составить длину 20 окон, функция использует измерения от 15 входящих наблюдений и последние 5 измерений от предыдущего пакета.
Для каждого условного распределения предиктора, updateMetrics
вычисляет средневзвешенное и стандартное отклонение.
Если предшествующее вероятностное распределение класса известно (другими словами, предшествующее распределение не является эмпирическим), updateMetrics
нормирует веса наблюдения, чтобы суммировать к предшествующим вероятностям класса в соответствующих классах. Это действие подразумевает, что веса наблюдения по умолчанию являются соответствующими предшествующими вероятностями класса.
Если предшествующее вероятностное распределение класса является эмпирическим, программное обеспечение нормирует заданные веса наблюдения, чтобы суммировать к 1 каждому разу, когда вы вызываете updateMetrics
.
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.