Main Content

ClassificationNaiveBayes

다중 클래스 분류를 위한 나이브 베이즈 분류

설명

ClassificationNaiveBayes는 다중 클래스 학습을 위한 나이브 베이즈(Naive Bayes) 분류기입니다. 훈련된 ClassificationNaiveBayes 분류기는 훈련 데이터, 모수 값, 데이터 분포, 사전 확률을 저장합니다. 이러한 분류기를 사용하여 재대입 예측값 추정(resubPredict 참조) 및 새 데이터에 대한 레이블 또는 사후 확률 예측(predict 참조) 등의 작업을 수행합니다.

생성

ClassificationNaiveBayes 객체는 fitcnb를 사용하여 생성할 수 있습니다.

속성

모두 확장

예측 변수 속성

읽기 전용 속성입니다.

예측 변수 이름으로, 문자형 벡터로 구성된 셀형 배열로 지정됩니다. PredictorNames에 포함된 요소의 순서는 예측 변수 이름이 훈련 데이터 X에 나타나는 순서와 일치합니다.

읽기 전용 속성입니다.

확장 예측 변수 이름으로, 문자형 벡터로 구성된 셀형 배열로 지정됩니다.

모델이 범주형 변수에 대한 가변수 인코딩을 사용하는 경우 ExpandedPredictorNames는 확장 변수를 설명하는 이름을 포함합니다. 그렇지 않은 경우, ExpandedPredictorNamesPredictorNames와 동일합니다.

읽기 전용 속성입니다.

범주형 예측 변수의 인덱스로, 양의 정수로 구성된 벡터로 지정됩니다. CategoricalPredictors는 대응하는 예측 변수가 범주형임을 나타내는 인덱스 값을 포함합니다. 인덱스 값은 1과 p 사이입니다. 여기서 p는 모델을 훈련시킬 때 사용되는 예측 변수의 개수입니다. 범주형 예측 변수가 없는 경우 이 속성은 비어 있습니다([]).

데이터형: single | double

읽기 전용 속성입니다.

다변량 다항 수준으로, 셀형 배열로 지정됩니다. CategoricalLevels의 길이는 예측 변수의 개수와 같습니다(size(X,2)).

CategoricalLevels의 셀은 훈련 중에 사용자가 'mvmn'으로 지정하는 예측 변수, 즉 다변량 다항 분포를 갖는 예측 변수에 대응됩니다. 다변량 다항 분포에 대응되지 않는 셀은 비어 있습니다([]).

예측 변수 j가 다변량 다항인 경우 CategoricalLevels{j}는 표본에 있는 예측 변수 j의 모든 고유한 값의 목록입니다. NaNunique(X(:,j))에서 제거되었습니다.

읽기 전용 속성입니다.

나이브 베이즈 분류기를 훈련시키는 데 사용되는 표준화되지 않은 예측 변수로, 숫자형 행렬로 지정됩니다. X의 각 행은 하나의 관측값에 대응되고, 각 열은 하나의 변수에 대응됩니다. 소프트웨어는 하나 이상의 누락값을 포함하는 관측값을 제외시키고, Y에서 대응되는 요소를 제거합니다.

예측 변수 분포 속성

읽기 전용 속성입니다.

예측 변수 분포로, 문자형 벡터 또는 문자형 벡터로 구성된 셀형 배열로 지정됩니다. fitcnb는 예측 변수 분포를 사용하여 예측 변수를 모델링합니다. 다음 표에는 사용 가능한 분포가 나열되어 있습니다.

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

DistributionNames이 문자형 벡터로 구성된 1×P 셀형 배열이면 fitcnb는 셀형 배열의 요소 j의 분포를 사용하여 특징 j를 모델링합니다.

예: 'mn'

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

데이터형: char | string | cell

읽기 전용 속성입니다.

분포 모수 추정값으로, 셀형 배열로 지정됩니다. DistributionParameters는 K×D 셀형 배열입니다. 여기서 셀 (k,d)는 k 클래스의 예측 변수 d의 인스턴스에 대한 분포 모수 추정값을 포함합니다. 행 순서는 속성 ClassNames에 있는 클래스 순서와 일치하고, 예측 변수 순서는 X의 열 순서와 일치합니다.

k 클래스에 예측 변수 j에 대한 관측값이 없으면 Distribution{k,j}는 비어 있습니다([]).

DistributionParameters의 요소는 예측 변수의 분포에 따라 달라집니다. 다음 표에서는 DistributionParameters{k,j}의 값을 설명합니다.

예측 변수 j의 분포예측 변수 jk 클래스에 대한 셀형 배열의 값
kernelKernelDistribution 모델. 셀 인덱싱과 점 표기법을 사용하여 속성을 표시합니다. 예를 들어, 세 번째 클래스의 예측 변수 2에 대한 커널 밀도의 추정된 대역폭을 표시하려면 Mdl.DistributionParameters{3,2}.Bandwidth를 사용합니다.
mn토큰 j가 k 클래스에 나타날 확률을 나타내는 스칼라. 자세한 내용은 다항 분포에 대해 추정된 확률 항목을 참조하십시오.
mvmnk 클래스의 예측 변수 j의 가능한 각 수준에 대한 확률을 포함하는 숫자형 벡터. 속성 CategoricalLevels에 저장된 예측 변수 j의 모든 고유한 수준의 정렬된 순서로 확률을 정렬합니다. 자세한 내용은 다변량 다항 분포에 대해 추정된 확률 항목을 참조하십시오.
normal2×1 숫자형 벡터. 첫 번째 요소는 표본평균이고 두 번째 요소는 표본 표준편차입니다. 자세한 내용은 정규분포 추정량 항목을 참조하십시오.

읽기 전용 속성입니다.

커널 평활화 방법의 유형으로, 커널의 이름 또는 커널 이름으로 구성된 셀형 배열로 지정됩니다. Kernel의 길이는 예측 변수의 개수와 같습니다(size(X,2)). Kernel{j}는 예측 변수 j에 대응되고, 커널 평활화 방법의 유형을 설명하는 문자형 벡터를 포함합니다. 어떤 셀이 비어 있으면([]) fitcnb가 커널 분포를 그 셀에 대응되는 예측 변수에 피팅하지 않은 것입니다.

다음 표에서는 지원되는 커널 평활화 방법의 유형을 설명합니다. 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}

예: 'box'

예: {'epanechnikov','normal'}

데이터형: char | string | cell

R2023b 이후

읽기 전용 속성입니다.

예측 변수 평균으로, 숫자형 벡터로 지정됩니다. fitcnb를 사용하여 나이브 베이즈 분류기를 훈련시킬 때 Standardize1 또는 true로 지정하면 Mu 벡터의 길이는 예측 변수 개수와 같습니다. 커널 분포가 아닌 예측 변수(예: 범주형 예측 변수)인 경우 벡터에는 0 값이 포함됩니다(DistributionNames 항목 참조).

fitcnb를 사용하여 나이브 베이즈 분류기를 훈련시킬 때 Standardize0 또는 false로 설정하면 Mu 값은 빈 벡터([])입니다.

데이터형: double

R2023b 이후

읽기 전용 속성입니다.

예측 변수 표준편차로, 숫자형 벡터로 지정됩니다. fitcnb를 사용하여 나이브 베이즈 분류기를 훈련시킬 때 Standardize1 또는 true로 지정하면 Sigma 벡터의 길이는 예측 변수 개수와 같습니다. 커널 분포가 아닌 예측 변수(예: 범주형 예측 변수)인 경우 벡터에는 1 값이 포함됩니다(DistributionNames 항목 참조).

fitcnb를 사용하여 나이브 베이즈 분류기를 훈련시킬 때 Standardize0 또는 false로 설정하면 Sigma 값은 빈 벡터([])입니다.

데이터형: double

읽기 전용 속성입니다.

커널 평활화 방법 밀도 지지 범위로, 셀형 배열로 지정됩니다. Support의 길이는 예측 변수의 개수와 같습니다(size(X,2)). 셀은 fitcnb가 커널 밀도를 적용하는 영역을 나타냅니다. 어떤 셀이 비어 있으면([]) fitcnb가 커널 분포를 그 셀에 대응되는 예측 변수에 피팅하지 않은 것입니다.

다음 표에서는 지원되는 옵션을 설명합니다.

설명
1×2 숫자형 행 벡터밀도 지지 범위가 지정된 범위(예: [L,U])에 적용됩니다. 여기서 LU는 각각 유한한 하한과 상한입니다.
'positive'밀도 지지 범위가 모든 양의 실수 값에 적용됩니다.
'unbounded'밀도 지지 범위가 모든 실수 값에 적용됩니다.

읽기 전용 속성입니다.

커널 평활화 방법에서의 윈도우 너비로, 숫자형 행렬로 지정됩니다. Width는 K×P 행렬입니다. 여기서 K는 데이터에 있는 클래스 개수이고 P는 예측 변수의 개수(size(X,2))입니다.

Width(k,j)k 클래스 내의 예측 변수 j의 커널 평활화 밀도에 대한 커널 평활화 방법의 윈도우 너비입니다. j 열에 있는 NaNfitcnb가 커널 밀도를 사용하여 예측 변수 j를 피팅하지 않았음을 나타냅니다.

응답 변수 속성

읽기 전용 속성입니다.

훈련 모델에 사용되는 고유한 클래스 이름으로, categorical형 배열 또는 문자형 배열, 논리형 벡터 또는 숫자형 벡터, 문자형 벡터로 구성된 셀형 배열로 지정됩니다.

ClassNamesY와 데이터형이 동일하며, 문자형 배열의 경우 K개의 요소 또는 행을 갖습니다. (소프트웨어는 string형 배열을 문자형 벡터로 구성된 셀형 배열로 처리합니다.)

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

읽기 전용 속성입니다.

응답 변수 이름으로, 문자형 벡터로 지정됩니다.

데이터형: char | string

읽기 전용 속성입니다.

나이브 베이즈 분류기를 훈련시키는 데 사용되는 클래스 레이블로, categorical형 배열이나 문자형 배열, 논리형 벡터나 숫자형 벡터, 또는 문자형 벡터로 구성된 셀형 배열로 지정됩니다. Y의 각 행은 이에 대응되는 X 행의 관측된 분류를 나타냅니다.

YY에서 모델을 훈련시키는 데 사용되는 데이터와 데이터형이 동일합니다. (소프트웨어는 string형 배열을 문자형 벡터로 구성된 셀형 배열로 처리합니다.)

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

훈련 속성

읽기 전용 속성입니다.

ClassificationNaiveBayes 모델을 훈련시키는 데 사용되는 모수 값으로, 객체로 지정됩니다. ModelParameters는 모수 값(예: 나이브 베이즈 분류기 훈련에 사용되는 이름-값 쌍의 인수 값)을 포함합니다.

점 표기법을 사용하여 ModelParameters의 속성에 액세스할 수 있습니다. 예를 들어, Mdl.ModelParameters.Support를 사용하여 커널 지지 범위에 액세스합니다.

읽기 전용 속성입니다.

XY에 저장된 훈련 데이터에 포함된 훈련 관측값 개수로, 숫자형 스칼라로 지정됩니다.

사전 확률로, 숫자형 벡터로 지정됩니다. Prior의 요소 순서는 Mdl.ClassNames의 요소 순서와 일치합니다.

fitcnbsum(Prior) = 1이 되도록 사용자가 'Prior' 이름-값 쌍의 인수를 사용하여 설정한 사전 확률을 정규화합니다.

Prior의 값은 최적 피팅 모델에 영향을 주지 않습니다. 따라서 PriorMdl을 훈련시킨 후에 점 표기법을 사용하여 재설정할 수 있습니다.

예: Mdl.Prior = [0.2 0.8]

데이터형: double | single

읽기 전용 속성입니다.

관측값 가중치로, Y와 동일한 행 개수를 갖는, 음이 아닌 값으로 구성된 벡터로 지정됩니다. W의 각 요소는 이에 대응되는 Y의 관측값의 상대적 중요도를 지정합니다. fitcnb는 특정 클래스 내의 가중치 합이 해당 클래스의 사전 확률이 되도록 사용자가 'Weights' 이름-값 쌍의 인수에 대해 설정한 값을 정규화합니다.

분류기 속성

오분류 비용으로, 숫자형 정사각 행렬로 지정됩니다. 여기서 Cost(i,j)는 어떤 점의 실제 클래스가 i인 경우 이 점을 j 클래스로 분류하는 데 드는 비용입니다. 행은 실제 클래스에 대응되고, 열은 예측 클래스에 대응됩니다. Cost의 행과 열 순서는 ClassNames의 클래스 순서와 일치합니다.

오분류 비용 행렬의 대각선상 요소는 0이어야 합니다.

Cost의 값은 훈련에 영향을 주지 않습니다. CostMdl을 훈련시킨 후에 점 표기법을 사용하여 재설정할 수 있습니다.

예: Mdl.Cost = [0 0.5 ; 1 0]

데이터형: double | single

읽기 전용 속성입니다.

하이퍼파라미터에 대한 교차 검증 최적화로, BayesianOptimization 객체 또는 하이퍼파라미터 및 관련 값으로 구성된 테이블로 지정됩니다. 이 속성은 모델을 생성할 때 'OptimizeHyperparameters' 이름-값 쌍의 인수가 비어 있지 않은 경우 비어 있지 않습니다. HyperparameterOptimizationResults의 값은 모델을 생성할 당시의 HyperparameterOptimizationOptions 구조체 내 Optimizer 필드의 설정에 따라 달라집니다.

Optimizer 필드의 값HyperparameterOptimizationResults의 값
'bayesopt'(디폴트 값)BayesianOptimization 클래스의 객체
'gridsearch' 또는 'randomsearch'사용된 하이퍼파라미터, 관측된 목적 함수 값(교차 검증 손실), 그리고 관측값 순위가 가장 낮은 값(최상)에서 가장 높은 값(최하)순으로 포함된 테이블

분류 점수 변환 방식으로, 문자형 벡터 또는 함수 핸들로 지정됩니다. 다음 표에는 사용 가능한 문자형 벡터가 요약되어 있습니다.

설명
"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® 함수나 사용자가 직접 정의하는 함수의 경우, 이에 대한 함수 핸들을 점수 변환에 사용하십시오. 함수 핸들은 행렬(원래 점수)을 받아 동일한 크기의 행렬(변환된 점수)을 반환합니다.

예: Mdl.ScoreTransform = 'logit'

데이터형: char | string | function handle

객체 함수

compactReduce size of machine learning model
compareHoldoutCompare accuracies of two classification models using new data
crossvalCross-validate machine learning model
edgeClassification edge for naive Bayes classifier
incrementalLearnerConvert naive Bayes classification model to incremental learner
limeLocal interpretable model-agnostic explanations (LIME)
logpLog unconditional probability density for naive Bayes classifier
lossClassification loss for naive Bayes classifier
marginClassification margins for naive Bayes classifier
partialDependenceCompute partial dependence
plotPartialDependenceCreate partial dependence plot (PDP) and individual conditional expectation (ICE) plots
predictClassify observations using naive Bayes classifier
resubEdgeResubstitution classification edge
resubLossResubstitution classification loss
resubMarginResubstitution classification margin
resubPredictClassify training data using trained classifier
shapleyShapley values
testckfoldCompare accuracies of two classification models by repeated cross-validation

예제

모두 축소

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

fisheriris 데이터 세트를 불러옵니다. X를 150개 붓꽃에 대한 4개의 꽃잎 측정값을 포함하는 숫자형 행렬로 생성합니다. Y를 이에 대응되는 붓꽃 종을 포함하는 문자형 벡터로 구성된 셀형 배열로 생성합니다.

load fisheriris
X = meas;
Y = species;

예측 변수 X와 클래스 레이블 Y를 사용하여 나이브 베이즈 분류기를 훈련시킵니다. fitcnb는 각 예측 변수가 독립적이라고 가정하며 기본적으로 정규분포를 사용하여 각 예측 변수를 피팅합니다.

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


Mdl은 훈련된 ClassificationNaiveBayes 분류기입니다. Mdl 속성 중 일부는 명령 창에 나타납니다.

점 표기법을 사용하여 Mdl의 속성을 표시합니다. 예를 들어, 클래스 이름과 사전 확률을 표시합니다.

Mdl.ClassNames
ans = 3x1 cell
    {'setosa'    }
    {'versicolor'}
    {'virginica' }

Mdl.Prior
ans = 1×3

    0.3333    0.3333    0.3333

Mdl.Prior에서 클래스 사전 확률의 순서는 Mdl.ClassNames에 포함된 클래스의 순서와 일치합니다. 기본적으로, 사전 확률은 데이터에서 이러한 클래스가 나타날 각각의 상대 도수입니다. 또는 'Prior' 이름-값 쌍의 인수를 사용하여 fitcnb를 호출할 때 사전 확률을 설정할 수 있습니다.

분류기를 훈련시킨 후에 점 표기법을 사용하여 사전 확률을 설정합니다. 예를 들어, 사전 확률을 각각 0.5, 0.2, 0.3으로 설정합니다.

Mdl.Prior = [0.5 0.2 0.3];

이제 이 훈련된 분류기를 사용하여 추가적인 작업을 수행할 수 있습니다. 예를 들어, predict를 사용해 새 측정값에 레이블을 지정하거나 crossval을 사용해 분류기를 교차 검증할 수 있습니다.

나이브 베이즈 분류기를 훈련시키고 교차 검증합니다. fitcnb는 기본적으로 10겹 교차 검증을 구현합니다. 그런 다음 교차 검증된 분류 오차를 추정합니다.

ionosphere 데이터 세트를 불러옵니다. 안정성을 위해 처음 두 개의 예측 변수를 제거합니다.

load ionosphere
X = X(:,3:end);
rng('default')  % for reproducibility

예측 변수 X와 클래스 레이블 Y를 사용하여 나이브 베이즈 분류기를 훈련시키고 교차 검증합니다. 권장되는 방법은 클래스 이름을 지정하는 것입니다. fitcnb는 각 예측 변수가 조건부 분포 및 정규분포된다고 가정합니다.

CVMdl = fitcnb(X,Y,'ClassNames',{'b','g'},'CrossVal','on')
CVMdl = 
  ClassificationPartitionedModel
    CrossValidatedModel: 'NaiveBayes'
         PredictorNames: {'x1'  'x2'  'x3'  'x4'  'x5'  'x6'  'x7'  'x8'  'x9'  'x10'  'x11'  'x12'  'x13'  'x14'  'x15'  'x16'  'x17'  'x18'  'x19'  'x20'  'x21'  'x22'  'x23'  'x24'  'x25'  'x26'  'x27'  'x28'  'x29'  'x30'  'x31'  'x32'}
           ResponseName: 'Y'
        NumObservations: 351
                  KFold: 10
              Partition: [1x1 cvpartition]
             ClassNames: {'b'  'g'}
         ScoreTransform: 'none'


CVMdlClassificationPartitionedModel 모델로 교차 검증된 나이브 베이즈 분류기입니다. 또는, 훈련된 ClassificationNaiveBayes 모델을 crossval로 전달하여 교차 검증할 수 있습니다.

점 표기법을 사용하여 CVMdl의 첫 번째 훈련 겹을 표시합니다.

CVMdl.Trained{1}
ans = 
  CompactClassificationNaiveBayes
              ResponseName: 'Y'
     CategoricalPredictors: []
                ClassNames: {'b'  'g'}
            ScoreTransform: 'none'
         DistributionNames: {1x32 cell}
    DistributionParameters: {2x32 cell}


각각의 겹은 데이터의 90%에 대해 훈련된 CompactClassificationNaiveBayes 모델입니다.

새 데이터에 대해 예측을 수행할 때에는 전체 나이브 베이즈 모델이나 간소 나이브 베이즈 모델이 사용되지 않습니다. 대신, CVMdlkfoldLoss에 전달하여 일반화 오차를 추정하는 데 사용하십시오.

genError = kfoldLoss(CVMdl)
genError = 0.1852

평균적으로 일반화 오차는 약 19%입니다.

예측 변수에 대해 서로 다른 조건부 분포를 지정하거나, 일반화 오차를 줄이기 위해 조건부 분포 모수를 조정할 수 있습니다.

세부 정보

모두 확장

알고리즘

모두 확장

참고 문헌

[1] Hastie, Trevor, Robert Tibshirani, and Jerome Friedman. The Elements of Statistical Learning: Data Mining, Inference, and Prediction. 2nd ed. Springer Series in Statistics. New York, NY: Springer, 2009. https://doi.org/10.1007/978-0-387-84858-7.

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

확장 기능

버전 내역

R2014b에 개발됨

모두 확장