предсказать

Предскажите метки с помощью наивной модели классификации Бейеса

Синтаксис

label = predict(Mdl,X)
[label,Posterior,Cost] = predict(Mdl,X)

Описание

пример

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

пример

[label,Posterior,Cost] = predict(Mdl,X) также возвращается:

  • Матрица апостериорных вероятностей (Posterior), указывающий на вероятность, что метка прибывает из конкретного класса.

  • Матрица misclassification стоит (Cost). Для каждого наблюдения в X предсказанная метка класса соответствует минимальным ожидаемым затратам классификации среди всех классов.

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

развернуть все

Наивный классификатор Байеса, заданный как модель 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 не должен соответствовать порядку следования столбцов Tbl. Tbl и X могут содержать дополнительные переменные (переменные отклика, веса наблюдения, и т.д.), но predict игнорирует их.

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

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

Примечания:

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

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

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

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

развернуть все

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

метка:

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

  • Имеет длину, равную количеству строк Mdl.X

  • Класс, приводящий к самому низкому ожидаемому misclassification, стоит (Cost)

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

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

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

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

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

Примеры

развернуть все

Загрузите ирисовый набор данных Фишера.

load fisheriris
X = meas;    % Predictors
Y = species; % Response
rng(1);

Обучите наивный классификатор Байеса и задайте к затяжке 30% данных для тестовой выборки. Это - хорошая практика, чтобы задать порядок класса. Примите, что каждый предиктор условно, нормально распределен, учитывая свою метку.

CVMdl = fitcnb(X,Y,'Holdout',0.30,...
    'ClassNames',{'setosa','versicolor','virginica'});
CMdl = CVMdl.Trained{1};          % Extract trained, compact classifier
testIdx = test(CVMdl.Partition); % Extract the test indices
XTest = X(testIdx,:);
YTest = Y(testIdx);

CVMdl является классификатором ClassificationPartitionedModel. Это содержит свойство Trained, которое является массивом ячеек 1 на 1, содержащим классификатор CompactClassificationNaiveBayes, что программное обеспечение обучило использование набора обучающих данных.

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

idx = randsample(sum(testIdx),10);
label = predict(CMdl,XTest);
table(YTest(idx),label(idx),'VariableNames',...
    {'TrueLabel','PredictedLabel'})
ans=10×2 table
     TrueLabel      PredictedLabel
    ____________    ______________

    'setosa'         'setosa'     
    'versicolor'     'versicolor' 
    'setosa'         'setosa'     
    'virginica'      'virginica'  
    'versicolor'     'versicolor' 
    'setosa'         'setosa'     
    'virginica'      'virginica'  
    'virginica'      'virginica'  
    'setosa'         'setosa'     
    'setosa'         'setosa'     

Цель классификации состоит в том, чтобы оценить апостериорные вероятности новых наблюдений с помощью обученного алгоритма. Много приложений обучают алгоритмы на больших наборах данных, которые могут использовать ресурсы, которые лучше используются в другом месте. Этот пример показывает, как эффективно оценить апостериорные вероятности новых наблюдений с помощью Наивного классификатора Байеса.

Загрузите ирисовый набор данных Фишера.

load fisheriris
X = meas;    % Predictors
Y = species; % Response
rng(1);

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

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

Обучите наивный классификатор Байеса. Это - хорошая практика, чтобы задать порядок класса. Примите, что каждый предиктор условно, нормально распределен, учитывая свою метку. Сохраните память путем сокращения размера обученного классификатора SVM.

Mdl = fitcnb(X(inds,:),Y(inds),...
    'ClassNames',{'setosa','versicolor','virginica'});
CMdl = compact(Mdl);
whos('Mdl','CMdl')
  Name      Size            Bytes  Class                                                        Attributes

  CMdl      1x1              5346  classreg.learning.classif.CompactClassificationNaiveBayes              
  Mdl       1x1             12671  ClassificationNaiveBayes                                               

Классификатор CompactClassificationNaiveBayes (CMdl) использует меньше пространства, чем классификатор ClassificationNaiveBayes (Mdl) потому что последние хранилища данные.

Предскажите метки, апостериорные вероятности и ожидаемый класс misclassification затраты. Поскольку истинные метки доступны, сравнивают их с предсказанными метками.

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

[labels,PostProbs,MisClassCost] = predict(CMdl,XNew);
table(YNew,labels,PostProbs,'VariableNames',...
    {'TrueLabels','PredictedLabels',...
    'PosteriorProbabilities'})
ans=10×3 table
     TrueLabels     PredictedLabels             PosteriorProbabilities          
    ____________    _______________    _________________________________________

    'setosa'         'setosa'                    1     4.1259e-16     1.1846e-23
    'versicolor'     'versicolor'       1.0373e-60        0.99999     5.8053e-06
    'virginica'      'virginica'       4.8708e-211     0.00085645        0.99914
    'setosa'         'setosa'                    1     1.4053e-19     2.2672e-26
    'versicolor'     'versicolor'       2.9308e-75        0.99987     0.00012869
    'setosa'         'setosa'                    1      2.629e-18     4.4297e-25
    'versicolor'     'versicolor'       1.4238e-67        0.99999      9.733e-06
    'versicolor'     'versicolor'      2.0667e-110        0.94237       0.057625
    'setosa'         'setosa'                    1     4.3779e-19     3.5139e-26
    'setosa'         'setosa'                    1     1.1792e-17     2.2912e-24

MisClassCost
MisClassCost = 10×3

    0.0000    1.0000    1.0000
    1.0000    0.0000    1.0000
    1.0000    0.9991    0.0009
    0.0000    1.0000    1.0000
    1.0000    0.0001    0.9999
    0.0000    1.0000    1.0000
    1.0000    0.0000    1.0000
    1.0000    0.0576    0.9424
    0.0000    1.0000    1.0000
    0.0000    1.0000    1.0000

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

Загрузите ирисовый набор данных Фишера. Обучите классификатор с помощью лепестковых длин и ширин.

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

Обучите наивный классификатор Байеса. Это - хорошая практика, чтобы задать порядок класса. Примите, что каждый предиктор условно, нормально распределен, учитывая свою метку.

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(:)]);

Постройте области апостериорной вероятности и данные тренировки.

figure;
% Plot posterior regions 
scatter(x1Grid(:),x2Grid(:),1,PosteriorRegion);
% Adjust color bar options
h = colorbar;
h.Ticks = [0 0.5 1];
h.TickLabels = {'setosa','versicolor','virginica'};
h.YLabel.String = 'Posterior';
h.YLabel.Position = [-0.5 0.5 0];
% Adjust color map options
d = 1e-2;
cmap = zeros(201,3);
cmap(1:101,1) = 1:-d:0;
cmap(1:201,2) = [0:d:1 1-d:-d:0];
cmap(101:201,3) = 0:d:1;
colormap(cmap);
% Plot data
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

Больше о

развернуть все

Ссылки

[1] Hastie, T., Р. Тибширэни и Дж. Фридман. Элементы статистического изучения, второго выпуска. Нью-Йорк: Спрингер, 2008.

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