predict

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

Описание

пример

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

пример

label = predict(Mdl,X,Name,Value) задает опции с помощью одних или нескольких аргументов name-value. Например, можно задать пользовательскую матрицу стоимости misclassification (другими словами, заменить значение Mdl.Cost) для вычислительных предсказаний путем определения Cost аргумент.

пример

[label,Posterior,Cost] = predict(___) также возвращает апостериорные вероятности (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

Обе модели предсказывают те же метки для каждого наблюдения.

В этом примере показано, как применить затраты misclassification для предсказания метки на входящих фрагментах данных при поддержании сбалансированного misclassification, стоившего за обучение.

Загрузите набор данных деятельности человека. Случайным образом переставьте данные.

load humanactivity
n = numel(actid);
rng(10); % For reproducibility
idx = randsample(n,n);
X = feat(idx,:);
Y = actid(idx);

Создайте наивную модель классификации Бейеса для пошагового обучения; задайте имена классов. Подготовьте его к 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

Рассмотрите сильно наложение штрафа на модель для "рабочей" неправильной классификации (класса 4). Создайте матрицу стоимости, которая применяет 100 раз штраф за неправильную классификацию выполнения по сравнению с неправильной классификацией любого другого класса. Строки соответствуют истинному классу, и столбцы соответствуют предсказанному классу.

k = numel(Mdl.ClassNames);
Cost = ones(k) - eye(k);
Cost(4,:) = Cost(4,:)*100; % Penalty for misclassifying "running"
Cost
Cost = 5×5

     0     1     1     1     1
     1     0     1     1     1
     1     1     0     1     1
   100   100   100     0   100
     1     1     1     1     0

Симулируйте поток данных и выполните следующие действия с каждым входящим фрагментом 100 наблюдений.

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

  2. Вызовите predict снова, но задайте затраты misclassification при помощи Cost аргумент.

  3. Вызовите fit подбирать модель к входящему фрагменту. Перезапишите предыдущую инкрементную модель с новой, адаптированной к входящему наблюдению.

numObsPerChunk = 100;
nchunk = ceil((n - initobs)/numObsPerChunk);
labels = zeros(n,1);
cslabels = zeros(n,1);
cst = zeros(n,5);
cscst = zeros(n,5);

% Incremental learning
for j = 1:nchunk
    ibegin = min(n,numObsPerChunk*(j-1) + 1 + initobs);
    iend   = min(n,numObsPerChunk*j + initobs);
    idx = ibegin:iend;    
    [labels(idx),~,cst(idx,:)] = predict(Mdl,X(idx,:));  
    [cslabels(idx),~,cscst(idx,:)] = predict(Mdl,X(idx,:),Cost=Cost);
    Mdl = fit(Mdl,X(idx,:),Y(idx));
end
labels = labels((initobs + 1):end);
cslabels = cslabels((initobs + 1):end);

Сравните предсказанные распределения класса между методами предсказания путем графического вывода гистограмм.

figure;
histogram(labels);
hold on
histogram(cslabels);
legend(["Default-cost prediction" "Cost-sensitive prediction"])

Figure contains an axes object. The axes object contains 2 objects of type histogram. These objects represent Default-cost prediction, Cost-sensitive prediction.

Поскольку чувствительный к стоимости метод предсказания штрафует класс 4 неправильной классификации так сильно, больше предсказаний в результат класса 4 по сравнению с методом предсказания, который использует значение по умолчанию, сбалансированную стоимость.

Загрузите набор данных деятельности человека. Случайным образом переставьте данные.

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.

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

Аргументы name-value

Задайте дополнительные пары аргументов как Name1=Value1,...,NameN=ValueN, где Name имя аргумента и Value соответствующее значение. Аргументы name-value должны появиться после других аргументов, но порядок пар не имеет значения.

Пример: Cost=[0 2;1 0] атрибуты удваивают штраф за неправильную классификацию наблюдений с истинным классом Mdl.ClassNames(1), чем для неправильной классификации наблюдений с истинным классом Mdl.ClassNames(2).

Стоимость неправильной классификации наблюдения в виде значения в таблице, где c является количеством классов в Mdl.ClassNames. Заданное значение заменяет значение Mdl.Cost.

ЗначениеОписание
c-by-c числовая матрица

Стойте (iJ) стоимость классификации наблюдения в класс j когда его истинным классом является i, для классов Mdl. ClassNames (i) и Mdl. ClassNames (j). Другими словами, строки соответствуют истинному классу, и столбцы соответствуют предсказанному классу. Например, Cost = [0 2;1 0] применяет дважды штраф за неправильную классификацию Mdl.ClassNames(1) чем для неправильной классификации Mdl.ClassNames(2).

Массив структур

Массив структур, имеющий два поля:

  • ClassNames содержа имена классов, то же значение как Mdl.ClassNames

  • ClassificationCosts содержа матрицу стоимости, как ранее описано.

Пример: Cost=struct('ClassNames',Mdl.ClassNames,'ClassificationCosts',[0 2; 1 0])

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

Предшествующие вероятности класса в виде значения в этом числовом векторе. Prior имеет ту же длину как количество классов в Mdl.ClassNames, и порядок элементов соответствует порядку класса в Mdl.ClassNames. predict нормирует вектор так, чтобы сумма результата равнялась 1.

Заданное значение заменяет значение Mdl.Prior.

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

Выиграйте функцию преобразования описание, как функции пошагового обучения преобразовывают необработанные значения отклика в виде вектора символов, строкового скаляра или указателя на функцию. Заданное значение заменяет значение Mdl.ScoreTransform.

Эта таблица описывает доступные встроенные функции для преобразования счета.

ЗначениеОписание
"doublelogit"1/(1 + e–2x)
"invlogit"журнал (x / (1 – x))
"ismax"Устанавливает счет к классу с самым большим счетом к 1 и устанавливает музыку ко всем другим классам к 0
"logit"1/(1 + ex)
"none" или "identity"x (никакое преобразование)
"sign"– 1 для x <0
0 для x = 0
1 для x> 0
"symmetric"2x – 1
"symmetricismax"Устанавливает счет к классу с самым большим счетом к 1 и устанавливает музыку ко всем другим классам к –1
"symmetriclogit"2/(1 + ex) – 1

Типы данных: char | string

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

свернуть все

Предсказанные ответы (или метки), возвращенный как категориальное или символьный массив; с плавающей точкой, логический, или вектор строки; или массив ячеек из символьных векторов со строками 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