fitcnb

Обучите многоклассовую наивную модель Байеса

Описание

Mdl = fitcnb(Tbl,ResponseVarName) возвращает многоклассовую наивную модель Бейеса (Mdl), обученный предикторами в таблице Tbl и метки классов в переменной Tbl.ResponseVarName.

Mdl = fitcnb(Tbl,formula) возвращает многоклассовую наивную модель Бейеса (Mdl), обученный предикторами в таблице Tbl. formula является объяснительной моделью отклика и подмножеством переменных предиктора в Tbl используется для подгонки Mdl.

Mdl = fitcnb(Tbl,Y) возвращает многоклассовую наивную модель Бейеса (Mdl), обученный предикторами в таблице Tbl и метки классов в массиве Y.

пример

Mdl = fitcnb(X,Y) возвращает многоклассовую наивную модель Бейеса (Mdl), обученная предикторами X и метки классов Y.

пример

Mdl = fitcnb(___,Name,Value) возвращает наивный классификатор Байеса с дополнительными опциями, заданными одним или несколькими Name,Value аргументы в виде пар, с использованием любого из предыдущих синтаксисов. Например, вы можете задать распределение, чтобы смоделировать данные, предыдущие вероятности для классов или полосу окна сглаживания ядра.

Примеры

свернуть все

Загрузите набор данных радужки Фишера.

load fisheriris
X = meas(:,3:4);
Y = species;
tabulate(Y)
       Value    Count   Percent
      setosa       50     33.33%
  versicolor       50     33.33%
   virginica       50     33.33%

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

Обучите наивный классификатор Байеса. Рекомендуется указать порядок классов.

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


  Properties, Methods

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

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

setosaIndex = strcmp(Mdl.ClassNames,'setosa');
estimates = Mdl.DistributionParameters{setosaIndex,1}
estimates = 2×1

    1.4620
    0.1737

Среднее значение 1.4620 и стандартное отклонение 0.1737.

Постройте график Гауссовых контуров.

figure
gscatter(X(:,1),X(:,2),Y);
h = gca;
cxlim = h.XLim;
cylim = h.YLim;
hold on
Params = cell2mat(Mdl.DistributionParameters); 
Mu = Params(2*(1:3)-1,1:2); % Extract the means
Sigma = zeros(2,2,3);
for j = 1:3
    Sigma(:,:,j) = diag(Params(2*j,:)).^2; % Create diagonal covariance matrix
    xlim = Mu(j,1) + 4*[-1 1]*sqrt(Sigma(1,1,j));
    ylim = Mu(j,2) + 4*[-1 1]*sqrt(Sigma(2,2,j));
    f = @(x,y) arrayfun(@(x0,y0) mvnpdf([x0 y0],Mu(j,:),Sigma(:,:,j)),x,y);
    fcontour(f,[xlim ylim]) % Draw contours for the multivariate normal distributions 
end
h.XLim = cxlim;
h.YLim = cylim;
title('Naive Bayes Classifier -- Fisher''s Iris Data')
xlabel('Petal Length (cm)')
ylabel('Petal Width (cm)')
legend('setosa','versicolor','virginica')
hold off

Figure contains an axes. The axes with title Naive Bayes Classifier -- Fisher's Iris Data contains 6 objects of type line, functioncontour. These objects represent setosa, versicolor, virginica.

Вы можете изменить распределение по умолчанию с помощью аргумента пары "имя-значение" 'DistributionNames'. Например, если некоторые предикторы категоричны, то можно задать, что они многомерные, полиномиальные случайные переменные, использующие 'DistributionNames','mvmn'.

Создайте наивный классификатор Байеса для набора данных радужной оболочки глаза Фишера. Кроме того, задайте предыдущие вероятности во время обучения.

Загрузите набор данных радужки Фишера.

load fisheriris
X = meas;
Y = species;
classNames = {'setosa','versicolor','virginica'}; % Class order

X является числовой матрицей, которая содержит четыре измерения лепестков для 150 ирисов. Y - массив ячеек из векторов символов, который содержит соответствующие виды радужной оболочки.

По умолчанию предыдущее распределение вероятностей класса является относительным частотным распределением классов в наборе данных. В этом случае априорная вероятность составляет 33% для каждого вида. Однако предположим, что вы знаете, что в населения 50% ирисов сетоса, 20% версиколор и 30% виргиника. Можно включить эту информацию, указав это распределение как предварительную вероятность во время обучения.

Обучите наивный классификатор Байеса. Задайте порядок классов и предшествующее распределение вероятностей классов.

prior = [0.5 0.2 0.3];
Mdl = fitcnb(X,Y,'ClassNames',classNames,'Prior',prior)
Mdl = 
  ClassificationNaiveBayes
              ResponseName: 'Y'
     CategoricalPredictors: []
                ClassNames: {'setosa'  'versicolor'  'virginica'}
            ScoreTransform: 'none'
           NumObservations: 150
         DistributionNames: {'normal'  'normal'  'normal'  'normal'}
    DistributionParameters: {3x4 cell}


  Properties, Methods

Mdl является обученным ClassificationNaiveBayes классификатор, и некоторые его свойства появляются в Командном окне. Программа рассматривает предикторы как независимые, заданные классом, и, по умолчанию, подходит им с помощью нормальных распределений.

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

Создайте новую наивную модель Байеса на основе Mdlи задайте, что предшествующее распределение вероятностей классов является эмпирическим распределением классов.

defaultPriorMdl = Mdl;
FreqDist = cell2table(tabulate(Y));
defaultPriorMdl.Prior = FreqDist{:,3};

Программное обеспечение нормализует вероятности предыдущего класса, чтобы суммировать 1.

Оцените ошибку перекрестной валидации для обеих моделей с помощью 10-кратной перекрестной валидации.

rng(1); % For reproducibility
defaultCVMdl = crossval(defaultPriorMdl);
defaultLoss = kfoldLoss(defaultCVMdl)
defaultLoss = 0.0533
CVMdl = crossval(Mdl);
Loss = kfoldLoss(CVMdl)
Loss = 0.0340

Mdl работает лучше, чем defaultPriorMdl.

Загрузите набор данных радужки Фишера.

load fisheriris
X = meas;
Y = species;

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

Mdl1 = fitcnb(X,Y,...
    'ClassNames',{'setosa','versicolor','virginica'})
Mdl1 = 
  ClassificationNaiveBayes
              ResponseName: 'Y'
     CategoricalPredictors: []
                ClassNames: {'setosa'  'versicolor'  'virginica'}
            ScoreTransform: 'none'
           NumObservations: 150
         DistributionNames: {'normal'  'normal'  'normal'  'normal'}
    DistributionParameters: {3x4 cell}


  Properties, Methods

Mdl1.DistributionParameters
ans=3×4 cell array
    {2x1 double}    {2x1 double}    {2x1 double}    {2x1 double}
    {2x1 double}    {2x1 double}    {2x1 double}    {2x1 double}
    {2x1 double}    {2x1 double}    {2x1 double}    {2x1 double}

Mdl1.DistributionParameters{1,2}
ans = 2×1

    3.4280
    0.3791

По умолчанию программное обеспечение моделирует распределение предикторов в каждом классе как Гауссов с некоторым средним и стандартным отклонением. Существует четыре предиктора и три уровня классов. Каждая камера в Mdl1.DistributionParameters соответствует числовому вектору, содержащему среднее и стандартное отклонение каждого распределения, например, среднее и стандартное отклонение для setosa iris sepal ширины 3.4280 и 0.3791, соответственно.

Оцените матрицу неточностей для Mdl1.

isLabels1 = resubPredict(Mdl1);
ConfusionMat1 = confusionchart(Y,isLabels1);

Figure contains an object of type ConfusionMatrixChart.

Элемент (j, k) матричного графика неточностей представляет количество наблюдений, которое программное обеспечение классифицирует как k, но действительно находится в классе j согласно данным.

Переобучите классификатор с помощью распределения Гауссова для предикторов 1 и 2 (длины и ширины сепаля) и плотности нормального ядра по умолчанию для предикторов 3 и 4 (длины и ширины лепестков).

Mdl2 = fitcnb(X,Y,...
    'DistributionNames',{'normal','normal','kernel','kernel'},...
    'ClassNames',{'setosa','versicolor','virginica'});
Mdl2.DistributionParameters{1,2}
ans = 2×1

    3.4280
    0.3791

Программное обеспечение не обучает параметры плотности ядра. Скорее программное обеспечение выбирает оптимальную ширину. Однако вы можете задать ширину, используя 'Width' аргумент пары "имя-значение".

Оцените матрицу неточностей для Mdl2.

isLabels2 = resubPredict(Mdl2);
ConfusionMat2 = confusionchart(Y,isLabels2);

Figure contains an object of type ConfusionMatrixChart.

На основе матриц неточностей два классификатора выполняют одинаково в обучающей выборке.

Загрузите набор данных радужки Фишера.

load fisheriris
X = meas;
Y = species;
rng(1); % For reproducibility

Обучите и перекрестная валидация наивного классификатора Байеса с помощью опций по умолчанию и перекрестной валидации k-fold. Рекомендуется указать порядок классов.

CVMdl1 = fitcnb(X,Y,...
    'ClassNames',{'setosa','versicolor','virginica'},...
    'CrossVal','on');

По умолчанию программное обеспечение моделирует распределение предикторов в каждом классе как Гауссов с некоторым средним и стандартным отклонением. CVMdl1 является ClassificationPartitionedModel модель.

Создайте наивный шаблон двоичного классификатора Байеса по умолчанию и обучите исправление ошибок, выходные коды мультикласса модель.

t = templateNaiveBayes();
CVMdl2 = fitcecoc(X,Y,'CrossVal','on','Learners',t);

CVMdl2 является ClassificationPartitionedECOC модель. Можно задать опции для наивных двоичных учащихся Байеса, используя те же аргументы пары "имя-значение", что и для fitcnb.

Сравните несовпадающую по выборке ошибку классификации k-fold (доля неправильно классифицированных наблюдений).

classErr1 = kfoldLoss(CVMdl1,'LossFun','ClassifErr')
classErr1 = 0.0533
classErr2 = kfoldLoss(CVMdl2,'LossFun','ClassifErr')
classErr2 = 0.0467

Mdl2 имеет более низкую ошибку обобщения.

Некоторые спам-фильтры классифицируют входящее письмо как спам на основе того, сколько раз за слово или пунктуация (называемые лексемы) происходит в электронном письме. Предикторами являются частоты конкретных слов или пунктуаций в электронном письме. Поэтому предикторы составляют полиномиальные случайные переменные.

Этот пример иллюстрирует классификацию с использованием наивных Байеса и полиномиальных предикторов.

Создайте обучающие данные

Предположим, вы наблюдали 1000 писем и классифицировали их как спам или не спам. Сделайте это, случайным образом присвоив -1 или 1 y для каждого электронного письма.

n = 1000;                       % Sample size
rng(1);                         % For reproducibility
Y = randsample([-1 1],n,true);  % Random labels

Чтобы создать данные предиктора, предположим, что в словаре пять лексем и 20 наблюдаемые лексемы на каждый адрес электронной почты. Сгенерируйте данные предиктора из пяти лексем путем создания случайных, полиномиальных отклонений. Относительные частоты для лексем, соответствующих спам-письмам, должны отличаться от электронных писем, которые не являются спамом.

tokenProbs = [0.2 0.3 0.1 0.15 0.25;...
    0.4 0.1 0.3 0.05 0.15];             % Token relative frequencies  
tokensPerEmail = 20;                    % Fixed for convenience
X = zeros(n,5);
X(Y == 1,:) = mnrnd(tokensPerEmail,tokenProbs(1,:),sum(Y == 1));
X(Y == -1,:) = mnrnd(tokensPerEmail,tokenProbs(2,:),sum(Y == -1));

Обучите классификатор

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

Mdl = fitcnb(X,Y,'DistributionNames','mn');

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

Оцените эффективность в выборке Mdl путем оценки ошибки неправильной классификации.

isGenRate = resubLoss(Mdl,'LossFun','ClassifErr')
isGenRate = 0.0200

Коэффициент неправильной классификации в выборке составляет 2%.

Создание новых данных

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

newN = 500;
newY = randsample([-1 1],newN,true);
newX = zeros(newN,5);
newX(newY == 1,:) = mnrnd(tokensPerEmail,tokenProbs(1,:),...
    sum(newY == 1));
newX(newY == -1,:) = mnrnd(tokensPerEmail,tokenProbs(2,:),...
    sum(newY == -1));

Оценка эффективности классификатора

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

oosGenRate = loss(Mdl,newX,newY)
oosGenRate = 0.0261

Частота неправильной классификации вне выборки составляет 2,6%, что указывает на то, что классификатор обобщается довольно хорошо.

В этом примере показано, как использовать OptimizeHyperparameters Пара "имя-значение" для минимизации потерь перекрестной валидации в наивном классификаторе Байеса с помощью fitcnb. В примере используются данные радужки глаза Фишера.

Загрузите данные радужки Фишера.

load fisheriris
X = meas;
Y = species;
classNames = {'setosa','versicolor','virginica'};

Оптимизируйте классификацию с помощью параметров ' auto '.

Для воспроизводимости установите случайный seed и используйте 'expected-improvement-plus' функция сбора.

rng default
Mdl = fitcnb(X,Y,'ClassNames',classNames,'OptimizeHyperparameters','auto',...
    'HyperparameterOptimizationOptions',struct('AcquisitionFunctionName',...
    'expected-improvement-plus'))
Warning: It is recommended that you first standardize all numeric predictors when optimizing the Naive Bayes 'Width' parameter. Ignore this warning if you have done that.
|=====================================================================================================|
| Iter | Eval   | Objective   | Objective   | BestSoFar   | BestSoFar   | Distribution-|        Width |
|      | result |             | runtime     | (observed)  | (estim.)    | Names        |              |
|=====================================================================================================|
|    1 | Best   |    0.053333 |     0.59202 |    0.053333 |    0.053333 |       normal |            - |
|    2 | Best   |    0.046667 |     0.78433 |    0.046667 |    0.049998 |       kernel |      0.11903 |
|    3 | Accept |    0.053333 |     0.12187 |    0.046667 |    0.046667 |       normal |            - |
|    4 | Accept |    0.086667 |      0.3213 |    0.046667 |    0.046668 |       kernel |       2.4506 |
|    5 | Accept |    0.046667 |     0.28788 |    0.046667 |    0.046663 |       kernel |      0.10449 |
|    6 | Accept |    0.073333 |     0.28737 |    0.046667 |    0.046665 |       kernel |     0.025044 |
|    7 | Accept |    0.046667 |     0.32107 |    0.046667 |    0.046655 |       kernel |      0.27647 |
|    8 | Accept |    0.046667 |     0.29889 |    0.046667 |    0.046647 |       kernel |       0.2031 |
|    9 | Accept |        0.06 |     0.33168 |    0.046667 |    0.046658 |       kernel |      0.44271 |
|   10 | Accept |    0.046667 |      0.3879 |    0.046667 |    0.046618 |       kernel |       0.2412 |
|   11 | Accept |    0.046667 |     0.32713 |    0.046667 |    0.046619 |       kernel |     0.071925 |
|   12 | Accept |    0.046667 |     0.28496 |    0.046667 |    0.046612 |       kernel |     0.083459 |
|   13 | Accept |    0.046667 |     0.30127 |    0.046667 |    0.046603 |       kernel |      0.15661 |
|   14 | Accept |    0.046667 |     0.38462 |    0.046667 |    0.046607 |       kernel |      0.25613 |
|   15 | Accept |    0.046667 |     0.31145 |    0.046667 |    0.046606 |       kernel |      0.17776 |
|   16 | Accept |    0.046667 |     0.29788 |    0.046667 |    0.046606 |       kernel |      0.13632 |
|   17 | Accept |    0.046667 |      0.3987 |    0.046667 |    0.046606 |       kernel |     0.077598 |
|   18 | Accept |    0.046667 |     0.29776 |    0.046667 |    0.046626 |       kernel |      0.25646 |
|   19 | Accept |    0.046667 |      0.3424 |    0.046667 |    0.046626 |       kernel |     0.093584 |
|   20 | Accept |    0.046667 |     0.30273 |    0.046667 |    0.046627 |       kernel |     0.061602 |
|=====================================================================================================|
| Iter | Eval   | Objective   | Objective   | BestSoFar   | BestSoFar   | Distribution-|        Width |
|      | result |             | runtime     | (observed)  | (estim.)    | Names        |              |
|=====================================================================================================|
|   21 | Accept |    0.046667 |     0.31211 |    0.046667 |    0.046627 |       kernel |     0.066532 |
|   22 | Accept |    0.093333 |     0.33373 |    0.046667 |    0.046618 |       kernel |       5.8968 |
|   23 | Accept |    0.046667 |     0.33187 |    0.046667 |    0.046619 |       kernel |     0.067045 |
|   24 | Accept |    0.046667 |      0.3261 |    0.046667 |     0.04663 |       kernel |      0.25281 |
|   25 | Accept |    0.046667 |     0.33679 |    0.046667 |     0.04663 |       kernel |       0.1473 |
|   26 | Accept |    0.046667 |     0.27818 |    0.046667 |    0.046631 |       kernel |      0.17211 |
|   27 | Accept |    0.046667 |     0.31236 |    0.046667 |    0.046631 |       kernel |      0.12457 |
|   28 | Accept |    0.046667 |     0.43723 |    0.046667 |    0.046631 |       kernel |     0.066659 |
|   29 | Accept |    0.046667 |     0.29014 |    0.046667 |    0.046631 |       kernel |       0.1081 |
|   30 | Accept |        0.08 |     0.32716 |    0.046667 |    0.046628 |       kernel |       1.1048 |

Figure contains an axes. The axes with title Min objective vs. Number of function evaluations contains 2 objects of type line. These objects represent Min observed objective, Estimated min objective.

Figure contains an axes. The axes with title Objective function model contains 5 objects of type line, surface, contour. These objects represent Observed points, Model mean, Next point, Model minimum feasible.

__________________________________________________________
Optimization completed.
MaxObjectiveEvaluations of 30 reached.
Total function evaluations: 30
Total elapsed time: 56.4233 seconds
Total objective function evaluation time: 10.2689

Best observed feasible point:
    DistributionNames     Width 
    _________________    _______

         kernel          0.11903

Observed objective function value = 0.046667
Estimated objective function value = 0.046667
Function evaluation time = 0.78433

Best estimated feasible point (according to models):
    DistributionNames     Width 
    _________________    _______

         kernel          0.25613

Estimated objective function value = 0.046628
Estimated function evaluation time = 0.32851
Mdl = 
  ClassificationNaiveBayes
                         ResponseName: 'Y'
                CategoricalPredictors: []
                           ClassNames: {'setosa'  'versicolor'  'virginica'}
                       ScoreTransform: 'none'
                      NumObservations: 150
    HyperparameterOptimizationResults: [1x1 BayesianOptimization]
                    DistributionNames: {1x4 cell}
               DistributionParameters: {3x4 cell}
                               Kernel: {1x4 cell}
                              Support: {1x4 cell}
                                Width: [3x4 double]


  Properties, Methods

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

свернуть все

Выборочные данные, используемых для обучения модели, заданная как таблица. Каждая строка Tbl соответствует одному наблюдению, и каждый столбец соответствует одной переменной предиктора. Опционально Tbl может содержать один дополнительный столбец для переменной отклика. Многополюсные переменные и массивы ячеек, отличные от массивов ячеек векторов символов, не разрешены.

  • Если Tbl содержит переменную отклика, и необходимо использовать все оставшиеся переменные в Tbl в качестве предикторов, затем задайте переменную отклика при помощи ResponseVarName.

  • Если Tbl содержит переменную отклика, и необходимо использовать только подмножество остальных переменных в Tbl в качестве предикторов задайте формулу при помощи formula.

  • Если Tbl не содержит переменную отклика, затем задает переменную отклика при помощи Y. Длина переменной отклика и количество строк в Tbl должно быть равным.

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

Имя переменной отклика, заданное как имя переменной в Tbl.

Вы должны задать ResponseVarName как вектор символов или строковый скаляр. Для примера, если переменная отклика Y хранится как Tbl.Y, затем укажите его следующим 'Y'. В противном случае программное обеспечение обрабатывает все столбцы Tbl, включая Y, как предикторы при обучении модели.

Переменная отклика должна быть категориальными символьными или строковыми массивами; логический или числовой вектор; или массив ячеек из векторов символов. Если Y является символьным массивом, тогда каждый элемент переменной отклика должен соответствовать одной строке массива.

Хорошей практикой является определение порядка классов при помощи ClassNames аргумент имя-значение.

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

Объяснительная модель переменной отклика и подмножества переменных предиктора, заданная в виде вектора символов или строкового скаляра в форме 'Y~x1+x2+x3'. В этой форме Y представляет переменную отклика, и x1, x2, и x3 представляют переменные предиктора.

Чтобы задать подмножество переменных в Tbl в качестве предикторов для настройки модели используйте формулу. Если вы задаете формулу, то программное обеспечение не использует никаких переменных в Tbl которые не появляются в formula.

Имена переменных в формуле должны быть обоими именами переменных в Tbl (Tbl.Properties.VariableNames) и действительный MATLAB® идентификаторы. Можно проверить имена переменных в Tbl при помощи isvarname функция. Если имена переменных недопустимы, можно преобразовать их, используя matlab.lang.makeValidName функция.

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

Метки класса, для которых обучен наивный классификатор Байеса, заданные как категориальные символьные или строковые массивы, логический или числовой вектор или массив ячеек из векторов символов. Каждый элемент Y определяет членство класса в соответствующей строке X. Y поддерживает уровни классов K.

Если Y является символьный массив, тогда каждая строка должна соответствовать одной метке класса.

Длина Y и количество строк X должен быть эквивалентным.

Типы данных: categorical | char | string | logical | single | double | cell

Данные предиктора, заданные как числовая матрица.

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

Длина Y и количество строк X должен быть эквивалентным.

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

Примечание:

Программное обеспечение лечит NaN, пустой символьный вектор (''), пустая строка (""), <missing>, и <undefined> элементы как отсутствующие значения данных.

  • Если Y содержит отсутствующие значения, затем программа удаляет их и соответствующие строки X.

  • Если X содержит все строки, полностью составленные из отсутствующих значений, затем программа удаляет эти строки и соответствующие элементы Y.

  • Если X содержит отсутствующие значения, и вы задаете 'DistributionNames','mn', затем программное обеспечение удаляет эти строки X и соответствующие элементы Y.

  • Если предиктор не представлен в классе, то есть если все его значения NaN в пределах класса, затем программное обеспечение возвращает ошибку.

Удаление строк X и соответствующие элементы Y уменьшает эффективный размер выборки для обучения или перекрестной проверки.

Аргументы в виде пар имя-значение

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

Пример: 'DistributionNames','mn','Prior','uniform','KSWidth',0.5 указывает, что распределение данных является полиномиальным, предыдущие вероятности для всех классов равны, и ширина окна сглаживания ядра для всех классов 0.5 модулей.

Примечание

Вы не можете использовать какой-либо аргумент пары "имя-значение" перекрестной проверки наряду с 'OptimizeHyperparameters' аргумент пары "имя-значение". Можно изменить перекрестную валидацию для 'OptimizeHyperparameters' только при помощи 'HyperparameterOptimizationOptions' аргумент пары "имя-значение".

Наивные опции Байеса

свернуть все

Распределения данных fitcnb используется для моделирования данных, заданных как разделенная разделенными запятой парами, состоящая из 'DistributionNames' и вектор символов или строковый скаляр, строковые массивы или массив ячеек из векторов символов со значениями из этой таблицы.

ЗначениеОписание
'kernel'Оценка плотности сглаживания ядра.
'mn'Полиномиальное распределение. Если вы задаете mn, тогда все функции являются компонентами полиномиального распределения. Поэтому вы не можете включать 'mn' как элемент массива строковых массивов или массива ячеек из векторов символов. Для получения дополнительной информации смотрите Алгоритмы.
'mvmn'Многомерное полиномиальное распределение. Для получения дополнительной информации смотрите Алгоритмы.
'normal'Нормальное (Гауссово) распределение.

Если вы задаете вектор символов или строковый скаляр, то программное обеспечение моделирует все функции, использующие это распределение. Если вы задаете 1-байт- P строковые массивы или массив ячеек из векторов символов, то модели ПО характеризуются j использованием распределения в j элемента массива.

По умолчанию программное обеспечение устанавливает все предикторы, заданные как категориальные предикторы (используя CategoricalPredictors Аргумент пары "имя-значение") в 'mvmn'. В противном случае распределение по умолчанию 'normal'.

Необходимо указать, что по крайней мере один предиктор имеет распределение 'kernel' чтобы дополнительно задать Kernel, Support, или Width.

Пример: 'DistributionNames','mn'

Пример: 'DistributionNames',{'kernel','normal','kernel'}

Гладкий тип ядра, заданный как разделенная разделенными запятой парами, состоящая из 'Kernel' и вектор символов или строковый скаляр, строковые массивы или массив ячеек из векторов символов.

В этой таблице представлены доступные опции для настройки области плотности сглаживания ядра. Позвольте I {u} обозначить функцию индикатора.

ЗначениеЯдроФормула
'box'Коробка (униформа)

f(x)=0.5I{|x|1}

'epanechnikov'Епанечников

f(x)=0.75(1x2)I{|x|1}

'normal'Гауссовский

f(x)=12πexp(0.5x2)

'triangle'Треугольный

f(x)=(1|x|)I{|x|1}

Если вы задаете 1-байтовый P строковые массивы или массив ячеек, причем каждый элемент массива содержит любое значение в таблице, то программное обеспечение обучает классификатор с помощью более гладкого типа ядра в j элемента для j функций в X. Программа игнорирует элементы Kernel не соответствует предиктору, распределение которого 'kernel'.

Необходимо указать, что по крайней мере один предиктор имеет распределение 'kernel' чтобы дополнительно задать Kernel, Support, или Width.

Пример: 'Kernel',{'epanechnikov','normal'}

Поддержка плотности сглаживания ядра, заданная как разделенная разделенными запятой парами, состоящая из 'Support' и 'positive', 'unbounded', строковые массивы, массив ячеек или числовой вектор-строка. Программа применяет плотность сглаживания ядра к указанной области.

В этой таблице представлены доступные опции для настройки области плотности сглаживания ядра.

ЗначениеОписание
1 на 2 числовых векторы-строкиДля примера, [L,U], где L и U являются конечными нижней и верхней границами, соответственно, для поддержки плотности.
'positive'Поддержка плотности - все положительные действительные значения.
'unbounded'Поддержка плотности является всеми реальными значениями.

Если вы задаете 1-байтовый P строковые массивы или массив ячеек, причем каждый элемент в строковом массиве содержит любое текстовое значение в таблице и каждый элемент в массиве ячеек, содержащий любое значение в таблице, то программное обеспечение обучает классификатор с помощью поддержки ядра в j элемента для j функций в X. Программа игнорирует элементы Kernel не соответствует предиктору, распределение которого 'kernel'.

Необходимо указать, что по крайней мере один предиктор имеет распределение 'kernel' чтобы дополнительно задать Kernel, Support, или Width.

Пример: 'KSSupport',{[-10,20],'unbounded'}

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

Ширина окна сглаживания ядра, заданная как разделенная разделенными запятой парами, состоящая из 'Width' и матрица числовых значений, числовых векторов-столбцов, числовых векторов-строк или скаляров.

Предположим, что существует K уровня классов и P предикторов. В этой таблице представлены доступные опции для настройки ширины окна сглаживания ядра.

ЗначениеОписание
K -by - P матрица числовых значенийЭлемент (k,j) задает ширину для j предиктора в классе k.
K численный вектор -by-1Element k задает ширину для всех предикторов в k классов.
1-байт- P числовой вектор-строкаElement j задает ширину на всех уровнях классов для j предиктора.
скалярЗадает пропускную способность для всех функций во всех классах.

По умолчанию программа автоматически выбирает ширину по умолчанию для каждой комбинации предиктора и класса с помощью значения, оптимального для Гауссова распределения. Если вы задаете Width и содержит NaNs, затем программа выбирает ширины для элементов, содержащих NaNс.

Необходимо указать, что по крайней мере один предиктор имеет распределение 'kernel' чтобы дополнительно задать Kernel, Support, или Width.

Пример: 'Width',[NaN NaN]

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

Опции перекрестной валидации

свернуть все

Флаг перекрестной проверки, заданный как разделенная разделенными запятой парами, состоящая из 'Crossval' и 'on' или 'off'.

Если вы задаете 'on'затем программное обеспечение реализует 10-кратную перекрестную валидацию.

Чтобы переопределить этот параметр перекрестной проверки, используйте один из следующих аргументов пары "имя-значение": CVPartition, Holdout, KFold, или Leaveout. Чтобы создать перекрестно проверенную модель, можно использовать один аргумент пары "имя-значение" перекрестной валидации только за раз.

Другой способ - выполнить перекрестную проверку позже путем передачи Mdl кому crossval.

Пример: 'CrossVal','on'

Раздел перекрестной проверки, заданный как cvpartition объект раздела, созданный cvpartition. Объект раздела задает тип перекрестной валидации и индексацию для наборов обучения и валидации.

Чтобы создать перекрестно проверенную модель, можно задать только один из следующих четырех аргументов в виде имя-значение: CVPartition, Holdout, KFold, или Leaveout.

Пример: Предположим, что вы создаете случайный разбиение для 5-кратной перекрестной валидации при 500 наблюдениях при помощи cvp = cvpartition(500,'KFold',5). Затем можно задать перекрестно проверенную модель при помощи 'CVPartition',cvp.

Доля данных, используемых для валидации удержания, заданная в виде скалярного значения в области значений (0,1). Если вы задаете 'Holdout',p, затем программное обеспечение завершает следующие шаги:

  1. Случайный выбор и резервирование p*100% данных в качестве данных валидации и train модели с использованием остальных данных.

  2. Сохраните компактную, обученную модель в Trained свойство перекрестно проверенной модели.

Чтобы создать перекрестно проверенную модель, можно задать только один из следующих четырех аргументов в виде имя-значение: CVPartition, Holdout, KFold, или Leaveout.

Пример: 'Holdout',0.1

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

Количество складок для использования в перекрестно проверенной модели, заданное как положительное целое значение, больше 1. Если вы задаете 'KFold',k, затем программное обеспечение завершает следующие шаги:

  1. Случайным образом разделите данные на k наборы.

  2. Для каждого набора зарезервируйте набор как данные валидации и обучите модель, используя другой k - 1 комплект.

  3. Сохраните k компактные, обученные модели в k-by-1 вектор камеры в Trained свойство перекрестно проверенной модели.

Чтобы создать перекрестно проверенную модель, можно задать только один из следующих четырех аргументов в виде имя-значение: CVPartition, Holdout, KFold, или Leaveout.

Пример: 'KFold',5

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

Выходной флаг перекрестной проверки, заданный как 'on' или 'off'. Если вы задаете 'Leaveout','on', затем для каждого из n наблюдений (где n - количество наблюдений, исключая недостающие наблюдения, заданное в NumObservations свойство модели), программное обеспечение завершает следующие шаги:

  1. Зарезервируйте одно наблюдение как данные валидации и обучите модель с помощью другого n - 1 наблюдений.

  2. Сохраните n компактные обученные модели в векторе камеры n-на-1 в Trained свойство перекрестно проверенной модели.

Чтобы создать перекрестно проверенную модель, можно задать только один из следующих четырех аргументов в виде имя-значение: CVPartition, Holdout, KFold, или Leaveout.

Пример: 'Leaveout','on'

Другие опции классификации

свернуть все

Категориальный список предикторов, заданный как одно из значений в этой таблице.

ЗначениеОписание
Вектор положительных целых чисел

Каждая запись в векторе является индексом значением, соответствующим столбцу данных предиктора, который содержит категориальную переменную. Значения индекса находятся между 1 и p, где p - количество предикторов, используемых для обучения модели.

Если fitcnb использует подмножество входа переменных в качестве предикторов, затем функция индексирует предикторы, используя только подмножество. The 'CategoricalPredictors' значения не подсчитывают переменную отклика, переменную веса наблюдения и любые другие переменные, которые функция не использует.

Логический вектор

A true запись означает, что соответствующий столбец данных предиктора является категориальной переменной. Длина вектора p.

Матрица символовКаждая строка матрицы является именем переменной. Имена должны совпадать с записями в PredictorNames. Дополните имена дополнительными пробелами, чтобы каждая строка матрицы символов имела одинаковую длину.
Строковые массивы или массив ячеек векторов символовКаждый элемент массива является именем переменной. Имена должны совпадать с записями в PredictorNames.
'all'Все предикторы категоричны.

По умолчанию, если данные предиктора находятся в таблице (Tbl), fitcnb принимает, что переменная категориальна, если это логический вектор, категориальный вектор, символьный массив, строковые массивы или массив ячеек из векторов символов. Если данные предиктора являются матрицей (X), fitcnb принимает, что все предикторы непрерывны. Чтобы идентифицировать любые другие предикторы как категориальные предикторы, задайте их с помощью 'CategoricalPredictors' аргумент имя-значение.

Для идентифицированных категориальных предикторов, fitcnb использует многомерные полиномиальные распределения. Для получения дополнительной информации смотрите DistributionNames и Алгоритмы.

Пример: 'CategoricalPredictors','all'

Типы данных: single | double | logical | char | string | cell

Имена классов, используемых для обучения, заданные как категориальные символьные или строковые массивы; логический или числовой вектор; или массив ячеек из векторов символов. ClassNames должен иметь тот совпадающий тип данных, что и переменная отклика в Tbl или Y.

Если ClassNames является символьный массив, тогда каждый элемент должен соответствовать одной строке массива.

Использование ClassNames кому:

  • Задайте порядок классов во время обучения.

  • Задайте порядок любой размерности входного или выходного аргумента, которая соответствует порядку классов. Для примера используйте ClassNames для определения порядка размерностей Cost или порядок столбцов классификационных оценок, возвращаемых predict.

  • Выберите подмножество классов для обучения. Например, предположим, что набор всех различных имен классов в Y является {'a','b','c'}. Чтобы обучить модель с помощью наблюдений из классов 'a' и 'c' только, задайте 'ClassNames',{'a','c'}.

Значение по умолчанию для ClassNames - набор всех различных имен классов в переменной отклика в Tbl или Y.

Пример: 'ClassNames',{'b','g'}

Типы данных: categorical | char | string | logical | single | double | cell

Стоимость неправильной классификации точки, заданная как разделенная разделенными запятой парами, состоящая из 'Cost' и одно из следующих:

  • Квадратная матрица, где Cost(i,j) - стоимость классификации точки в класс j если его класс true i (т.е. строки соответствуют истинному классу, а столбцы - предсказанному классу). Чтобы задать порядок классов для соответствующих строк и столбцов Cost, дополнительно задайте ClassNames аргумент пары "имя-значение".

  • Структурные S имеющий два поля: S.ClassNames содержащие имена групп как переменные того же типа, что и Y, и S.ClassificationCosts содержащая матрицу затрат.

Значение по умолчанию является Cost(i,j)=1 если i~=j, и Cost(i,j)=0 если i=j.

Пример: 'Cost',struct('ClassNames',{{'b','g'}},'ClassificationCosts',[0 0.5; 1 0])

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

Имена переменных предиктора, заданные как строковые массивы уникальных имен или массив ячеек из уникальных векторов символов. Функциональность PredictorNames зависит от способа предоставления обучающих данных.

  • Если вы поставляете X и Y, тогда можно использовать PredictorNames для назначения имен переменным предиктора в X.

    • Порядок имен в PredictorNames должен соответствовать порядку столбцов X. То есть PredictorNames{1} - имя X(:,1), PredictorNames{2} - имя X(:,2)и так далее. Кроме того, size(X,2) и numel(PredictorNames) должно быть равным.

    • По умолчанию PredictorNames является {'x1','x2',...}.

  • Если вы поставляете Tbl, тогда можно использовать PredictorNames выбрать, какие переменные предиктора использовать в обучении. То есть, fitcnb использует только переменные предиктора в PredictorNames и переменной отклика во время обучения.

    • PredictorNames должен быть подмножеством Tbl.Properties.VariableNames и не может включать имя переменной отклика.

    • По умолчанию PredictorNames содержит имена всех переменных предиктора.

    • Хорошей практикой является определение предикторов для обучения с использованием любой из 'PredictorNames' или formula, но не то и другое.

Пример: 'PredictorNames',{'SepalLength','SepalWidth','PetalLength','PetalWidth'}

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

Предыдущие вероятности для каждого класса, заданные как разделенная разделенными запятой парами, состоящая из 'Prior' и значение в этой таблице.

ЗначениеОписание
'empirical'Предшествующие вероятности классов являются относительными частотами классов в Y.
'uniform'Все предыдущие вероятности классов равны 1/ K, где K - количество классов.
числовой векторКаждый элемент является классом предыдущей вероятности. Упорядочивайте элементы согласно Mdl.ClassNames или укажите порядок с помощью ClassNames аргумент пары "имя-значение". Программное обеспечение нормализует элементы так, что они суммируются с 1.
структура

Структурный S с двумя полями:

  • S.ClassNames содержит имена классов как переменная того же типа, что и Y.

  • S.ClassProbs содержит вектор соответствующих априорных вероятностей. Программное обеспечение нормализует элементы так, что они суммируются с 1.

Если вы задаете значения для обоих Weights и Priorвеса перенормированы, чтобы суммировать значение предшествующей вероятности в соответствующем классе.

Пример: 'Prior','uniform'

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

Имя переменной отклика, заданное как вектор символов или строковый скаляр.

  • Если вы поставляете Y, тогда можно использовать 'ResponseName' чтобы задать имя для переменной отклика.

  • Если вы поставляете ResponseVarName или formula, тогда вы не можете использовать 'ResponseName'.

Пример: 'ResponseName','response'

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

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

В этой таблице результирующие векторы символов и строковые скаляры.

ЗначениеОписание
'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'2 x – 1
'symmetricismax'Устанавливает счет для класса с самым большим счетом равным 1 и устанавливает счета для всех других классов равной -1
'symmetriclogit'2/(1 + ex) – 1

Для функции MATLAB или функции, которую вы задаете, используйте указатель на функцию для преобразования счета. Указатель на функцию должен принять матрицу (исходные счета) и вернуть матрицу того же размера (преобразованные счета).

Пример: 'ScoreTransform','logit'

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

Веса наблюдений, заданные как разделенная разделенными запятой парами, состоящая из 'Weights' и числовой вектор положительных значений или имени переменной в Tbl. Программа взвешивает наблюдения в каждой строке X или Tbl с соответствующим значением в Weights. Размер Weights должно равняться количеству строк X или Tbl.

Если вы задаете входные данные как таблицу Tbl, затем Weights может быть именем переменной в Tbl который содержит числовой вектор. В этом случае необходимо задать Weights как вектор символов или строковый скаляр. Для примера, если вектор весов W хранится как Tbl.W, затем укажите его следующим 'W'. В противном случае программное обеспечение обрабатывает все столбцы Tbl, включая W, как предикторы или реакция при обучении модели.

Программное обеспечение нормализует Weights суммировать до значения предшествующей вероятности в соответствующем классе.

По умолчанию Weights это таковые (n,1), где n количество наблюдений в X или Tbl.

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

Гипероптимизация параметров управления

свернуть все

Оптимизируемые параметры, заданные как разделенная разделенными запятой парами, состоящая из 'OptimizeHyperparameters' и одно из следующих:

  • 'none' - Не оптимизировать.

  • 'auto' - Использовать {'DistributionNames','Width'}.

  • 'all' - Оптимизируйте все подходящие параметры.

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

  • Вектор optimizableVariable объекты, как правило, выходные данные hyperparameters.

Оптимизация пытается минимизировать потери перекрестной валидации (ошибка) для fitcnb путем изменения параметров. Для получения информации о потерях при перекрестной проверке (хотя и в другом контексте), смотрите Классификационные потери. Чтобы контролировать тип перекрестной валидации и другие аспекты оптимизации, используйте HyperparameterOptimizationOptions Пара "имя-значение".

Примечание

'OptimizeHyperparameters' значения переопределяют все значения, которые вы устанавливаете, используя другие аргументы пары "имя-значение". Для примера установка 'OptimizeHyperparameters' на 'auto' вызывает 'auto' значения для применения.

Подходящие параметры для fitcnb являются:

  • DistributionNamesfitcnb поиск среди 'normal' и 'kernel'.

  • Widthfitcnb поиск среди вещественных значений, по умолчанию логарифмический в области значений [MinPredictorDiff/4,max(MaxPredictorRange,MinPredictorDiff)].

  • Kernelfitcnb поиск среди 'normal', 'box', 'epanechnikov', и 'triangle'.

Установите параметры nondefault путем передачи вектора optimizableVariable объекты, которые имеют значения nondefault. Для примера,

load fisheriris
params = hyperparameters('fitcnb',meas,species);
params(2).Range = [1e-2,1e2];

Передайте params как значение OptimizeHyperparameters.

По умолчанию итеративное отображение появляется в командной строке, и графики появляются согласно количеству гиперпараметров в оптимизации. Для оптимизации и графиков целевой функцией является журнал ( 1 + потери перекрестной валидации) для регрессии и коэффициент неправильной классификации для классификации. Чтобы управлять итеративным отображением, установите Verbose поле 'HyperparameterOptimizationOptions' аргумент пары "имя-значение". Чтобы управлять графиками, установите ShowPlots поле 'HyperparameterOptimizationOptions' аргумент пары "имя-значение".

Для получения примера смотрите Оптимизацию Наивного Классификатора Байеса.

Пример: 'auto'

Опции оптимизации, заданные как разделенная разделенными запятой парами, состоящая из 'HyperparameterOptimizationOptions' и структуру. Этот аргумент изменяет эффект OptimizeHyperparameters аргумент пары "имя-значение". Все поля в структуре являются необязательными.

Имя поляЗначенияДефолт
Optimizer
  • 'bayesopt' - Используйте байесовскую оптимизацию. Внутренне эта настройка вызывает bayesopt.

  • 'gridsearch' - Используйте поиск по сетке с NumGridDivisions значений на размерность.

  • 'randomsearch' - Поиск наугад среди MaxObjectiveEvaluations точки.

'gridsearch' ищет в случайном порядке, используя равномерную выборку без замены от сетки. После оптимизации можно получить таблицу в порядке сетки при помощи команды sortrows(Mdl.HyperparameterOptimizationResults).

'bayesopt'
AcquisitionFunctionName

  • 'expected-improvement-per-second-plus'

  • 'expected-improvement'

  • 'expected-improvement-plus'

  • 'expected-improvement-per-second'

  • 'lower-confidence-bound'

  • 'probability-of-improvement'

Функции сбора данных, имена которых включают per-second не дают воспроизводимых результатов, потому что оптимизация зависит от времени выполнения целевой функции. Функции сбора данных, имена которых включают plus изменять свое поведение при чрезмерной эксплуатации области. Для получения дополнительной информации см. Типы функций приобретения.

'expected-improvement-per-second-plus'
MaxObjectiveEvaluationsМаксимальное количество вычислений целевой функции.30 для 'bayesopt' или 'randomsearch', и вся сетка для 'gridsearch'
MaxTime

Временной предел, заданный как положительный действительный. Предел времени в секундах, что измеряется tic и toc. Время выполнения может превысить MaxTime потому что MaxTime не прерывает вычисления функции.

Inf
NumGridDivisionsДля 'gridsearch', количество значений в каждой размерности. Значение может быть вектором положительных целых чисел, дающих количество значений для каждой размерности, или скаляром, который применяется ко всем размерностям. Это поле игнорируется для категориальных переменных.10
ShowPlotsЛогическое значение, указывающее, показывать ли графики. Если true, это поле строит график наилучшего значения целевой функции относительно числа итерации. Если существует один или два параметра оптимизации и если Optimizer является 'bayesopt', затем ShowPlots также строит график модели целевой функции относительно параметров.true
SaveIntermediateResultsЛогическое значение, указывающее, сохранять ли результаты при Optimizer является 'bayesopt'. Если true, это поле перезаписывает переменную рабочей области с именем 'BayesoptResults' при каждой итерации. Переменная является BayesianOptimization объект.false
Verbose

Отображение в командной строке.

  • 0 - Нет итерационного отображения

  • 1 - Итеративное отображение

  • 2 - Итеративное отображение с дополнительной информацией

Для получения дополнительной информации смотрите bayesopt Verbose аргумент пары "имя-значение".

1
UseParallelЛогическое значение, указывающее, запускать ли байесовскую оптимизацию параллельно, что требует Parallel Computing Toolbox™. Из-за непродуктивности параллельной синхронизации параллельная байесовская оптимизация не обязательно приводит к воспроизводимым результатам. Для получения дополнительной информации см. «Параллельная байесовская оптимизация».false
Repartition

Логическое значение, указывающее, следует ли повторять перекрестную валидацию при каждой итерации. Если falseОптимизатор использует один раздел для оптимизации.

true обычно дает наиболее устойчивые результаты, потому что эта настройка учитывает шум разбиения. Однако для хороших результатов true требует, по крайней мере, в два раза больше вычислений функции.

false
Используйте не более одного из следующих трех имен полей.
CVPartitionA cvpartition объект, созданный cvpartition.'Kfold',5 если вы не задаете какое-либо поле перекрестной проверки
HoldoutСкаляр в области значений (0,1) представляющий фракцию удержания.
KfoldЦелое число, больше 1.

Пример: 'HyperparameterOptimizationOptions',struct('MaxObjectiveEvaluations',60)

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

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

свернуть все

Обученная наивная модель классификации Байеса, возвращенная как ClassificationNaiveBayes объект модели или ClassificationPartitionedModel перекрестно проверенный объект модели.

Если вы задаете любой из аргументов пары "имя-значение" KFold, Holdout, CrossVal, или CVPartition, затем Mdl является ClassificationPartitionedModel перекрестно проверенный объект модели. В противном случае Mdl является ClassificationNaiveBayes объект модели.

Ссылка на свойства Mdl, используйте запись через точку. Для примера для доступа к предполагаемым параметрам распределения введите Mdl.DistributionParameters.

Подробнее о

свернуть все

Модель Bag-of-Tokens

В модели bag-of-tokens значение предиктора j является неотрицательным числом вхождений лексемы, j в наблюдении. Количество категорий (интервалов) в полиномиальной модели является количеством различных лексем (количество предикторов).

Наивный Байес

Naive Bayes является алгоритмом классификации, который применяет оценку плотности к данным.

Алгоритм использует теорему Байеса и (наивно) принимает, что предикторы являются условно независимыми, учитывая класс. Несмотря на то, что предположение обычно нарушается на практике, наивные классификаторы Байеса, как правило, дают апостериорные распределения, которые устойчивы к смещенным оценкам плотности классов, особенно там, где апостериорное значение равно 0,5 (контур решения) [1].

Наивные классификаторы Байеса присваивают наблюдения наиболее вероятному классу (другими словами, maximum a posteriori правилу принятия решений). Явно алгоритм делает следующие шаги:

  1. Оцените плотности предикторов в каждом классе.

  2. Моделируйте апостериорные вероятности согласно правилу Байеса. То есть для всех k = 1,..., K,

    P^(Y=k|X1,..,XP)=π(Y=k)j=1PP(Xj|Y=k)k=1Kπ(Y=k)j=1PP(Xj|Y=k),

    где:

    • Y - случайная переменная, соответствующая индексу класса наблюдения.

    • X 1,..., XP являются случайными предикторами наблюдения.

    • π(Y=k) - предшествующая вероятность того, что индекс класса k.

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

Если предикторы составляют полиномиальное распределение, то апостериорная вероятностьP^(Y=k|X1,..,XP)π(Y=k)Pmn(X1,...,XP|Y=k), где Pmn(X1,...,XP|Y=k) - функция масс вероятностей полиномиального распределения.

Совет

  • Для классификации основанных на отсчете данных, таких как модель bag-of-tokens, используйте полиномиальное распределение (например, set 'DistributionNames','mn').

  • После обучения модели можно сгенерировать код C/C + +, который предсказывает метки для новых данных. Для генерации кода C/C + + требуется MATLAB Coder™. Для получения дополнительной информации смотрите Введение в генерацию кода .

Алгоритмы

  • Если вы задаете 'DistributionNames','mn' при обучении Mdl использование fitcnb, затем программное обеспечение подходит для полиномиального распределения с помощью модели bag-of-tokens. Программа сохраняет вероятность того, что лексема j появляется в классах k в свойстве DistributionParameters {k, j}. Используя сглаживание добавки [2], предполагаемая вероятность является

    P(token j|класс k)=1+cj|kP+ck,

    где:

    • cj|k=nki:yiclass kxijwii:yiclass kwi, которое является взвешенным количеством вхождений лексемы j в классе k.

    • nk - количество наблюдений в k классов.

    • wi - вес для i наблюдений. Программа нормирует веса внутри класса, так что они суммируются с предшествующей вероятностью для этого класса.

    • ck=j=1Pcj|k, это общее взвешенное количество вхождений всех лексем в k классов.

  • Если вы задаете 'DistributionNames','mvmn' при обучении Mdl использование fitcnb, затем:

    1. Для каждого предиктора программное обеспечение собирает список уникальных уровней, хранит отсортированный список в CategoricalLevels, и рассматривает каждый уровень как интервал. Каждая комбинация предиктор/класс является отдельной, независимой полиномиальной случайной переменной.

    2. Для предиктора j в k классов программное обеспечение подсчитывает образцы каждого категориального уровня с помощью списка, хранящегося в CategoricalLevels {j}.

    3. Программа сохраняет вероятность того, что предиктор j, в классах k, имеет L уровня в свойстве DistributionParameters {k, j}, для всех уровней в CategoricalLevels {j}. Используя сглаживание добавки [2], предполагаемая вероятность является

      P(predictor j=L|class k)=1+mj|k(L)mj+mk,

      где:

      • mj|k(L)=nki:yi class kI{xij=L}wii:yi class kwi, которое является взвешенным количеством наблюдений, для которых j предиктора равен L в классе k.

      • nk - количество наблюдений в k классов.

      • I{xij=L}=1 если xij = L, в противном случае 0.

      • wi - вес для i наблюдений. Программа нормирует веса внутри класса, так что они суммируются с предшествующей вероятностью для этого класса.

      • mj - количество различных уровней в j предиктора.

      • mk - взвешенное количество наблюдений в классе k.

Ссылки

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

[2] Мэннинг, К. Д., П. Рагхаван, и М. Шютце. Введение в информационный поиск, NY: Cambridge University Press, 2008.

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

Введенный в R2014b