predict

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

Описание

пример

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

пример

[label,Posterior,Cost] = predict(Mdl,X) также возвращает апостериорные вероятности (Posterior) и предсказанный (ожидал) затраты misclassification (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 объект модели подготовлен к пошаговому обучению.

  • 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 преобразовывать каждую категориальную переменную в числовую матрицу фиктивных переменных и конкатенировать все фиктивные переменные матрицы и любые другие числовые предикторы. Для получения дополнительной информации смотрите Фиктивные Переменные.

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

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

свернуть все

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

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

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

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

Стойте (jK) ожидаемая misclassification стоимость наблюдения в строке j из X предсказанный в класс k (Mdl. ClassNames (k)).

Больше о

свернуть все

Стоимость Misclassification

misclassification cost является относительной серьезностью классификатора, маркирующего наблюдение в неправильный класс.

Существует два типа затрат misclassification: верный и ожидаемый. Позвольте K быть количеством классов.

  • True misclassification costK-by-K матрица, где элемент (i, j) указывает на misclassification стоимость предсказания наблюдения в класс j, если его истинным классом является i. Программное обеспечение хранит стоимость misclassification в свойстве Mdl.Cost, и использование это в расчетах. По умолчанию, Mdl.Cost(i,j) = 1, если ij, и Mdl.Cost(i,j) = 0, если i = j. Другими словами, стоимостью является 0 для правильной классификации и 1 для любой неправильной классификации.

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

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

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

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

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