Main Content

이 번역 페이지는 최신 내용을 담고 있지 않습니다. 최신 내용을 영문으로 보려면 여기를 클릭하십시오.

fitcnb

다중클래스 나이브 베이즈 모델 훈련

설명

Mdl = fitcnb(Tbl,ResponseVarName)은 테이블 Tbl에 포함된 예측 변수와 변수 Tbl.ResponseVarName에 포함된 클래스 레이블로 훈련된 다중클래스 나이브 베이즈 모델(Mdl)을 반환합니다.

Mdl = fitcnb(Tbl,formula)는 테이블 Tbl에 포함된 예측 변수로 훈련된 다중클래스 나이브 베이즈 모델(Mdl)을 반환합니다. formulaMdl을 피팅하는 데 사용된 Tbl에 포함된 응답 변수와 예측 변수의 부분 집합에 대한 설명 모델입니다.

Mdl = fitcnb(Tbl,Y)는 테이블 Tbl에 포함된 예측 변수와 배열 Y에 포함된 클래스 레이블로 훈련된 다중클래스 나이브 베이즈 모델(Mdl)을 반환합니다.

예제

Mdl = fitcnb(X,Y)는 예측 변수 X와 클래스 레이블 Y로 훈련된 다중클래스 나이브 베이즈 모델(Mdl)을 반환합니다.

예제

Mdl = fitcnb(___,Name,Value)는 위에 열거된 구문에 하나 이상의 Name,Value 쌍의 인수로 지정된 추가 옵션을 사용하여 나이브 베이즈 분류기를 반환합니다. 예를 들어, 데이터를 모델링할 분포, 클래스에 대한 사전 확률 또는 커널 평활화 윈도우 대역폭을 지정할 수 있습니다.

예제

모두 축소

피셔(Fisher)의 붓꽃 데이터 세트를 불러옵니다.

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}


Mdl은 훈련된 ClassificationNaiveBayes 분류기입니다.

기본적으로 평균과 표준편차를 갖는 가우스 분포를 사용하여 각 클래스 내의 예측 변수 분포를 모델링합니다. 점 표기법을 사용하여 특정 가우스 피팅의 모수를 표시합니다. 예를 들어 setosa 내의 첫 번째 특징에 대한 피팅을 표시합니다.

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

    1.4620
    0.1737

평균은 1.4620이고 표준편차는 0.1737입니다.

가우스 등고선을 플로팅합니다.

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

Figure contains an axes object. The axes object with title Naive Bayes Classifier -- Fisher's Iris Data, xlabel Petal Length (cm), ylabel Petal Width (cm) contains 6 objects of type line, functioncontour. One or more of the lines displays its values using only markers These objects represent setosa, versicolor, virginica.

이름-값 쌍의 인수 'DistributionNames'를 사용하여 디폴트 분포를 변경할 수 있습니다. 예를 들어, 일부 예측 변수가 범주형인 경우 'DistributionNames','mvmn'을 사용하여 해당 변수가 다변량 다항 확률 변수임을 지정할 수 있습니다.

피셔(Fisher)의 붓꽃 데이터 세트에 사용할 나이브 베이즈 분류기를 생성합니다. 또한, 훈련 중에 사전 확률을 지정합니다.

피셔(Fisher)의 붓꽃 데이터 세트를 불러옵니다.

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

X는 150개 붓꽃에 대한 4개의 꽃잎 측정값을 포함하는 숫자형 행렬입니다. 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}


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보다 낫습니다.

피셔(Fisher)의 붓꽃 데이터 세트를 불러옵니다.

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}


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

기본적으로 평균과 표준편차를 갖는 가우스 분포로 각 클래스 내의 예측 변수 분포를 모델링합니다. 예측 변수 4개와 클래스 수준 3개가 있습니다. Mdl1.DistributionParameters의 각 셀은 각 분포의 평균과 표준편차를 포함하는 숫자형 벡터에 대응됩니다. 예를 들어, setosa 붓꽃 꽃받침 너비에 대한 평균과 표준편차는 각각 3.42800.3791입니다.

Mdl1에 대한 혼동행렬을 추정합니다.

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

Figure contains an object of type ConfusionMatrixChart.

혼동행렬 차트의 요소 (j, k)는 k로 분류되었지만 데이터에 따르면 실제로는 클래스 j에 속하는 관측값의 개수를 나타냅니다.

예측 변수 1과 2(꽃받침 길이와 너비)에 대해 가우스 분포를 사용하고 예측 변수 3과 4(꽃잎 길이와 너비)에 대해 디폴트 정규 커널 밀도를 사용하여 분류기를 다시 훈련시킵니다.

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

    3.4280
    0.3791

모수를 커널 밀도로 훈련시키지 않습니다. 그 대신 최적의 너비를 선택합니다. 하지만 'Width' 이름-값 쌍의 인수를 사용하여 너비를 지정할 수 있습니다.

Mdl2에 대한 혼동행렬을 추정합니다.

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

Figure contains an object of type ConfusionMatrixChart.

혼동행렬을 통해 두 분류기가 훈련 표본에서 비슷한 성능을 보이는 것을 알 수 있습니다.

피셔(Fisher)의 붓꽃 데이터 세트를 불러옵니다.

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

디폴트 옵션과 k겹 교차 검증을 사용하여 나이브 베이즈 분류기를 훈련시키고 교차 검증합니다. 클래스 순서를 지정하는 것이 좋습니다.

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

기본적으로 평균과 표준편차를 갖는 가우스 분포로 각 클래스 내의 예측 변수 분포를 모델링합니다. CVMdl1ClassificationPartitionedModel 모델입니다.

디폴트 나이브 베이즈 이진 분류기 템플릿을 생성하고, 오류 수정 출력 코드 다중클래스 모델을 훈련시킵니다.

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

CVMdl2ClassificationPartitionedECOC 모델입니다. fitcnb와 동일한 이름-값 쌍의 인수를 사용하여 나이브 베이즈 이진 학습기에 대한 옵션을 지정할 수 있습니다.

표본외 k겹 분류 오차(오분류된 관측값의 비율)를 비교합니다.

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

Mdl2의 일반화 오차가 더 낮습니다.

일부 스팸 필터는 이메일에서 특정 단어나 문장 부호(토큰)가 발생하는 횟수를 기준으로 수신 이메일을 스팸으로 분류합니다. 예측 변수는 이메일에 있는 특정 단어 또는 문장 부호의 도수입니다. 따라서 예측 변수는 다항 확률 변수를 구성합니다.

이 예제에서는 나이브 베이즈 및 다항 예측 변수를 사용하는 분류를 보여줍니다.

훈련 데이터 생성하기

1000개의 이메일을 관측하여 스팸 또는 스팸 아님으로 분류했다고 가정하겠습니다. 각 이메일에 대해 y에 -1 또는 1을 무작위로 할당하여 스팸 또는 스팸 아님으로 분류합니다.

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

예측 변수 데이터를 빌드하기 위해, 단어집에 5개의 토큰이 있고 이메일당 20개의 관측된 토큰이 있다고 가정하겠습니다. 무작위 다항 편차를 추출하여 5개의 토큰에서 예측 변수 데이터를 생성합니다. 스팸 이메일에 해당하는 토큰의 상대 도수는 스팸이 아닌 이메일과 달라야 합니다.

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

분류기 훈련시키기

나이브 베이즈 분류기를 훈련시킵니다. 예측 변수가 다항 변수라고 지정합니다.

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

Mdl은 훈련된 ClassificationNaiveBayes 분류기입니다.

오분류 오차를 추정하여 Mdl의 표본내 성능을 평가합니다.

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

표본내 오분류율은 2%입니다.

새 데이터 만들기

새 이메일 배치를 나타내는 편차를 무작위로 생성합니다.

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

분류기 성능 평가하기

훈련된 나이브 베이즈 분류기 Mdl을 사용하여 새 이메일을 분류하고, 알고리즘이 일반화되는지 확인합니다.

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

표본외 오분류 비율은 2.6%로, 이는 분류기가 상당히 잘 일반화됨을 나타냅니다.

이 예제에서는 fitcnbOptimizeHyperparameters 이름-값 쌍을 사용하여 나이브 베이즈 분류기의 교차 검증 손실을 최소화하는 방법을 보여줍니다. 이 예제에서는 피셔의 붓꽃 데이터를 사용합니다.

피셔의 붓꽃 데이터를 불러옵니다.

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

'auto' 파라미터를 사용하여 분류를 최적화합니다.

재현이 가능하도록 난수 시드값을 설정하고 'expected-improvement-plus' 획득 함수를 사용합니다.

rng default
Mdl = fitcnb(X,Y,'ClassNames',classNames,'OptimizeHyperparameters','auto',...
    'HyperparameterOptimizationOptions',struct('AcquisitionFunctionName',...
    'expected-improvement-plus'))
|====================================================================================================================|
| Iter | Eval   | Objective   | Objective   | BestSoFar   | BestSoFar   | Distribution-|        Width |  Standardize |
|      | result |             | runtime     | (observed)  | (estim.)    | Names        |              |              |
|====================================================================================================================|
|    1 | Best   |    0.093333 |      1.4111 |    0.093333 |    0.093333 |       kernel |       5.6939 |        false |
|    2 | Accept |     0.13333 |     0.44615 |    0.093333 |     0.11333 |       kernel |       94.849 |         true |
|    3 | Best   |    0.053333 |     0.21881 |    0.053333 |     0.05765 |       normal |            - |            - |
|    4 | Accept |    0.053333 |     0.13851 |    0.053333 |    0.053336 |       normal |            - |            - |
|    5 | Accept |     0.26667 |     0.56566 |    0.053333 |    0.053338 |       kernel |     0.001001 |         true |
|    6 | Accept |    0.093333 |     0.99285 |    0.053333 |    0.053337 |       kernel |       10.043 |        false |
|    7 | Accept |     0.26667 |     0.43775 |    0.053333 |     0.05334 |       kernel |    0.0010132 |        false |
|    8 | Accept |    0.093333 |     0.39877 |    0.053333 |    0.053338 |       kernel |       985.05 |        false |
|    9 | Accept |     0.13333 |     0.37386 |    0.053333 |    0.053338 |       kernel |       993.63 |         true |
|   10 | Accept |    0.053333 |      0.2063 |    0.053333 |    0.053336 |       normal |            - |            - |
|   11 | Accept |    0.053333 |     0.16948 |    0.053333 |    0.053336 |       normal |            - |            - |
|   12 | Best   |    0.046667 |     0.47121 |    0.046667 |    0.046679 |       kernel |      0.30205 |         true |
|   13 | Accept |     0.11333 |     0.55037 |    0.046667 |    0.046685 |       kernel |       1.3021 |         true |
|   14 | Accept |    0.053333 |     0.36482 |    0.046667 |    0.046695 |       kernel |      0.10521 |         true |
|   15 | Accept |    0.046667 |      0.4042 |    0.046667 |    0.046677 |       kernel |      0.25016 |        false |
|   16 | Accept |        0.06 |     0.46012 |    0.046667 |    0.046686 |       kernel |      0.58328 |        false |
|   17 | Accept |    0.046667 |     0.55198 |    0.046667 |    0.046656 |       kernel |      0.07969 |        false |
|   18 | Accept |    0.093333 |     0.80381 |    0.046667 |    0.046654 |       kernel |       131.33 |        false |
|   19 | Accept |    0.046667 |     0.50837 |    0.046667 |     0.04648 |       kernel |      0.13384 |        false |
|   20 | Best   |        0.04 |     0.36033 |        0.04 |    0.040132 |       kernel |      0.19525 |         true |
|====================================================================================================================|
| Iter | Eval   | Objective   | Objective   | BestSoFar   | BestSoFar   | Distribution-|        Width |  Standardize |
|      | result |             | runtime     | (observed)  | (estim.)    | Names        |              |              |
|====================================================================================================================|
|   21 | Accept |        0.04 |     0.67286 |        0.04 |    0.040066 |       kernel |      0.19458 |         true |
|   22 | Accept |        0.04 |     0.95659 |        0.04 |    0.040043 |       kernel |      0.19601 |         true |
|   23 | Accept |        0.04 |     0.91472 |        0.04 |    0.040031 |       kernel |      0.19412 |         true |
|   24 | Accept |     0.10667 |      1.0207 |        0.04 |    0.040018 |       kernel |    0.0084391 |         true |
|   25 | Accept |    0.073333 |     0.97852 |        0.04 |    0.040022 |       kernel |      0.02769 |        false |
|   26 | Accept |        0.04 |     0.40223 |        0.04 |     0.04002 |       kernel |       0.2037 |         true |
|   27 | Accept |     0.13333 |     0.32434 |        0.04 |    0.040021 |       kernel |       12.501 |         true |
|   28 | Accept |     0.11333 |     0.32996 |        0.04 |    0.040006 |       kernel |    0.0048728 |        false |
|   29 | Accept |         0.1 |     0.32944 |        0.04 |    0.039993 |       kernel |     0.028653 |         true |
|   30 | Accept |    0.046667 |     0.81209 |        0.04 |    0.041008 |       kernel |      0.18725 |         true |

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

Best observed feasible point:
    DistributionNames     Width     Standardize
    _________________    _______    ___________

         kernel          0.19525       true    

Observed objective function value = 0.04
Estimated objective function value = 0.041117
Function evaluation time = 0.36033

Best estimated feasible point (according to models):
    DistributionNames    Width     Standardize
    _________________    ______    ___________

         kernel          0.2037       true    

Estimated objective function value = 0.041008
Estimated function evaluation time = 0.54061

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

Mdl = 
  ClassificationNaiveBayes
                         ResponseName: 'Y'
                CategoricalPredictors: []
                           ClassNames: {'setosa'  'versicolor'  'virginica'}
                       ScoreTransform: 'none'
                      NumObservations: 150
    HyperparameterOptimizationResults: [1x1 BayesianOptimization]
                    DistributionNames: {'kernel'  'kernel'  'kernel'  'kernel'}
               DistributionParameters: {3x4 cell}
                               Kernel: {'normal'  'normal'  'normal'  'normal'}
                              Support: {'unbounded'  'unbounded'  'unbounded'  'unbounded'}
                                Width: [3x4 double]
                                   Mu: [5.8433 3.0573 3.7580 1.1993]
                                Sigma: [0.8281 0.4359 1.7653 0.7622]


입력 인수

모두 축소

모델을 훈련시키는 데 사용되는 표본 데이터로, 테이블로 지정됩니다. Tbl의 각 행은 하나의 관측값에 대응되고, 각 열은 하나의 예측 변수에 대응됩니다. 선택적으로, Tbl은 응답 변수에 대해 하나의 추가 열을 포함할 수 있습니다. 문자형 벡터로 구성된 셀형 배열 이외의 셀형 배열과 다중 열 변수는 허용되지 않습니다.

  • Tbl이 응답 변수를 포함하며 Tbl의 나머지 모든 변수를 예측 변수로 사용하려는 경우 ResponseVarName을 사용하여 응답 변수를 지정하십시오.

  • Tbl이 응답 변수를 포함하며 Tbl의 나머지 변수 중 일부만 예측 변수로 사용하려는 경우 formula를 사용하여 공식을 지정하십시오.

  • Tbl이 응답 변수를 포함하지 않는 경우 Y를 사용하여 응답 변수를 지정하십시오. 응답 변수의 길이와 Tbl의 행 개수는 동일해야 합니다.

응답 변수 이름으로, Tbl의 변수 이름으로 지정됩니다.

ResponseVarName은 문자형 벡터나 string형 스칼라로 지정해야 합니다. 예를 들어, 응답 변수 YTbl.Y로 저장된 경우 이를 "Y"로 지정하십시오. 이렇게 하지 않으면 모델을 훈련시킬 때 Y를 포함한 Tbl의 모든 열이 예측 변수로 처리됩니다.

응답 변수는 categorical형 배열, 문자형 배열, string형 배열, 논리형 벡터 또는 숫자형 벡터, 문자형 벡터로 구성된 셀형 배열이어야 합니다. Y가 문자형 배열인 경우, 응답 변수의 각 요소는 배열의 각 행에 대응되어야 합니다.

ClassNames 이름-값 인수를 사용하여 클래스의 순서를 지정하는 것이 좋습니다.

데이터형: char | string

응답 변수, 그리고 예측 변수의 부분 집합에 대한 설명 모델로, "Y~x1+x2+x3" 형식의 문자형 벡터나 string형 스칼라로 지정됩니다. 이 형식에서 Y는 응답 변수를 나타내고, x1, x2, x3은 예측 변수를 나타냅니다.

Tbl의 일부 변수를 모델 훈련에 사용할 예측 변수로 지정하려면 식을 사용하십시오. 사용자가 식을 지정하면 Tbl의 변수 중 해당 formula에 표시되지 않은 변수는 사용되지 않습니다.

식에 포함되는 변수 이름은 Tbl에 포함된 변수 이름(Tbl.Properties.VariableNames)이면서 동시에 유효한 MATLAB® 식별자여야 합니다. isvarname 함수를 사용하여 Tbl에 포함된 변수 이름을 확인할 수 있습니다. 변수 이름이 유효하지 않으면 matlab.lang.makeValidName 함수를 사용하여 변수 이름을 변환할 수 있습니다.

데이터형: char | string

나이브 베이즈 분류기가 훈련되는 클래스 레이블로, categorical형 배열, 문자형 배열, string형 배열, 논리형 벡터, 숫자형 벡터 또는 문자형 벡터로 구성된 셀형 배열로 지정됩니다. Y의 각 요소는 X의 대응되는 행이 속하는 클래스를 정의합니다. Y는 K개의 클래스 수준을 지원합니다.

Y가 문자형 배열인 경우, 각 행은 하나의 클래스 레이블에 대응되어야 합니다.

Y의 길이와 X의 행 개수는 동일해야 합니다.

데이터형: categorical | char | string | logical | single | double | cell

예측 변수 데이터로, 숫자형 행렬로 지정됩니다.

X의 각 행은 하나의 관측값(발생 건 또는 예라고도 함)에 대응되고, 각 열은 하나의 변수(특징이라고도 함)에 대응됩니다.

Y의 길이와 X의 행 개수는 동일해야 합니다.

데이터형: double

참고:

소프트웨어는 NaN, 빈 문자형 벡터(''), 빈 string형(""), <missing>, <undefined> 요소를 누락 데이터 값으로 처리합니다.

  • Y가 누락값을 포함하는 경우 해당 누락값과 그에 대응하는 X의 행을 제거합니다.

  • X가 누락값으로만 구성된 행을 포함하는 경우 해당 행과 그에 대응하는 Y의 요소를 제거합니다.

  • X가 누락값을 포함하고 있고 'DistributionNames','mn'이 설정되어 있으면 X의 해당 행과 그에 대응하는 Y의 요소를 제거합니다.

  • 클래스에서 표현되지 않은 예측 변수가 있을 경우, 즉 예측 변수의 모든 값이 NaN인 경우 오류를 반환합니다.

X의 행과 그에 대응하는 Y의 요소를 제거하면 유효한 훈련 표본 또는 교차 검증 표본의 크기가 줄어듭니다.

이름-값 인수

선택적 인수 쌍을 Name1=Value1,...,NameN=ValueN으로 지정합니다. 여기서 Name은 인수 이름이고 Value는 대응값입니다. 이름-값 인수는 다른 인수 뒤에 와야 하지만, 인수 쌍의 순서는 상관없습니다.

R2021a 이전 릴리스에서는 쉼표를 사용하여 각 이름과 값을 구분하고 Name을 따옴표로 묶으십시오.

예: 'DistributionNames','mn','Prior','uniform','KSWidth',0.5는 데이터 분포가 다항 분포이고, 모든 클래스에 대한 사전 확률이 동일하고, 모든 클래스의 커널 평활화 윈도우 대역폭이 0.5 단위임을 지정합니다.

참고

교차 검증 이름-값 인수는 'OptimizeHyperparameters' 이름-값 인수와 함께 사용할 수 없습니다. 'OptimizeHyperparameters'에 대한 교차 검증을 수정하려면 'HyperparameterOptimizationOptions' 이름-값 인수를 사용해야만 합니다.

나이브 베이즈 옵션

모두 축소

fitcnb가 데이터를 모델링하는 데 사용하는 데이터 분포로, 'DistributionNames'와 다음 표에 나와 있는 값으로 구성된 문자형 벡터 또는 string형 스칼라, string형 배열 또는 문자형 벡터로 구성된 셀형 배열이 쉼표로 구분되어 지정됩니다.

설명
'kernel'커널 평활화 밀도 추정값.
'mn'다항 분포. mn을 지정할 경우 모든 특징이 다항 분포의 성분입니다. 따라서 string형 배열이나 문자형 벡터로 구성된 셀형 배열의 요소로 'mn'을 포함시킬 수 없습니다. 자세한 내용은 알고리즘 항목을 참조하십시오.
'mvmn'다변량 다항 분포. 자세한 내용은 알고리즘 항목을 참조하십시오.
'normal'정규(가우스) 분포.

문자형 벡터 또는 string형 스칼라를 지정하면 해당 분포를 사용하여 모든 특징을 모델링합니다. 1×P string형 배열 또는 문자형 벡터로 구성된 셀형 배열을 지정하면 해당 배열의 요소 j의 분포를 사용하여 특징 j를 모델링합니다.

기본적으로 CategoricalPredictors 이름-값 쌍의 인수를 사용하여 범주형 예측 변수로 지정된 모든 예측 변수는 'mvmn'으로 설정됩니다. 그렇지 않은 경우 디폴트 분포는 'normal'입니다.

추가로 Kernel, Standardize, Support 또는 Width를 지정하려면 적어도 하나의 예측 변수가 분포 'kernel'을 갖는다고 지정해야 합니다.

예: 'DistributionNames','mn'

예: 'DistributionNames',{'kernel','normal','kernel'}

커널 평활화 방법의 유형으로, 'Kernel'과 함께 문자형 벡터, string형 스칼라, string형 배열 또는 문자형 벡터로 구성된 셀형 배열이 쉼표로 구분되어 지정됩니다.

다음 표에는 커널 평활화 밀도 영역을 설정하는 데 사용할 수 있는 옵션이 요약되어 있습니다. I{u}는 표시 함수를 나타낸다고 하겠습니다.

커널공식
'box'상자(균일)

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

'epanechnikov'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 string형 배열 또는 셀형 배열을 지정할 경우 X의 특징 j에 대해 요소 j의 커널 평활화 방법 유형을 사용하여 분류기를 훈련시킵니다. 분포가 'kernel'인 예측 변수에 대응되지 않는 Kernel의 요소는 무시됩니다.

추가로 Kernel, Standardize, Support 또는 Width를 지정하려면 적어도 하나의 예측 변수가 분포 'kernel'을 갖는다고 지정해야 합니다.

예: 'Kernel',{'epanechnikov','normal'}

R2023b 이후

커널 분포를 갖는 예측 변수를 표준화하는 플래그로, 숫자형 또는 논리값 0(false)이나 1(true)로 지정됩니다. 이 인수는 DistributionNames 값이 적어도 하나의 커널 분포("kernel")를 포함하는 경우에만 유효합니다.

Standardizetrue로 설정하면 커널 분포를 갖는 각 예측 변수가 대응되는 열의 평균과 표준편차로 정규화됩니다. 커널 분포가 아닌 예측 변수(예: 범주형 예측 변수)는 표준화되지 않습니다.

예: "Standardize",true

데이터형: single | double | logical

커널 평활화 밀도 지지 범위로, 'Support'와 함께 'positive', 'unbounded', string형 배열, 셀형 배열 또는 숫자형 행 벡터가 쉼표로 구분되어 지정됩니다. 지정된 영역에 커널 평활화 밀도를 적용합니다.

다음 표에는 커널 평활화 밀도 영역을 설정하는 데 사용할 수 있는 옵션이 요약되어 있습니다.

설명
1×2 숫자형 행 벡터예를 들면 [L,U]와 같습니다. 여기서 LU는 각각 밀도 지지 범위에 대한 유한한 하한과 상한입니다.
'positive'밀도 지지 범위가 모두 양의 실수 값입니다.
'unbounded'밀도 지지 범위가 모두 실수 값입니다.

string형 배열의 경우 각 요소가 위 표에 나와 있는 텍스트 값을 포함하고 셀형 배열의 경우 각 요소가 위 표에 나와 있는 값을 포함하는 1×P string형 배열 또는 셀형 배열을 지정할 경우 X의 특징 j에 대해 요소 j의 커널 지지 범위를 사용하여 분류기를 훈련시킵니다. 분포가 'kernel'인 예측 변수에 대응되지 않는 Kernel의 요소는 무시됩니다.

추가로 Kernel, Standardize, Support 또는 Width를 지정하려면 적어도 하나의 예측 변수가 분포 'kernel'을 갖는다고 지정해야 합니다.

예: 'Support',{[-10,20],'unbounded'}

데이터형: char | string | cell | double

커널 평활화 윈도우 폭으로, 'Width'와 함께 숫자형 값으로 구성된 행렬, 숫자형 열 벡터, 숫자형 행 벡터 또는 스칼라가 쉼표로 구분되어 지정됩니다.

K개의 클래스 수준과 P개의 예측 변수가 있다고 가정하겠습니다. 다음 표에는 커널 평활화 윈도우 폭을 설정하는 데 사용할 수 있는 옵션이 요약되어 있습니다.

설명
숫자형 값으로 구성된 K×P 행렬요소 (k,j)는 클래스 k의 예측 변수 j에 대한 폭을 지정합니다.
K×1 숫자형 열 벡터요소 k는 클래스 k의 모든 예측 변수에 대한 폭을 지정합니다.
1×P 숫자형 행 벡터요소 j는 예측 변수 j에 대해 모든 클래스 수준의 폭을 지정합니다.
스칼라모든 클래스의 모든 특징에 대한 대역폭을 지정합니다.

기본적으로 가우스 분포에 최적인 값을 사용하여 예측 변수와 클래스의 각 조합에 대해 자동으로 디폴트 폭을 선택합니다. NaN을 포함하는 Width를 지정할 경우 NaN을 포함하는 요소에 대해 폭을 선택합니다.

추가로 Kernel, Standardize, Support 또는 Width를 지정하려면 적어도 하나의 예측 변수가 분포 'kernel'을 갖는다고 지정해야 합니다.

예: 'Width',[NaN NaN]

데이터형: double | struct

교차 검증 옵션

모두 축소

교차 검증 플래그로, 'Crossval'과 함께 'on' 또는 'off'가 쉼표로 구분되어 지정됩니다.

'on'을 지정하면 10겹 교차 검증을 구현합니다.

이 교차 검증 설정을 재정의하려면 CVPartition, Holdout, KFold, Leaveout 이름-값 쌍의 인수 중 하나를 사용하십시오. 교차 검증된 모델을 생성하려면 한 번에 하나의 교차 검증 이름-값 쌍의 인수만 사용해야 합니다.

또는, Mdlcrossval로 전달하여 나중에 교차 검증을 수행할 수 있습니다.

예: 'CrossVal','on'

교차 검증 분할로, 교차 검증의 유형과 훈련 세트 및 검증 세트의 인덱싱을 지정하는 cvpartition 객체로 지정됩니다.

교차 검증된 모델을 생성하려면 다음 4개의 이름-값 인수 중 하나만 지정할 수 있습니다. CVPartition, Holdout, KFold, Leaveout

예: cvp = cvpartition(500,KFold=5)를 사용하여 500개 관측값에 대한 5겹 교차 검증에 사용할 임의 분할을 생성한다고 가정하겠습니다. 그러면 CVPartition=cvp를 설정하여 교차 검증 분할을 지정할 수 있습니다.

홀드아웃 검증에 사용할 데이터의 비율로, 범위 [0,1] 내 스칼라 값으로 지정됩니다. Holdout=p를 지정하는 경우 소프트웨어는 다음 단계를 완료합니다.

  1. 데이터의 p*100%를 무작위로 선택하여 검증 데이터용으로 남겨두고 나머지 데이터를 사용하여 모델을 훈련시킵니다.

  2. 교차 검증된 모델의 Trained 속성에 훈련된 간소 모델을 저장합니다.

교차 검증된 모델을 생성하려면 다음 4개의 이름-값 인수 중 하나만 지정할 수 있습니다. CVPartition, Holdout, KFold, Leaveout

예: Holdout=0.1

데이터형: double | single

교차 검증된 모델에 사용할 겹의 개수로, 1보다 큰 양의 정수 값으로 지정됩니다. KFold=k를 지정하는 경우 소프트웨어는 다음 단계를 완료합니다.

  1. 데이터를 k개 세트로 임의로 분할합니다.

  2. 각 세트마다 해당 세트를 검증 데이터로 남겨두고 나머지 k – 1개의 세트를 사용하여 모델을 훈련시킵니다.

  3. 교차 검증된 모델의 Trained 속성에 k×1 셀형 벡터로 k개의 훈련된 간소 모델을 저장합니다.

교차 검증된 모델을 생성하려면 다음 4개의 이름-값 인수 중 하나만 지정할 수 있습니다. CVPartition, Holdout, KFold, Leaveout

예: KFold=5

데이터형: single | double

리브-원-아웃 교차 검증 플래그로, "on" 또는 "off"로 지정됩니다. Leaveout="on"을 지정하는 경우, n개(여기서 n은 모델의 NumObservations 속성에 지정된 관측값 중 누락된 관측값을 제외한 개수임)의 관측값 각각에 대해 소프트웨어가 다음 단계를 완료합니다.

  1. 1개의 관측값을 검증 데이터로 남겨두고 나머지 n – 1개 관측값을 사용하여 모델을 훈련시킵니다.

  2. 교차 검증된 모델의 Trained 속성에 n×1 셀형 벡터로 n개의 훈련된 간소 모델을 저장합니다.

교차 검증된 모델을 생성하려면 다음 4개의 이름-값 인수 중 하나만 지정할 수 있습니다. CVPartition, Holdout, KFold, Leaveout

예: Leaveout="on"

데이터형: char | string

기타 분류 옵션

모두 축소

범주형 예측 변수 목록으로, 다음 표에 있는 값 중 하나로 지정됩니다.

설명
양의 정수로 구성된 벡터

벡터의 각 요소는 대응되는 예측 변수가 범주형임을 나타내는 인덱스 값입니다. 인덱스 값은 1과 p 사이입니다. 여기서 p는 모델을 훈련시킬 때 사용되는 예측 변수의 개수입니다.

fitcnb 함수가 입력 변수의 서브셋을 예측 변수로 사용하는 경우 함수는 해당 서브셋만 사용하여 예측 변수의 요소를 참조합니다. CategoricalPredictors 값은 응답 변수, 관측값 가중치 변수 또는 함수가 사용하지 않는 그 밖의 변수를 세지 않습니다.

논리형 벡터

요소의 값이 true이면 대응되는 예측 변수가 범주형임을 의미합니다. 벡터의 길이는 p입니다.

문자형 행렬행렬의 각 행은 예측 변수의 이름입니다. 이름은 PredictorNames의 요소와 일치해야 합니다. 문자형 행렬의 각 행의 길이가 같게 되도록 이름 뒤에 추가로 공백을 채웁니다.
string형 배열 또는 문자형 벡터로 구성된 셀형 배열배열의 각 요소는 예측 변수의 이름입니다. 이름은 PredictorNames의 요소와 일치해야 합니다.
"all"모든 예측 변수가 범주형 변수입니다.

기본적으로 예측 변수 데이터가 테이블(Tbl) 내에 있는 경우, 변수가 논리형 벡터, categorical형 벡터, 문자형 배열, string형 배열 또는 문자형 벡터로 구성된 셀형 배열이면 fitcnb 함수는 그 변수를 범주형 변수라고 가정합니다. 예측 변수 데이터가 행렬(X)이면 fitcnb 함수는 모든 예측 변수를 연속형 변수라고 가정합니다. 다른 모든 예측 변수를 범주형 예측 변수로 식별하려면 이러한 변수를 CategoricalPredictors 이름-값 인수를 사용하여 지정하십시오.

식별된 범주형 예측 변수에 대해 fitcnb는 다변량 다항 분포를 사용합니다. 자세한 내용은 DistributionNames알고리즘 항목을 참조하십시오.

예: 'CategoricalPredictors','all'

데이터형: single | double | logical | char | string | cell

훈련에 사용할 클래스의 이름으로, categorical형 배열, 문자형 배열, string형 배열, 논리형 벡터 또는 숫자형 벡터, 문자형 벡터로 구성된 셀형 배열로 지정됩니다. ClassNamesTbl의 응답 변수 또는 Y와 같은 데이터형이어야 합니다.

ClassNames가 문자형 배열인 경우, 각 요소는 배열의 각 행에 대응되어야 합니다.

ClassNames를 사용하여 다음을 수행할 수 있습니다.

  • 훈련 중의 클래스 순서를 지정합니다.

  • 입력 인수 차원 또는 출력 인수 차원의 순서를 지정합니다. 이 순서는 클래스 순서와 일치합니다. 예를 들어, ClassNames를 사용하여 Cost 차원의 순서나 predict로 반환되는 분류 점수의 열 순서를 지정할 수 있습니다.

  • 훈련에 사용할 클래스의 일부를 선택합니다. 예를 들어, Y에 포함된 모든 고유한 클래스 이름의 집합이 ["a","b","c"]라고 가정해 보겠습니다. 클래스 "a""c"의 관측값만 사용하여 모델을 훈련시키려면 "ClassNames",["a","c"]를 지정하십시오.

ClassNames의 디폴트 값은 Tbl의 응답 변수 또는 Y에 포함된 모든 고유한 클래스 이름의 집합입니다.

예: "ClassNames",["b","g"]

데이터형: categorical | char | string | logical | single | double | cell

점의 오분류 비용으로, 'Cost'와 함께 다음 중 하나가 쉼표로 구분되어 지정됩니다.

  • 정사각 행렬로, 여기서 Cost(i,j)는 특정 점에 대해 실제 클래스가 i인 경우 이 점을 j 클래스로 분류하는 비용입니다(즉, 행은 실제 클래스에 대응되고, 열은 예측 클래스에 대응됨). Cost의 대응 행과 대응 열에 대한 클래스 순서를 지정하려면 ClassNames 이름-값 쌍의 인수도 지정하십시오.

  • 다음 두 개의 필드를 갖는 구조체 S: Y와 같은 유형의 변수로 그룹 이름을 포함하는 S.ClassNames와 비용 행렬을 포함하는 S.ClassificationCosts.

디폴트 값은 i~=j인 경우 Cost(i,j)=1이고, i=j인 경우 Cost(i,j)=0입니다.

예: 'Cost',struct('ClassNames',{{'b','g'}},'ClassificationCosts',[0 0.5; 1 0])

데이터형: single | double | struct

예측 변수 이름으로, 고유한 이름으로 구성된 string형 배열 또는 고유한 문자형 벡터로 구성된 셀형 배열로 지정됩니다. PredictorNames의 기능은 훈련 데이터를 어떤 방식으로 제공하느냐에 따라 달라집니다.

  • XY를 제공하는 경우, PredictorNames를 사용하여 X의 예측 변수에 이름을 할당할 수 있습니다.

    • PredictorNames의 이름의 순서는 X의 열 순서와 일치해야 합니다. 즉, PredictorNames{1}X(:,1)의 이름이고, PredictorNames{2}X(:,2)의 이름이 되는 식입니다. 또한, size(X,2)numel(PredictorNames)는 같아야 합니다.

    • 기본적으로 PredictorNames{'x1','x2',...}입니다.

  • Tbl을 제공하는 경우, PredictorNames를 사용하여 훈련에 사용할 예측 변수를 선택할 수 있습니다. 즉, fitcnb 함수는 PredictorNames의 예측 변수와 이에 대한 응답 변수만을 훈련 중에 사용합니다.

    • PredictorNamesTbl.Properties.VariableNames의 부분 집합이어야 하므로 응답 변수의 이름은 포함할 수 없습니다.

    • 기본적으로, PredictorNames는 모든 예측 변수의 이름을 포함합니다.

    • PredictorNamesformula 중 하나만 사용하여 훈련에 사용할 예측 변수를 지정하는 것이 좋습니다.

예: "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이 되도록 요소를 정규화합니다.

WeightsPrior 모두에 대한 값을 설정하면 합이 각 클래스의 사전 확률 값이 되도록 가중치가 다시 정규화됩니다.

예: 'Prior','uniform'

데이터형: char | string | single | double | struct

응답 변수 이름으로, 문자형 벡터 또는 string형 스칼라로 지정됩니다.

  • Y를 제공하는 경우, ResponseName을 사용하여 응답 변수의 이름을 지정할 수 있습니다.

  • ResponseVarName 또는 formula를 제공하는 경우에는 ResponseName을 사용할 수 없습니다.

예: "ResponseName","response"

데이터형: char | string

점수 변환 방식으로, 문자형 벡터, string형 스칼라 또는 함수 핸들로 지정됩니다.

다음 표에는 사용 가능한 문자형 벡터와 string형 스칼라가 요약되어 있습니다.

설명
"doublelogit"1/(1 + e–2x)
"invlogit"log(x / (1 – x))
"ismax"최대 점수를 갖는 클래스의 점수를 1로 설정하고, 다른 모든 클래스의 점수를 0으로 설정합니다.
"logit"1/(1 + e–x)
"none" 또는 "identity"x(변환 없음)
"sign"x < 0의 경우 –1
x = 0의 경우 0
x > 0의 경우 1
"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로 지정하는 경우, WeightsTbl에서 숫자형 벡터를 포함하는 변수의 이름일 수 있습니다. 이 경우, Weights를 문자형 벡터 또는 string형 스칼라로 지정해야 합니다. 예를 들어, 가중 벡터 WTbl.W로 저장된 경우, 이를 'W'로 지정하십시오. 그렇지 않은 경우, 소프트웨어는 모델을 훈련시킬 때 W를 포함한 Tbl의 모든 열을 예측 변수 또는 응답 변수로 처리합니다.

소프트웨어는 Weights의 총합이 각 클래스의 사전 확률의 값이 되도록 정규화합니다.

기본적으로, Weightsones(n,1)입니다. 여기서 nX 또는 Tbl에 포함된 관측값 개수입니다.

데이터형: double | single | char | string

하이퍼파라미터 최적화

모두 축소

최적화할 모수로, 'OptimizeHyperparameters'와 함께 다음 값 중 하나가 쉼표로 구분되어 지정됩니다.

  • 'none' — 최적화하지 않습니다.

  • 'auto'{'DistributionNames','Standardize','Width'}를 사용합니다.

  • 'all' — 모든 적합한 모수를 최적화합니다.

  • 적합한 모수 이름으로 구성된 string형 배열 또는 셀형 배열.

  • optimizableVariable 객체로 구성된 벡터. 일반적으로 hyperparameters의 출력값입니다.

최적화는 모수를 변경하여 fitcnb에 대한 교차 검증 손실(오차)을 최소화하려고 합니다. 이와는 다른 맥락의 교차 검증 손실에 대한 자세한 내용은 Classification Loss 항목을 참조하십시오. 교차 검증 유형과 최적화의 기타 측면을 제어하려면 HyperparameterOptimizationOptions 이름-값 쌍을 사용하십시오.

참고

'OptimizeHyperparameters' 값은 다른 이름-값 인수를 사용하여 지정하는 모든 값을 재정의합니다. 예를 들어 'OptimizeHyperparameters''auto'로 설정하면 fitcnb 함수는 'auto' 옵션에 대응되는 하이퍼파라미터를 최적화하고 하이퍼파라미터에 대해 지정된 값을 모두 무시합니다.

fitcnb에 대한 적합한 모수는 다음과 같습니다.

  • DistributionNamesfitcnb'normal''kernel' 중에서 탐색을 수행합니다.

  • Kernelfitcnb'normal', 'box', 'epanechnikov', 'triangle' 중에서 탐색을 수행합니다.

  • Standardizefitcnbtruefalse 중에서 탐색을 수행합니다.

  • Widthfitcnb가 기본적으로 범위 [1e-3,1e3] 내에서 로그 스케일링된 실수 값 중에서 탐색을 수행합니다.

디폴트가 아닌 값을 가지는 optimizableVariable 객체로 구성된 벡터를 전달하여 디폴트가 아닌 모수를 설정합니다. 예를 들면 다음과 같습니다.

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

paramsOptimizeHyperparameters의 값으로 전달합니다.

기본적으로, 반복 표시가 명령줄에 표시되고, 최적화에 지정된 하이퍼파라미터 개수에 따라 플롯이 표시됩니다. 최적화와 플롯에 대해 목적 함수는 오분류율입니다. 반복 표시를 제어하려면 'HyperparameterOptimizationOptions' 이름-값 인수에 대한 Verbose 필드를 설정하십시오. 플롯을 제어하려면 'HyperparameterOptimizationOptions' 이름-값 인수에 대한 ShowPlots 필드를 설정하십시오.

예제는 나이브 베이즈 분류기 최적화하기 항목을 참조하십시오.

예: 'auto'

최적화에 사용할 옵션으로, 구조체로 지정됩니다. 이 인수는 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목적 함수 실행의 최대 횟수입니다.'bayesopt''randomsearch'의 경우 30이고, 'gridsearch'의 경우 그리드 전체입니다.
MaxTime

시간 제한으로, 양의 실수형 스칼라로 지정됩니다. 시간 제한은 초 단위이며, tictoc으로 측정됩니다. MaxTime은 함수 계산을 중단시키지 않으므로 실행 시간은 MaxTime을 초과할 수 있습니다.

Inf
NumGridDivisions'gridsearch'의 경우, 각 차원의 값 개수입니다. 이 값은 각 차원에 대한 값의 개수를 제공하는 양의 정수로 구성된 벡터 또는 모든 차원에 적용되는 스칼라일 수 있습니다. 이 필드는 범주형 변수의 경우 무시됩니다.10
ShowPlots플롯 표시 여부를 나타내는 논리값입니다. true인 경우, 이 필드는 반복 횟수에 대해 최선의 관측된 목적 함수 값을 플로팅합니다. 베이즈 최적화를 사용하는 경우(Optimizer'bayesopt'임), 이 필드는 최선의 추정된 목적 함수 값도 플로팅합니다. 최선의 관측된 목적 함수 값과 최선의 추정된 목적 함수 값은 각각 반복 표시의 BestSoFar (observed) 열과 BestSoFar (estim.) 열의 값에 대응됩니다. Mdl.HyperparameterOptimizationResults의 속성 ObjectiveMinimumTraceEstimatedObjectiveMinimumTrace에서 이러한 값을 확인할 수 있습니다. 문제에 베이즈 최적화를 위한 하나 또는 두 개의 최적화 모수가 있는 경우, ShowPlots는 이 모수에 대해서도 목적 함수의 모델을 플로팅합니다.true
SaveIntermediateResultsOptimizer'bayesopt'인 경우 결과를 저장할지 여부를 나타내는 논리값입니다. true인 경우, 이 필드는 각 반복마다 'BayesoptResults'라는 이름의 작업 공간 변수를 덮어씁니다. 변수는 BayesianOptimization 객체입니다.false
Verbose

명령줄에 표시되는 내용:

  • 0 — 반복 표시 안 함

  • 1 — 반복 표시

  • 2 — 추가 정보와 함께 반복 표시

자세한 내용은 bayesopt Verbose 이름-값 인수 및 예제 베이즈 최적화를 사용하여 분류기 피팅 최적화하기를 참조하십시오.

1
UseParallel베이즈 최적화를 병렬로 실행할지 여부를 나타내는 논리값으로, Parallel Computing Toolbox™가 필요합니다. 병렬 시간 재현이 불가능하기 때문에, 병렬 베이즈 최적화에서 반드시 재현 가능한 결과를 산출하지는 않습니다. 자세한 내용은 Parallel Bayesian Optimization 항목을 참조하십시오.false
Repartition

매 반복 시 교차 검증을 다시 분할할지 여부를 나타내는 논리값입니다. 이 필드의 값이 false인 경우, 최적화 함수는 최적화에 단일 분할을 사용합니다.

true로 설정할 경우, 분할 잡음이 고려되므로 일반적으로 가장 견고한 결과가 제공됩니다. 그러나, true에서 좋은 결과를 생성하려면 적어도 두 배 더 많은 횟수의 함수 실행이 필요합니다.

false
다음과 같은 3개 옵션 중 하나만 사용합니다.
CVPartitioncvpartition으로 생성되는 cvpartition 객체교차 검증 필드를 지정하지 않을 경우 'Kfold',5
Holdout홀드아웃 비율을 나타내는 범위 (0,1) 내 스칼라
Kfold1보다 큰 정수

예: 'HyperparameterOptimizationOptions',struct('MaxObjectiveEvaluations',60)

데이터형: struct

출력 인수

모두 축소

훈련된 나이브 베이즈 분류 모델로, ClassificationNaiveBayes 모델 객체 또는 ClassificationPartitionedModel 교차 검증된 모델 객체로 반환됩니다.

이름-값 쌍의 인수 KFold, Holdout, , CrossVal 또는 CVPartition 중 어느 하나라도 설정하면, MdlClassificationPartitionedModel 교차 검증된 모델 객체입니다. 그렇지 않은 경우 MdlClassificationNaiveBayes 모델 객체입니다.

Mdl의 속성을 참조하려면 점 표기법을 사용하십시오. 예를 들어, Mdl.DistributionParameters를 입력하면 추정된 분포 모수에 액세스할 수 있습니다.

세부 정보

모두 축소

Bag-of-Tokens 모델

bag-of-tokens 모델에서, 예측 변수 j의 값은 이 관측값에서 토큰 j의 음이 아닌 발생 횟수입니다. 다항 모델의 범주(Bin) 개수는 고유한 토큰의 개수(예측 변수의 개수)입니다.

나이브 베이즈(Naive Bayes)

나이브 베이즈는 데이터에 밀도 추정을 적용하는 분류 알고리즘입니다.

이 알고리즘은 베이즈 정리를 사용하며, 주어진 클래스에 대해 예측 변수가 조건부 독립이라고 낙관적으로(naively) 가정합니다. 이 가정은 실제로는 보통 위반되지만, 나이브 베이즈 분류기는 편향된 클래스 밀도 추정값의 영향을 덜 받는(robust) 사후 분포를 산출하는 경향이 있습니다(특히 사후분포가 0.5인 경우(결정 경계)) [1].

나이브 베이즈 분류기는 가장 가능성이 높은 클래스에 관측값을 할당합니다(이는 다른 말로 하면 최대 사후 확률 결정 규칙임). 이 알고리즘은 명시적으로 다음 단계를 수행합니다.

  1. 각 클래스 내의 예측 변수의 밀도를 추정합니다.

  2. 베이즈 규칙에 따라 사후 확률을 모델링합니다. 즉, 모든 k = 1,...,K에 대해 다음과 같습니다.

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

    여기서

    • Y는 관측값의 클래스 인덱스에 대응되는 확률 변수입니다.

    • X1,...,XP는 관측값의 확률 예측 변수입니다.

    • π(Y=k)는 클래스 인덱스가 k인 사전 확률입니다.

  3. 각 클래스에 대해 사후 확률을 추정하여 관측값을 분류한 다음, 최대 사후 확률을 산출하는 클래스에 관측값을 할당합니다.

예측 변수가 다항 분포를 구성하는 경우 사후 확률은 P^(Y=k|X1,..,XP)π(Y=k)Pmn(X1,...,XP|Y=k),입니다. 여기서 Pmn(X1,...,XP|Y=k)는 다항 분포의 확률 질량 함수입니다.

  • bag-of-tokens 모델과 같은 개수 기반 데이터를 분류할 때는 다항 분포를 사용하십시오(예: 'DistributionNames','mn' 설정).

  • 모델을 훈련시킨 후에는 새 데이터에 대한 레이블을 예측하는 C/C++ 코드를 생성할 수 있습니다. C/C++ 코드를 생성하려면 MATLAB Coder™가 필요합니다. 자세한 내용은 Introduction to Code Generation 항목을 참조하십시오.

알고리즘

  • 예측 변수 j가 조건부 정규분포를 가지는 경우(DistributionNames 이름-값 인수 참조), 소프트웨어는 가중 평균과 가중 표준편차의 무편향 추정을 클래스별로 계산하여 데이터에 분포를 피팅합니다. 각 클래스 k에 대해 다음과 같습니다.

    • 예측 변수 j의 가중 평균은 다음과 같습니다.

      x¯j|k={i:yi=k}wixij{i:yi=k}wi,

      여기서 wi는 관측값 i의 가중치입니다. 클래스 내의 가중치 합이 해당 클래스의 사전 확률이 되도록 가중치가 정규화됩니다.

    • 예측 변수 j의 가중 표준편차의 무편향 추정량은 다음과 같습니다.

      sj|k=[{i:yi=k}wi(xijx¯j|k)2z1|kz2|kz1|k]1/2,

      여기서 z1|k는 k 클래스 내의 가중치 합이고 z2|k는 k 클래스 내의 제곱 가중치 합입니다.

  • 모든 예측 변수가 조건부 다항 분포를 구성하는 경우('DistributionNames','mn'을 지정함), bag-of-tokens 모델을 사용하여 분포를 피팅합니다. 토큰 j가 클래스 k에 나타날 확률이 속성 DistributionParameters{k,j}에 저장됩니다. 가산성 평활화[2]를 사용하여 추정한 확률은 다음과 같습니다.

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

    여기서,

    • cj|k=nk{i:yi=k}xijwi{i:yi=k}wi,입니다. 이는 클래스 k에서 토큰 j의 가중 발생 횟수입니다.

    • nk는 클래스 k의 관측값 개수입니다.

    • wi는 관측값 i에 대한 가중치입니다. 클래스 내의 가중치 합이 해당 클래스의 사전 확률이 되도록 가중치가 정규화됩니다.

    • ck=j=1Pcj|k,입니다. 이는 클래스 k에서 모든 토큰의 총 가중 발생 횟수입니다.

  • 예측 변수 j가 조건부 다변량 다항 분포를 가지는 경우 다음과 같은 절차가 진행됩니다.

    1. 고유한 수준의 목록이 수집되고, 정렬된 목록이 CategoricalLevels에 저장되고, 각 수준이 Bin으로 간주됩니다. 각 예측 변수/클래스 조합은 개별적이고 독립적인 다항 확률 변수입니다.

    2. 각 클래스 k에 대해, CategoricalLevels{j}에 저장된 목록에 따라 각 범주형 수준의 인스턴스를 세게 됩니다.

    3. CategoricalLevels{j}에 있는 모든 수준에 대해, 클래스 k의 예측 변수 j가 수준 L을 가질 확률이 속성 DistributionParameters{k,j}에 저장됩니다. 가산성 평활화[2]를 사용하여 추정한 확률은 다음과 같습니다.

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

      여기서,

      • mj|k(L)=nk{i:yi=k}I{xij=L}wi{i:yi=k}wi,입니다. 이는 클래스 k에서 예측 변수 j가 L과 동일한 관측값의 가중 개수입니다.

      • nk는 클래스 k의 관측값 개수입니다.

      • xij = L이면 I{xij=L}=1이고 그렇지 않으면 0입니다.

      • wi는 관측값 i에 대한 가중치입니다. 클래스 내의 가중치 합이 해당 클래스의 사전 확률이 되도록 가중치가 정규화됩니다.

      • mj는 예측 변수 j의 고유한 수준 개수입니다.

      • mk는 클래스 k의 관측값의 가중 개수입니다.

  • Cost, PriorWeights 이름-값 인수를 지정할 경우 출력 모델 객체는 지정된 값을 각각 Cost, PriorW 속성에 저장합니다. Cost 속성은 사용자가 지정한 비용 행렬을 그대로 저장합니다. Prior 속성과 W 속성은 각각 정규화한 후의 사전 확률 및 관측값 가중치를 저장합니다. 자세한 내용은 오분류 비용 행렬, 사전 확률 및 관측값 가중치 항목을 참조하십시오.

  • 소프트웨어는 예측에 Cost 속성을 사용하지만, 훈련에는 이 속성을 사용하지 않습니다. 따라서 Cost는 읽기 전용이 아닙니다. 훈련된 모델을 만든 후에 점 표기법을 사용하여 속성값을 변경할 수 있습니다.

참고 문헌

[1] Hastie, T., R. Tibshirani, and J. Friedman. The Elements of Statistical Learning, Second Edition. NY: Springer, 2008.

[2] Manning, Christopher D., Prabhakar Raghavan, and Hinrich Schütze. Introduction to Information Retrieval, NY: Cambridge University Press, 2008.

확장 기능

버전 내역

R2014b에 개발됨

모두 확장