fitcnb

Обучите мультикласс наивная модель Bayes

Синтаксис

Mdl = fitcnb(Tbl,ResponseVarName)
Mdl = fitcnb(Tbl,formula)
Mdl = fitcnb(Tbl,Y)
Mdl = fitcnb(X,Y)
Mdl = fitcnb(___,Name,Value)

Описание

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

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

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

пример

Mdl = fitcnb(X,Y) возвращает мультикласс наивная модель Bayes (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 = @(x1,x2)reshape(mvnpdf([x1(:),x2(:)],Mu(j,:),Sigma(:,:,j)),size(x1));
    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

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

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

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

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

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

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

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

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 = 3x4 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 является 3.4280 и 0.3791, соответственно.

Оцените матрицу беспорядка для Mdl1.

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

Элемент (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);

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

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

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. Можно задать опции для наивных двоичных учеников Бейеса, использующих те же аргументы пары "имя-значение" что касается fitcnb.

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

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

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

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

Этот пример иллюстрирует классификацию с помощью наивного Бейеса и предикторов многочлена.

Создайте данные тренировки

Предположим, что вы наблюдали 1 000 электронных писем и классифицировали их как спам или не спам. Сделайте это путем случайного присвоения-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 путем оценки misclassification ошибки.

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

misclassification уровень в выборке составляет 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

misclassification уровень из выборки составляет 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.79894 |    0.053333 |    0.053333 |       normal |            - |
|    2 | Best   |    0.046667 |     0.70028 |    0.046667 |    0.049998 |       kernel |      0.11903 |
|    3 | Accept |    0.053333 |       0.193 |    0.046667 |    0.046667 |       normal |            - |
|    4 | Accept |    0.086667 |     0.51084 |    0.046667 |    0.046668 |       kernel |       2.4506 |
|    5 | Accept |    0.046667 |     0.40222 |    0.046667 |    0.046663 |       kernel |      0.10449 |
|    6 | Accept |    0.073333 |     0.57578 |    0.046667 |    0.046665 |       kernel |     0.025044 |
|    7 | Accept |    0.046667 |     0.40747 |    0.046667 |    0.046655 |       kernel |      0.27647 |
|    8 | Accept |    0.046667 |     0.36691 |    0.046667 |    0.046647 |       kernel |       0.2031 |
|    9 | Accept |        0.06 |     0.38677 |    0.046667 |    0.046658 |       kernel |      0.44271 |
|   10 | Accept |    0.046667 |      0.3974 |    0.046667 |    0.046618 |       kernel |       0.2412 |
|   11 | Accept |    0.046667 |     0.35605 |    0.046667 |    0.046619 |       kernel |     0.071925 |
|   12 | Accept |    0.046667 |     0.37162 |    0.046667 |    0.046612 |       kernel |     0.083459 |
|   13 | Accept |    0.046667 |     0.36724 |    0.046667 |    0.046603 |       kernel |      0.15661 |
|   14 | Accept |    0.046667 |     0.34634 |    0.046667 |    0.046607 |       kernel |      0.25613 |
|   15 | Accept |    0.046667 |     0.33102 |    0.046667 |    0.046606 |       kernel |      0.17776 |
|   16 | Accept |    0.046667 |     0.38409 |    0.046667 |    0.046606 |       kernel |      0.13632 |
|   17 | Accept |    0.046667 |     0.32028 |    0.046667 |    0.046606 |       kernel |     0.077598 |
|   18 | Accept |    0.046667 |     0.34258 |    0.046667 |    0.046626 |       kernel |      0.25646 |
|   19 | Accept |    0.046667 |     0.40328 |    0.046667 |    0.046626 |       kernel |     0.093584 |
|   20 | Accept |    0.046667 |     0.35038 |    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.37343 |    0.046667 |    0.046627 |       kernel |     0.066532 |
|   22 | Accept |    0.093333 |     0.40511 |    0.046667 |    0.046618 |       kernel |       5.8968 |
|   23 | Accept |    0.046667 |     0.33341 |    0.046667 |    0.046619 |       kernel |     0.067045 |
|   24 | Accept |    0.046667 |     0.31971 |    0.046667 |     0.04663 |       kernel |      0.25281 |
|   25 | Accept |    0.046667 |       0.342 |    0.046667 |     0.04663 |       kernel |       0.1473 |
|   26 | Accept |    0.046667 |      0.3383 |    0.046667 |    0.046631 |       kernel |      0.17211 |
|   27 | Accept |    0.046667 |     0.32951 |    0.046667 |    0.046631 |       kernel |      0.12457 |
|   28 | Accept |    0.046667 |     0.31916 |    0.046667 |    0.046631 |       kernel |     0.066659 |
|   29 | Accept |    0.046667 |     0.34628 |    0.046667 |    0.046631 |       kernel |       0.1081 |
|   30 | Accept |        0.08 |     0.31711 |    0.046667 |    0.046628 |       kernel |       1.1048 |

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

Best observed feasible point:
    DistributionNames     Width 
    _________________    _______

         kernel          0.11903

Observed objective function value = 0.046667
Estimated objective function value = 0.046628
Function evaluation time = 0.70028

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

         kernel          0.25613

Estimated objective function value = 0.046628
Estimated function evaluation time = 0.37792
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.Properties.VariableNames).

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

Типы данных: 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 должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: 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-1 числовой вектор-столбецЭлемент k задает ширину для всех предикторов в классе k.
1 P числовым вектором - строкойЭлемент j задает ширину на всех уровнях класса для предиктора j.
скалярЗадает пропускную способность для всех функций во всех классах.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

свернуть все

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

ЗначениеОписание
Вектор положительных целых чиселЗапись в векторе является индексным значением, соответствующим столбцу данных о предикторе (X или Tbl), который содержит категориальную переменную.
Логический векторЗапись true означает, что соответствующий столбец данных о предикторе (X или Tbl) является категориальной переменной.
Символьная матрицаКаждая строка матрицы является именем переменной прогноза. Имена должны совпадать с записями в PredictorNames. Заполните имена дополнительными пробелами, таким образом, каждая строка символьной матрицы имеет ту же длину.
Массив строк или массив ячеек из символьных векторовКаждый элемент в массиве является именем переменной прогноза. Имена должны совпадать с записями в PredictorNames.
всеВсе предикторы являются категориальными.

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

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

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

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

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

Используйте ClassNames для:

  • Закажите классы во время обучения.

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

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

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

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

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

Стоимость misclassification точки, заданной как пара, разделенная запятой, состоящая из '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' и массив строк уникальных имен или массив ячеек уникальных векторов символов. Функциональность '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

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

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

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

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

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

Выиграйте преобразование, заданное как пара, разделенная запятой, состоящая из 'ScoreTransform' и вектора символов, представьте в виде строки скаляр или указатель на функцию.

Эта таблица суммирует доступные векторы символов и скаляры строки.

ЗначениеОписание
'doublelogit'1/(1 + e –2x)
'invlogit'журнал (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'}.

  • все Оптимизируйте все имеющие право параметры.

  • Массив строк или массив ячеек имеющих право названий параметра.

  • Вектор объектов optimizableVariable, обычно вывод hyperparameters.

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

Примечание

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

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

  • DistributionNamesfitcnb ищет среди 'normal' и 'kernel'.

  • Width fitcnb ищет среди действительных значений, по умолчанию масштабируемых журналом в области значений [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.

По умолчанию итеративное отображение появляется в командной строке, и графики появляются согласно количеству гиперпараметров в оптимизации. Для оптимизации и графиков, целевая функция является журналом (1 + потеря перекрестной проверки) для регрессии и misclassification уровня для классификации. Чтобы управлять итеративным отображением, установите поле 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
Используйте не больше, чем одни из следующих трех имен полей.
CVPartitionОбъект 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 в этом наблюдении. Количество категорий (интервалы) в этой модели многочлена является количеством отличных лексем, то есть, количеством предикторов.

Наивный байесов

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) функция вероятностной меры распределения многочлена.

Советы

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

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

Алгоритмы

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

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

    где:

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

      где:

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

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

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

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

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

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

Ссылки

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

[2] Укомплектование людьми, C. D. П. Рэгэвэн и М. Шюц. Введение в Информэйшн-Ретривэл, Нью-Йорк: Издательство Кембриджского университета, 2008.

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

Введенный в R2014b