predict

Классифицируйте наблюдения с помощью наивного классификатора Байеса

Описание

пример

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

пример

[label,Posterior,Cost] = predict(Mdl,X) также возвращает Апостериорную вероятность (Posterior) и предсказанный (ожидал) Стоимость Misclassification (Cost) соответствие наблюдениям (строки) в Mdl.X. Для каждого наблюдения в X, предсказанная метка класса соответствует минимальной ожидаемой стоимости классификации среди всех классов.

Примеры

свернуть все

Загрузите fisheriris набор данных. Создайте X как числовая матрица, которая содержит четыре лепестковых измерения для 150 ирисовых диафрагм. Создайте Y как массив ячеек из символьных векторов, который содержит соответствующие ирисовые разновидности.

load fisheriris
X = meas;
Y = species;
rng('default')  % for reproducibility

Случайным образом наблюдения раздела в набор обучающих данных и набор тестов со стратификацией, с помощью информации о классе в Y. Задайте 30%-ю выборку затяжки для тестирования.

cv = cvpartition(Y,'HoldOut',0.30);

Извлеките обучение и протестируйте индексы.

trainInds = training(cv);
testInds = test(cv);

Задайте наборы тестовых данных и обучение.

XTrain = X(trainInds,:);
YTrain = Y(trainInds);
XTest = X(testInds,:);
YTest = Y(testInds);

Обучите наивный классификатор Байеса с помощью предикторов XTrain и класс маркирует YTrain. Методические рекомендации должны задать имена классов. fitcnb принимает, что каждый предиктор условно и нормально распределен.

Mdl = fitcnb(XTrain,YTrain,'ClassNames',{'setosa','versicolor','virginica'})
Mdl = 
  ClassificationNaiveBayes
              ResponseName: 'Y'
     CategoricalPredictors: []
                ClassNames: {'setosa'  'versicolor'  'virginica'}
            ScoreTransform: 'none'
           NumObservations: 105
         DistributionNames: {'normal'  'normal'  'normal'  'normal'}
    DistributionParameters: {3x4 cell}


  Properties, Methods

Mdl обученный ClassificationNaiveBayes классификатор.

Предскажите тестовые демонстрационные метки.

idx = randsample(sum(testInds),10);
label = predict(Mdl,XTest);

Отобразите результаты для случайного набора 10 наблюдений в тестовой выборке.

table(YTest(idx),label(idx),'VariableNames',...
    {'TrueLabel','PredictedLabel'})
ans=10×2 table
      TrueLabel       PredictedLabel
    ______________    ______________

    {'virginica' }    {'virginica' }
    {'versicolor'}    {'versicolor'}
    {'versicolor'}    {'versicolor'}
    {'virginica' }    {'virginica' }
    {'setosa'    }    {'setosa'    }
    {'virginica' }    {'virginica' }
    {'setosa'    }    {'setosa'    }
    {'versicolor'}    {'versicolor'}
    {'versicolor'}    {'virginica' }
    {'versicolor'}    {'versicolor'}

Создайте график беспорядка от истины, маркирует YTest и предсказанные метки label.

cm = confusionchart(YTest,label);

Figure contains an object of type ConfusionMatrixChart.

Оцените апостериорные вероятности и затраты misclassification для новых наблюдений с помощью наивного классификатора Байеса. Классифицируйте новые наблюдения с помощью эффективного памятью предварительно обученного классификатора.

Загрузите fisheriris набор данных. Создайте X как числовая матрица, которая содержит четыре лепестковых измерения для 150 ирисовых диафрагм. Создайте Y как массив ячеек из символьных векторов, который содержит соответствующие ирисовые разновидности.

load fisheriris
X = meas;
Y = species;
rng('default')  % for reproducibility

Разделите набор данных в два набора: каждый содержит набор обучающих данных, и другой содержит новые, ненаблюдаемые данные. Зарезервируйте 10 наблюдений для нового набора данных.

n = size(X,1);
newInds = randsample(n,10);
inds = ~ismember(1:n,newInds);
XNew = X(newInds,:);
YNew = Y(newInds);

Обучите наивный классификатор Байеса с помощью предикторов X и класс маркирует Y. Методические рекомендации должны задать имена классов. fitcnb принимает, что каждый предиктор условно и нормально распределен.

Mdl = fitcnb(X(inds,:),Y(inds),...
    'ClassNames',{'setosa','versicolor','virginica'});

Mdl обученный ClassificationNaiveBayes классификатор.

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

CMdl = compact(Mdl);
whos('Mdl','CMdl')
  Name      Size            Bytes  Class                                                        Attributes

  CMdl      1x1              5406  classreg.learning.classif.CompactClassificationNaiveBayes              
  Mdl       1x1             12731  ClassificationNaiveBayes                                               

CMdl CompactClassificationNaiveBayes классификатор. Это использует меньше памяти, чем Mdl потому что Mdl хранит данные.

Отобразите имена классов CMdl использование записи через точку.

CMdl.ClassNames
ans = 3x1 cell
    {'setosa'    }
    {'versicolor'}
    {'virginica' }

Предскажите метки. Оцените апостериорные вероятности и ожидаемый класс misclassification затраты.

[labels,PostProbs,MisClassCost] = predict(CMdl,XNew);

Сравните истинные метки с предсказанными метками.

table(YNew,labels,PostProbs,MisClassCost,'VariableNames',...
    {'TrueLabels','PredictedLabels',...
    'PosteriorProbabilities','MisclassificationCosts'})
ans=10×4 table
      TrueLabels      PredictedLabels             PosteriorProbabilities                      MisclassificationCosts        
    ______________    _______________    _________________________________________    ______________________________________

    {'virginica' }    {'virginica' }     4.0832e-268     4.6422e-09              1             1             1    4.6422e-09
    {'setosa'    }    {'setosa'    }               1     3.0706e-18     4.6719e-25    3.0706e-18             1             1
    {'virginica' }    {'virginica' }     1.0007e-246     5.8758e-10              1             1             1    5.8758e-10
    {'versicolor'}    {'versicolor'}      1.2022e-61        0.99995     4.9859e-05             1    4.9859e-05       0.99995
    {'virginica' }    {'virginica' }      2.687e-226     1.7905e-08              1             1             1    1.7905e-08
    {'versicolor'}    {'versicolor'}      3.3431e-76        0.99971     0.00028983             1    0.00028983       0.99971
    {'virginica' }    {'virginica' }       4.05e-166      0.0028527        0.99715             1       0.99715     0.0028527
    {'setosa'    }    {'setosa'    }               1     1.1272e-14     2.0308e-23    1.1272e-14             1             1
    {'virginica' }    {'virginica' }     1.3292e-228     8.3604e-10              1             1             1    8.3604e-10
    {'setosa'    }    {'setosa'    }               1     4.5023e-17     2.1724e-24    4.5023e-17             1             1

PostProbs и MisClassCost 10- 3 числовые матрицы, где каждая строка соответствует новому наблюдению и каждому столбцу, соответствуют классу. Порядок столбцов соответствует порядку CMdl.ClassNames.

Загрузите fisheriris набор данных. Создайте X как числовая матрица, которая содержит лепестковые измерения длины и ширины для 150 ирисовых диафрагм. Создайте Y как массив ячеек из символьных векторов, который содержит соответствующие ирисовые разновидности.

load fisheriris
X = meas(:,3:4);
Y = species;

Обучите наивный классификатор Байеса с помощью предикторов X и класс маркирует Y. Методические рекомендации должны задать имена классов. fitcnb принимает, что каждый предиктор условно и нормально распределен.

Mdl = fitcnb(X,Y,'ClassNames',{'setosa','versicolor','virginica'});

Mdl обученный ClassificationNaiveBayes классификатор.

Задайте сетку значений на наблюдаемом пробеле предиктора.

xMax = max(X);
xMin = min(X);
h = 0.01;
[x1Grid,x2Grid] = meshgrid(xMin(1):h:xMax(1),xMin(2):h:xMax(2));

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

[~,PosteriorRegion] = predict(Mdl,[x1Grid(:),x2Grid(:)]);

Постройте области апостериорной вероятности и обучающие данные.

h = scatter(x1Grid(:),x2Grid(:),1,PosteriorRegion);
h.MarkerEdgeAlpha = 0.3;

Отобразите данные на графике.

hold on
gh = gscatter(X(:,1),X(:,2),Y,'k','dx*');
title 'Iris Petal Measurements and Posterior Probabilities';
xlabel 'Petal length (cm)';
ylabel 'Petal width (cm)';
axis tight
legend(gh,'Location','Best')
hold off

Figure contains an axes object. The axes object with title Iris Petal Measurements and Posterior Probabilities contains 4 objects of type scatter, line. These objects represent setosa, versicolor, virginica.

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

свернуть все

Наивная Байесова модель классификации в виде ClassificationNaiveBayes объект модели или CompactClassificationNaiveBayes объект модели, возвращенный fitcnb или compact, соответственно.

Данные о предикторе, которые будут классифицированы в виде числовой матрицы или таблицы.

Каждая строка X соответствует одному наблюдению, и каждый столбец соответствует одной переменной.

  • Для числовой матрицы:

    • Переменные, которые составляют столбцы X должен иметь тот же порядок как переменные предикторы, которые обучили Mdl.

    • Если вы обучаете Mdl с помощью таблицы (например, Tbl), затем X может быть числовая матрица если Tbl содержит только числовые переменные предикторы. Обрабатывать числовые предикторы в Tbl как категориальные во время обучения, идентифицируйте категориальные предикторы с помощью 'CategoricalPredictors' аргумент пары "имя-значение" fitcnb. Если Tbl содержит неоднородные переменные предикторы (например, типы числовых и категориальных данных) и X числовая матрица, затем predict выдает ошибку.

  • Для таблицы:

    • predict не поддерживает многостолбцовые переменные или массивы ячеек кроме массивов ячеек из символьных векторов.

    • Если вы обучаете Mdl с помощью таблицы (например, Tbl), затем все переменные предикторы в X должен иметь те же имена переменных и типы данных как переменные, которые обучили Mdl (сохраненный в Mdl.PredictorNames). Однако порядок следования столбцов X не должен соответствовать порядку следования столбцов Tbltbl и X может содержать дополнительные переменные (переменные отклика, веса наблюдения, и так далее), но predict игнорирует их.

    • Если вы обучаете Mdl с помощью числовой матрицы затем предиктор называет в Mdl.PredictorNames должен совпасть с соответствующими именами переменного предиктора в X. Чтобы задать имена предиктора во время обучения, используйте 'PredictorNames'аргумент пары "имя-значение" fitcnb. Все переменные предикторы в X должны быть числовые векторы. X может содержать дополнительные переменные (переменные отклика, веса наблюдения, и так далее), но predict игнорирует их.

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

Примечания:

  • Если Mdl.DistributionNames 'mn', затем программное обеспечение возвращает NaNs соответствие строкам X это содержит по крайней мере один NaN.

  • Если Mdl.DistributionNames не 'mn', затем программное обеспечение игнорирует NaN значения при оценке misclassification затрат и апостериорных вероятностей. А именно, программное обеспечение вычисляет условную плотность предикторов, учитывая класс путем игнорирования соответствия факторов недостающим значениям предиктора.

  • Для распределения предиктора, заданного как 'mvmn', если X содержит уровни, которые не представлены в обучающих данных (то есть, не в Mdl.CategoricalLevels для того предиктора), затем условная плотность предикторов, учитывая класс 0. Для тех наблюдений программное обеспечение возвращает соответствующее значение Posterior как NaN. Программное обеспечение определяет метку класса для таких наблюдений с помощью априорной вероятности класса, сохраненной в Mdl.Prior.

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

свернуть все

Предсказанные метки класса, возвращенные как категориальный вектор, символьный массив, логический или числовой вектор или массив ячеек из символьных векторов.

Предсказанные метки класса имеют следующее:

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

  • Длина, равная количеству строк Mdl.X.

  • Класс, дающий к самому низкому, ожидал стоимость misclassification (Cost).

Апостериорная вероятность класса, возвращенная как числовая матрица. Posterior имеет строки, равные количеству строк Mdl.X и столбцы равняются количеству отличных классов в обучающих данных (size(Mdl.ClassNames,1)).

Posterior(j,k) предсказанная апостериорная вероятность класса k (в классе Mdl.ClassNames(k)) учитывая наблюдение в строке j из Mdl.X.

Ожидаемая Стоимость Misclassification, возвращенная как числовая матрица. Cost имеет строки, равные количеству строк Mdl.X и столбцы равняются количеству отличных классов в обучающих данных (size(Mdl.ClassNames,1)).

Cost(j,k) ожидаемая misclassification стоимость наблюдения в строке j из Mdl.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).

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

prior probability класса является принятой относительной частотой, с которой наблюдения от того класса происходят в населении.

Расширенные возможности

Введенный в R2014b