exponenta event banner

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 соответствует числовому вектору, содержащему среднее и стандартное отклонение каждого распределения, например, среднее и стандартное отклонение для ширины чашелистиков сетозы радужной оболочки равно 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-кратной перекрестной проверки. Рекомендуется указывать порядок классов.

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

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

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

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

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

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

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.

Для воспроизводимости задайте случайное начальное число и используйте '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-by-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 (1 x2) I{|x|≤1}

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

f (x) = 12.dexp (0.5x2)

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

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

Если указан 1-by-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-by-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-1 числовой вектор столбцаЭлемент k задает ширину для всех предикторов в классе k.
1-by-P числовой вектор строкиЭлемент j задает ширину всех уровней класса для предиктора j.
скалярОпределяет пропускную способность для всех функций во всех классах.

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

Необходимо указать, что по крайней мере один предиктор имеет распределение '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.

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

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

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

  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-by-1 в Trained свойства перекрестной проверенной модели.

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

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

Другие варианты классификации

свернуть все

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

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

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

Если fitcnb использует подмножество входных переменных в качестве предикторов, затем функция индексирует предикторы, используя только подмножество. '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 если его истинный класс 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'log (x/( 1 - x))
'ismax'Устанавливает балл для класса с наибольшим баллом в 1 и устанавливает балл для всех остальных классов в 0
'logit'1/( 1 + e-x)
'none' или 'identity'x (без преобразования)
'sign'-1 для x < 0
0 для x = 0
1 для x > 0
'symmetric'2x – 1
'symmetricismax'Устанавливает балл для класса с наибольшим баллом в 1 и устанавливает балл для всех остальных классов в -1
'symmetriclogit'2/( 1 + e-x) - 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 является ones(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'.

Установка параметров, не используемых по умолчанию, путем передачи вектора optimizableVariable объекты, не имеющие значений по умолчанию. Например,

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

Проход params как значение OptimizeHyperparameters.

По умолчанию итеративное отображение отображается в командной строке, а графики отображаются в соответствии с количеством гиперпараметров в оптимизации. Для оптимизации и графиков целевой функцией является log ( 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Логическое значение, указывающее, выполнять ли байесовскую оптимизацию параллельно, что требует 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.

Подробнее

свернуть все

Модель мешков с маркерами

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

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

Наивный Байес - это алгоритм классификации, который применяет оценку плотности к данным.

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

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

  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 - случайная величина, соответствующая индексу класса наблюдения.

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

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

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

Если предсказатели составляют multinomial распределение, то следующий probabilityP^ (Y=k'X1., XP) π (Y=k) Pmn (X1..., XP'Y=k), где Pmn (X1..., XP'Y=k) является функцией массы вероятности multinomial распределения.

Совет

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

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

Алгоритмы

  • При указании 'DistributionNames','mn' при обучении Mdl использование fitcnb, то программное обеспечение подходит для полиномиального распределения с использованием модели мешков токенов. Программа сохраняет вероятность того, что маркер j появляется в классе k в свойстве DistributionParameters{k,j}. При использовании аддитивного сглаживания [2] оценочная вероятность равна

    P ( token  j 'class k) = 1 + cj' kP + ck,

    где:

    • cj'k=nk∑i:yi∈class kxijwi∑i:yi∈class kwi, который является взвешенным числом вхождений маркера j в классе k.

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

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

    • 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 ( предиктор j =  L 'класс k) = 1 + mj' k (L) mj + mk,

      где:

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

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

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

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

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

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

Ссылки

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

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

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

Представлен в R2014b