Предсказать ответы на новые наблюдения из наивной модели классификации Байеса для инкрементного обучения
[ также возвращает апостериорные вероятности (label,Posterior,Cost] = predict(Mdl,X)Posterior) и прогнозируемые (ожидаемые) затраты на неправильную классификацию (Cost), соответствующий наблюдениям (строкам) в X. Для каждого наблюдения в X, предсказанная метка класса соответствует минимальным ожидаемым затратам классификации среди всех классов.
Загрузите набор данных о деятельности человека.
load humanactivityДля получения дополнительной информации о наборе данных введите Description в командной строке.
Подбор наивной модели классификации Байеса ко всему набору данных.
TTMdl = fitcnb(feat,actid)
TTMdl =
ClassificationNaiveBayes
ResponseName: 'Y'
CategoricalPredictors: []
ClassNames: [1 2 3 4 5]
ScoreTransform: 'none'
NumObservations: 24075
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 объект модели, подготовленный для инкрементного обучения.
The incrementalLearner функция инициализирует инкрементального обучающегося путем передачи ему выученных параметров условного распределения предиктора вместе с другой информацией TTMdl узнал из обучающих данных.
IncrementalMdl тепло (IsWarm является 1), что означает, что инкрементальные функции обучения могут начать отслеживать метрики эффективности.
Инкрементный ученик, созданный из преобразования традиционно обученной модели, может генерировать предсказания без дальнейшей обработки.
Спрогнозируйте метки классов для всех наблюдений, используя обе модели.
ttlabels = predict(TTMdl,feat); illables = predict(IncrementalMdl,feat); sameLabels = sum(ttlabels ~= illables) == 0
sameLabels = logical
1
Обе модели предсказывают одни и те же метки для каждого наблюдения.
Загрузите набор данных о деятельности человека. Случайным образом перетасуйте данные.
load humanactivity n = numel(actid); rng(10); % For reproducibility idx = randsample(n,n); X = feat(idx,:); Y = actid(idx);
Для получения дополнительной информации о наборе данных введите Description в командной строке.
Создайте наивную модель классификации Байеса для инкрементного обучения; задайте имена классов. Подготовьте его к predict путем подгонки модели к первым 10 наблюдениям.
Mdl = incrementalClassificationNaiveBayes('ClassNames',unique(Y));
initobs = 10;
Mdl = fit(Mdl,X(1:initobs,:),Y(1:initobs));
canPredict = size(Mdl.DistributionParameters,1) == numel(Mdl.ClassNames)canPredict = logical
1
Mdl является incrementalClassificationNaiveBayes модель. Все его свойства доступны только для чтения. Модель сконфигурирована, чтобы генерировать предсказания.
Симулируйте поток данных и выполните следующие действия на каждом входящем фрагменте из 100 наблюдений.
Функции predict вычислить апостериорные вероятности классов для каждого наблюдения во входящем фрагменты данных.
Рассмотрите пошаговое измерение того, насколько хорошо модель предсказывает, танцует ли субъект (Y равно 5). Можно выполнить это путем вычисления AUC кривой ROC, созданной передачей, для каждого наблюдения в фрагменте, различии между апостериорной вероятностью класса 5 и максимальной апостериорной вероятностью среди других классов perfcurve.
Функции fit для подгонки модели к входящему фрагменту. Перезаписать предыдущую инкрементальную модель на новую, подобранную входящему наблюдению.
numObsPerChunk = 100; nchunk = floor((n - initobs)/numObsPerChunk) - 1; Posterior = zeros(nchunk,numel(Mdl.ClassNames)); auc = zeros(nchunk,1); classauc = 5; % Incremental learning for j = 1:nchunk ibegin = min(n,numObsPerChunk*(j-1) + 1 + initobs); iend = min(n,numObsPerChunk*j + initobs); idx = ibegin:iend; [~,Posterior(idx,:)] = predict(Mdl,X(idx,:)); diffscore = Posterior(idx,classauc) - max(Posterior(idx,setdiff(Mdl.ClassNames,classauc)),[],2); [~,~,~,auc(j)] = perfcurve(Y(idx),diffscore,Mdl.ClassNames(classauc)); Mdl = fit(Mdl,X(idx,:),Y(idx)); end
Mdl является incrementalClassificationNaiveBayes объект модели обучен на всех данных в потоке.
Постройте график AUC на входящих фрагментах данных.
plot(auc) ylabel('AUC') xlabel('Iteration')

AUC предполагает, что классификатор правильно предсказывает танцевальные предметы хорошо во время инкрементного обучения.
Mdl - Наивная классификационная модель Байеса для инкрементного обученияincrementalClassificationNaiveBayes объект моделиНаивная модель классификации Байеса для инкрементного обучения, заданная как incrementalClassificationNaiveBayes объект модели. Можно создавать Mdl непосредственно или путем преобразования поддерживаемой, традиционно обученной модели машинного обучения с помощью incrementalLearner функция. Для получения дополнительной информации см. соответствующую страницу с описанием.
Необходимо сконфигурировать Mdl для предсказания меток для пакета наблюдений.
Если Mdl является преобразованной, традиционно обученной моделью, можно предсказать метки без каких-либо изменений.
В противном случае Mdl.DistributionParameters должна быть матрицей камер с Mdl.NumPredictors > 0 столбцов и по крайней мере одна строка, где каждая строка соответствует каждому имени класса в Mdl.ClassNames.
X - Пакет данных предиктораПакет данных предиктора, для которого можно предсказать метки, заданный как n -by- Mdl.NumPredictors матрица с плавающей точкой.
Длина меток наблюдений Y и количество наблюдений в X должна быть равной; Y - метка j наблюдения (строка или столбец) в (j)X.
Примечание
predict поддерживает только входные данные предиктора с плавающей точкой. Если модель входа Mdl представляет собой преобразованную, традиционно обученную модель, подходящую для категориальных данных, использование dummyvar чтобы преобразовать каждую категориальную переменную в числовую матрицу фиктивных переменных и объединить все фиктивные переменные матрицы и любые другие числовые предикторы. Для получения дополнительной информации см. Dummy Переменных.
Типы данных: single | double
label - Предсказанные откликиПредсказанные отклики (или метки), возвращенные как категориальный или символьный массив; вектор с плавающей точкой, логический или строковый; или массив ячеек из векторов символов с n строками. n - количество наблюдений в X, и метка - предсказанная реакция на наблюдение (j). j
label имеет тот совпадающий тип данных, что и имена классов, хранящиеся в Mdl.ClassNames. (Программа обрабатывает массивы строк как массивы ячеек векторов символов.)
Posterior - Апостериорные вероятности классаАпостериорные вероятности класса, возвращенные как n-на-2 матрица с плавающей точкой. Апостериорный - апостериорная вероятность того, что наблюдение (j, k) находится в j. k классовMdl.ClassNames задает порядок классов.
Cost - Ожидаемые расходы на неправильную классификациюОжидаемые затраты на неправильную классификацию, возвращенные как n -by- numel(Mdl.ClassNames) матрица с плавающей точкой.
Стоимость - ожидаемая стоимость неправильной классификации наблюдения в строке (j, k) от jX предсказано в классовk (Mdl. ClassNames ().k)
А misclassification cost - это относительная серьезность классификатора, маркирующего наблюдение не в тот класс.
Существует два вида расходов на неправильную классификацию: истинные и ожидаемые. Позвольте K быть количеством классов.
True misclassification cost - A K -by - K матрица, где элемент (i, j) указывает на стоимость неправильной классификации предсказания наблюдения в j класса, если его истинный класс i. Программное обеспечение хранит затраты на неправильную классификацию в свойстве Mdl.Cost, и использует его в расчетах. По умолчанию Mdl.Cost(i,j) = 1, если i ≠ j, и Mdl.Cost(i,j) = 0, если i = j. Другими словами, стоимость 0 для правильной классификации и 1 для любой неправильной классификации.
Expected misclassification cost - K -мерный вектор, где k элемента - средневзвешенные затраты на неправильную классификацию классификации наблюдений в k классов, взвешенные апостериорными вероятностями классов.
Другими словами, программное обеспечение классифицирует наблюдения к классу, соответствующему самой низкой ожидаемой стоимости неправильной классификации.
Это posterior probability вероятность того, что наблюдение принадлежит конкретному классу, учитывая данные.
Для наивного Байеса апостериорная вероятность того, что классификация k для заданного наблюдения (x 1,..., xP), является
где:
- условная плотность соединений предикторов, заданная ими в k классов. Mdl.DistributionNames сохраняет имена распределения предикторов.
π (Y = k) является априорным распределением вероятностей класса. Mdl.Prior сохраняет предыдущее распределение.
- плотность соединений предикторов. Классы дискретны, поэтому
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.