fitcnb

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

Описание

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 = @(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

Можно изменить распределение по умолчанию с помощью аргумента пары "имя-значение" '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=3×4 cell array
    {2x1 double}    {2x1 double}    {2x1 double}    {2x1 double}
    {2x1 double}    {2x1 double}    {2x1 double}    {2x1 double}
    {2x1 double}    {2x1 double}    {2x1 double}    {2x1 double}

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

    3.4280
    0.3791

По умолчанию, модели ПО распределение предиктора в каждом классе как Гауссово с некоторым средним и стандартным отклонением. Существует четыре предиктора и три уровня класса. Каждая ячейка в Mdl1.DistributionParameters соответствует числовому вектору, содержащему среднее и стандартное отклонение каждого распределения, например, средним и стандартным отклонением для ирисовых ширин чашелистика setosa является 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.46494 |    0.053333 |    0.053333 |       normal |            - |
|    2 | Best   |    0.046667 |     0.64615 |    0.046667 |    0.049998 |       kernel |      0.11903 |
|    3 | Accept |    0.053333 |      0.1399 |    0.046667 |    0.046667 |       normal |            - |
|    4 | Accept |    0.086667 |     0.35011 |    0.046667 |    0.046668 |       kernel |       2.4506 |
|    5 | Accept |    0.046667 |     0.37029 |    0.046667 |    0.046663 |       kernel |      0.10449 |
|    6 | Accept |    0.073333 |     0.31875 |    0.046667 |    0.046665 |       kernel |     0.025044 |
|    7 | Accept |    0.046667 |      0.3392 |    0.046667 |    0.046655 |       kernel |      0.27647 |
|    8 | Accept |    0.046667 |     0.34044 |    0.046667 |    0.046647 |       kernel |       0.2031 |
|    9 | Accept |        0.06 |     0.35567 |    0.046667 |    0.046658 |       kernel |      0.44271 |
|   10 | Accept |    0.046667 |     0.37844 |    0.046667 |    0.046618 |       kernel |       0.2412 |
|   11 | Accept |    0.046667 |      0.3414 |    0.046667 |    0.046619 |       kernel |     0.071925 |
|   12 | Accept |    0.046667 |     0.32901 |    0.046667 |    0.046612 |       kernel |     0.083459 |
|   13 | Accept |    0.046667 |     0.32825 |    0.046667 |    0.046603 |       kernel |      0.15661 |
|   14 | Accept |    0.046667 |     0.31278 |    0.046667 |    0.046607 |       kernel |      0.25613 |
|   15 | Accept |    0.046667 |     0.37683 |    0.046667 |    0.046606 |       kernel |      0.17776 |
|   16 | Accept |    0.046667 |     0.32188 |    0.046667 |    0.046606 |       kernel |      0.13632 |
|   17 | Accept |    0.046667 |     0.32362 |    0.046667 |    0.046606 |       kernel |     0.077598 |
|   18 | Accept |    0.046667 |     0.31569 |    0.046667 |    0.046626 |       kernel |      0.25646 |
|   19 | Accept |    0.046667 |     0.37472 |    0.046667 |    0.046626 |       kernel |     0.093584 |
|   20 | Accept |    0.046667 |     0.33731 |    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.30628 |    0.046667 |    0.046627 |       kernel |     0.066532 |
|   22 | Accept |    0.093333 |     0.30419 |    0.046667 |    0.046618 |       kernel |       5.8968 |
|   23 | Accept |    0.046667 |     0.37174 |    0.046667 |    0.046619 |       kernel |     0.067045 |
|   24 | Accept |    0.046667 |     0.32755 |    0.046667 |     0.04663 |       kernel |      0.25281 |
|   25 | Accept |    0.046667 |     0.31084 |    0.046667 |     0.04663 |       kernel |       0.1473 |
|   26 | Accept |    0.046667 |     0.31474 |    0.046667 |    0.046631 |       kernel |      0.17211 |
|   27 | Accept |    0.046667 |     0.32844 |    0.046667 |    0.046631 |       kernel |      0.12457 |
|   28 | Accept |    0.046667 |     0.34072 |    0.046667 |    0.046631 |       kernel |     0.066659 |
|   29 | Accept |    0.046667 |     0.31184 |    0.046667 |    0.046631 |       kernel |       0.1081 |
|   30 | Accept |        0.08 |     0.31949 |    0.046667 |    0.046628 |       kernel |       1.1048 |

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

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.64615

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

         kernel          0.25613

Estimated objective function value = 0.046628
Estimated function evaluation time = 0.33575
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 представляет переменную отклика и X1x2 , и X3 представляйте переменные предикторы.

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

Имена переменных в формуле должны быть оба именами переменных в Tbl (Tbl.Properties.VariableNames) и допустимые идентификаторы MATLAB®.

Можно проверить имена переменных в Tbl при помощи isvarname функция. Следующий код возвращает логический 1 TRUE) для каждой переменной, которая имеет допустимое имя переменной.

cellfun(@isvarname,Tbl.Properties.VariableNames)
Если имена переменных в Tbl не допустимы, затем преобразуют их при помощи matlab.lang.makeValidName функция.
Tbl.Properties.VariableNames = matlab.lang.makeValidName(Tbl.Properties.VariableNames);

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

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

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

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

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

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

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

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

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

Примечание:

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

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

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

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

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

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

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

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

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

Примечание

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

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

свернуть все

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

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

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

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

Необходимо задать в наименьшем количестве одного предиктора, имеет распределение 'kernel' дополнительно задавать KernelПоддержка, или 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Поддержка, или Width.

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

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

Эта таблица суммирует доступные параметры для установки ядра, сглаживающего область плотности.

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

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

Необходимо задать в наименьшем количестве одного предиктора, имеет распределение 'kernel' дополнительно задавать KernelПоддержка, или 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 и это содержит NaNs, затем программное обеспечение выбирает ширины для элементов, содержащих NaNs.

Необходимо задать в наименьшем количестве одного предиктора, имеет распределение 'kernel' дополнительно задавать KernelПоддержка, или 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- 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.
'all'Все предикторы являются категориальными.

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

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

Пример: '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.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 единицы (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'поле, '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 'points'.

'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
Используйте не больше, чем одни из следующих трех имен полей.
CVPartitioncvpartition объект, как создано 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 {kJ}. Используя дополнение, сглаживающее [2], предполагаемая вероятность

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

    где:

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

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

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

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

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

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

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

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

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

      где:

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

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

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

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

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

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

Ссылки

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

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

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

Введенный в R2014b