predict

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

Описание

пример

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

пример

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

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

  • Матрица A затрат 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 не должен соответствовать порядку следования столбцов 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.

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

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

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

label:

  • Совпадающий тип данных, когда наблюдаемый класс помечает (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              5238  classreg.learning.classif.CompactClassificationNaiveBayes              
  Mdl       1x1             12539  ClassificationNaiveBayes                                               

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

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

CMdl.ClassNames
ans = 3x1 cell
    {'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.

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