Регистрируйте безусловную плотность вероятности наивной модели классификации Бейеса для пошагового обучения
возвращает журнал безусловные плотности вероятности
lp
= logp(Mdl
,X
)lp
из наблюдений в данных о предикторе X
использование наивной модели классификации Бейеса для пошагового обучения Mdl
. Можно использовать lp
идентифицировать выбросы в обучающих данных.
Обучите наивную модель классификации Бейеса при помощи fitcnb
, преобразуйте его в инкрементного ученика, и затем используйте инкрементную модель, чтобы обнаружить выбросы в потоковой передаче данных.
Загрузите и предварительно обработайте данные
Загрузите набор данных деятельности человека. Случайным образом переставьте данные.
load humanactivity rng(1); % For reproducibility n = numel(actid); idx = randsample(n,n); X = feat(idx,:); Y = actid(idx);
Для получения дополнительной информации на наборе данных, введите Description
в командной строке.
Обучите наивную байесовую модель классификации
Подбирайте наивную модель классификации Бейеса к случайной выборке приблизительно 25% данных.
idxtt = randsample([true false false false],n,true); TTMdl = fitcnb(X(idxtt,:),Y(idxtt))
TTMdl = ClassificationNaiveBayes ResponseName: 'Y' CategoricalPredictors: [] ClassNames: [1 2 3 4 5] ScoreTransform: 'none' NumObservations: 6167 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
объект. IncrementalMdl
представляет наивную модель классификации Бейеса для пошагового обучения; значения параметров совпадают с параметрами в TTMdl
.
Обнаружьте выбросы
Определите безусловные пороги плотности для выбросов при помощи традиционно обученных данных модели и обучающих данных. Наблюдения в плотности получения данных о потоковой передаче вне порогов рассматриваются выбросами.
ttlp = logp(TTMdl,X(idxtt,:)); [~,lower,upper] = isoutlier(ttlp)
lower = -336.0424
upper = 399.9853
Обнаружьте выбросы в остальной части данных, относительно того, что было изучено, чтобы создать TTMdl
. Симулируйте поток данных путем обработки 1 наблюдения за один раз. В каждой итерации вызовите logp
вычислить журнал безусловная плотность вероятности наблюдения и сохранить каждое значение.
% Preallocation idxil = ~idxtt; nil = sum(idxil); numObsPerChunk = 1; nchunk = floor(nil/numObsPerChunk); lp = zeros(nchunk,1); iso = false(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; lp(j) = logp(IncrementalMdl,Xil(idx,:)); iso(j) = ((lp(j) < lower) + (lp(j) > upper)) >= 1; end
Постройте журнал безусловные плотности вероятности данных о потоковой передаче. Идентифицируйте выбросы.
figure; h1 = plot(lp); hold on x = 1:nchunk; h2 = plot(x(iso),lp(iso),'r*'); h3 = line(xlim,[lower lower],'Color','g','LineStyle','--'); line(xlim,[upper upper],'Color','g','LineStyle','--') xlim([0 nchunk]); ylabel('Unconditional Density') xlabel('Iteration') legend([h1 h2 h3],["Log unconditional probabilities" "Outliers" "Threshold"]) hold off
Mdl
— Наивная Байесова модель классификации для пошагового обученияincrementalClassificationNaiveBayes
объект моделиНаивная Байесова модель классификации для пошагового обучения в виде incrementalClassificationNaiveBayes
объект модели. Можно создать Mdl
непосредственно или путем преобразования поддерживаемой, традиционно обученной модели машинного обучения использование incrementalLearner
функция. Для получения дополнительной информации смотрите соответствующую страницу с описанием.
Необходимо сконфигурировать Mdl
вычислить логарифмическую плотность условной вероятности на пакете наблюдений.
Если Mdl
конвертированная, традиционно обученная модель, можно вычислить логарифмические условные вероятности без любых модификаций.
В противном случае, Mdl.DistributionParameters
должна быть матрица ячейки с Mdl.NumPredictors
> 0 столбцов и по крайней мере одна строка, где каждая строка соответствует каждому имени класса в Mdl.ClassNames
.
X
— Пакет данных о предиктореПакет данных о предикторе, с которыми можно вычислить логарифмическую плотность условной вероятности в виде n-by-Mdl.NumPredictors
матрица с плавающей точкой.
Примечание
logp
поддержки только входные данные о предикторе с плавающей точкой. Если входная модель Mdl
представляет конвертированное, традиционно обучил подгонку модели к категориальным данным, использовать dummyvar
преобразовывать каждую категориальную переменную в числовую матрицу фиктивных переменных и конкатенировать все фиктивные переменные матрицы и любые другие числовые предикторы. Для получения дополнительной информации смотрите Фиктивные Переменные.
Для каждого j
= 1 через n, если X (
содержит по крайней мере один j
,:)NaN
, LP (
j
)isnan
.
Типы данных: single
| double
lp
— Регистрируйте плотность условной вероятностиРегистрируйте безусловные плотности вероятности, возвращенные как n-by-1 вектор с плавающей точкой. LP (
журнал безусловная плотность вероятности предикторовj
), вычисленных в x (
.j
,:)
Типы данных: single
| double
unconditional probability density предикторов является распределением плотности, маргинализованным по классам.
Другими словами, безусловная плотность вероятности
где π (Y = k) является априорной вероятностью класса. Условное распределение данных, учитывая класс (P (X 1.., XP |y = k)), и априорные распределения вероятностей класса являются опциями обучения (то есть, вы задаете их когда обучение классификатор).
prior probability класса является принятой относительной частотой, с которой наблюдения от того класса происходят в населении.
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.