predict

Предсказать ответы на новые наблюдения из наивной модели классификации Байеса для инкрементного обучения

Описание

пример

label = predict(Mdl,X) возвращает предсказанные отклики или метки label наблюдений в данных предиктора X из наивной модели классификации Байеса для инкрементного обучения Mdl.

пример

[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 наблюдений.

  1. Функции predict вычислить апостериорные вероятности классов для каждого наблюдения во входящем фрагменты данных.

  2. Рассмотрите пошаговое измерение того, насколько хорошо модель предсказывает, танцует ли субъект (Y равно 5). Можно выполнить это путем вычисления AUC кривой ROC, созданной передачей, для каждого наблюдения в фрагменте, различии между апостериорной вероятностью класса 5 и максимальной апостериорной вероятностью среди других классов perfcurve.

  3. Функции 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 предполагает, что классификатор правильно предсказывает танцевальные предметы хорошо во время инкрементного обучения.

Входные параметры

свернуть все

Наивная модель классификации Байеса для инкрементного обучения, заданная как incrementalClassificationNaiveBayes объект модели. Можно создавать Mdl непосредственно или путем преобразования поддерживаемой, традиционно обученной модели машинного обучения с помощью incrementalLearner функция. Для получения дополнительной информации см. соответствующую страницу с описанием.

Необходимо сконфигурировать Mdl для предсказания меток для пакета наблюдений.

  • Если Mdl является преобразованной, традиционно обученной моделью, можно предсказать метки без каких-либо изменений.

  • В противном случае Mdl.DistributionParameters должна быть матрицей камер с Mdl.NumPredictors > 0 столбцов и по крайней мере одна строка, где каждая строка соответствует каждому имени класса в Mdl.ClassNames.

Пакет данных предиктора, для которого можно предсказать метки, заданный как n -by- Mdl.NumPredictors матрица с плавающей точкой.

Длина меток наблюдений Y и количество наблюдений в X должна быть равной; Y (j) - метка j наблюдения (строка или столбец) в X.

Примечание

predict поддерживает только входные данные предиктора с плавающей точкой. Если модель входа Mdl представляет собой преобразованную, традиционно обученную модель, подходящую для категориальных данных, использование dummyvar чтобы преобразовать каждую категориальную переменную в числовую матрицу фиктивных переменных и объединить все фиктивные переменные матрицы и любые другие числовые предикторы. Для получения дополнительной информации см. Dummy Переменных.

Типы данных: single | double

Выходные аргументы

свернуть все

Предсказанные отклики (или метки), возвращенные как категориальный или символьный массив; вектор с плавающей точкой, логический или строковый; или массив ячеек из векторов символов с n строками. n - количество наблюдений в X, и метка (j) - предсказанная реакция на наблюдение j.

label имеет тот совпадающий тип данных, что и имена классов, хранящиеся в Mdl.ClassNames. (Программа обрабатывает массивы строк как массивы ячеек векторов символов.)

Апостериорные вероятности класса, возвращенные как n-на-2 матрица с плавающей точкой. Апостериорный (j, k) - апостериорная вероятность того, что наблюдение j находится в k классов. Mdl.ClassNames задает порядок классов.

Ожидаемые затраты на неправильную классификацию, возвращенные как n -by- numel(Mdl.ClassNames) матрица с плавающей точкой.

Стоимость (j, k) - ожидаемая стоимость неправильной классификации наблюдения в строке j от X предсказано в 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, если ij, и Mdl.Cost(i,j) = 0, если i = j. Другими словами, стоимость 0 для правильной классификации и 1 для любой неправильной классификации.

  • Expected misclassification cost - K -мерный вектор, где k элемента - средневзвешенные затраты на неправильную классификацию классификации наблюдений в k классов, взвешенные апостериорными вероятностями классов.

    ck=j=1KP^(Y=j|x1,...,xP)Costjk.

    Другими словами, программное обеспечение классифицирует наблюдения к классу, соответствующему самой низкой ожидаемой стоимости неправильной классификации.

Апостериорная вероятность

Это posterior probability вероятность того, что наблюдение принадлежит конкретному классу, учитывая данные.

Для наивного Байеса апостериорная вероятность того, что классификация k для заданного наблюдения (x 1,..., xP), является

P^(Y=k|x1,..,xP)=P(X1,...,XP|y=k)π(Y=k)P(X1,...,XP),

где:

  • P(X1,...,XP|y=k) - условная плотность соединений предикторов, заданная ими в k классов. Mdl.DistributionNames сохраняет имена распределения предикторов.

  • π (Y = k) является априорным распределением вероятностей класса. Mdl.Prior сохраняет предыдущее распределение.

  • P(X1,..,XP) - плотность соединений предикторов. Классы дискретны, поэтому P(X1,...,XP)=k=1KP(X1,...,XP|y=k)π(Y=k).

Введенный в R2021a