Main Content

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

fitcecoc

서포트 벡터 머신 또는 다른 분류기에 대해 다중클래스 모델 피팅하기

설명

Mdl = fitcecoc(Tbl,ResponseVarName)은 테이블 Tbl에 포함된 예측 변수와 Tbl.ResponseVarName에 포함된 클래스 레이블을 사용하여 전체 훈련된 다중클래스 오류 수정 출력 코드(ECOC) 모델을 반환합니다. fitcecoc는 일대일 코딩 설계를 활용하여 K(K – 1)/2개의 이진 서포트 벡터 머신(SVM) 모델을 사용합니다. 여기서 K는 고유한 클래스 레이블(레벨) 개수입니다. MdlClassificationECOC 모델입니다.

Mdl = fitcecoc(Tbl,formula)는 테이블 Tbl에 포함된 예측 변수와 클래스 레이블을 사용하여 ECOC 모델을 반환합니다. formula는 훈련에 사용된 Tbl에 포함된 응답 변수와 예측 변수의 부분 집합에 대한 설명 모델입니다.

Mdl = fitcecoc(Tbl,Y)는 테이블 Tbl에 포함된 예측 변수와 벡터 Y에 포함된 클래스 레이블을 사용하여 ECOC 모델을 반환합니다.

예제

Mdl = fitcecoc(X,Y)는 예측 변수 X와 클래스 레이블 Y를 사용하여 훈련된 ECOC 모델을 반환합니다.

예제

Mdl = fitcecoc(___,Name,Value)는 위에 열거된 구문을 사용하여 하나 이상의 Name,Value 쌍의 인수로 지정된 추가 옵션을 통해 ECOC 모델을 반환합니다.

예를 들어, 다른 이진 학습기 또는 다른 코딩 설계를 지정하거나 교차 검증할 수 있습니다. Kfold Name,Value 쌍의 인수를 사용하여 교차 검증을 수행하는 것이 좋습니다. 교차 검증 결과를 통해 모델이 얼마나 잘 일반화되는지 확인할 수 있습니다.

[Mdl,HyperparameterOptimizationResults] = fitcecoc(___,Name,Value)OptimizeHyperparameters 이름-값 쌍의 인수를 지정하고 선형 또는 커널 이진 학습기를 사용할 경우 하이퍼파라미터 최적화 세부 정보도 반환합니다. 다른 Learners의 경우, MdlHyperparameterOptimizationResults 속성에 결과가 들어있습니다.

예제

모두 축소

서포트 벡터 머신(SVM) 이진 학습기를 사용하여 다중클래스 오류 수정 출력 코드(ECOC) 모델을 훈련시킵니다.

피셔(Fisher)의 붓꽃 데이터 세트를 불러옵니다. 예측 변수 데이터 X와 응답 변수 데이터 Y를 지정합니다.

load fisheriris
X = meas;
Y = species;

디폴트 옵션을 사용하여 다중클래스 ECOC 모델을 훈련시킵니다.

Mdl = fitcecoc(X,Y)
Mdl = 
  ClassificationECOC
             ResponseName: 'Y'
    CategoricalPredictors: []
               ClassNames: {'setosa'  'versicolor'  'virginica'}
           ScoreTransform: 'none'
           BinaryLearners: {3x1 cell}
               CodingName: 'onevsone'


MdlClassificationECOC 모델입니다. 기본적으로, fitcecoc는 SVM 이진 학습기와 일대일 코딩 설계를 사용합니다. 점 표기법을 사용하여 Mdl 속성에 액세스할 수 있습니다.

클래스 이름과 코딩 설계 행렬을 표시합니다.

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

CodingMat = Mdl.CodingMatrix
CodingMat = 3×3

     1     1     0
    -1     0     1
     0    -1    -1

3개 클래스에 대해 일대일 코딩 설계를 하면 3개의 이진 학습기가 생성됩니다. CodingMat의 열은 학습기에 대응되고 행은 클래스에 대응됩니다. 클래스 순서는 Mdl.ClassNames의 순서와 일치합니다. 예를 들어, CodingMat(:,1)[1; –1; 0]이며, 'setosa''versicolor'로 분류된 모든 관측값을 사용하여 첫 번째 SVM 이진 학습기를 훈련시켰음을 나타냅니다. 'setosa'1에 대응되므로 양성 클래스이고, 'versicolor'–1에 대응되므로 음성 클래스입니다.

셀 인덱싱과 점 표기법을 사용하여 이진 학습기 각각에 액세스할 수 있습니다.

Mdl.BinaryLearners{1}   % The first binary learner
ans = 
  CompactClassificationSVM
             ResponseName: 'Y'
    CategoricalPredictors: []
               ClassNames: [-1 1]
           ScoreTransform: 'none'
                     Beta: [4x1 double]
                     Bias: 1.4492
         KernelParameters: [1x1 struct]


재대입 분류 오차를 계산합니다.

error = resubLoss(Mdl)
error = 0.0067

훈련 데이터에 대한 분류 오차가 작지만, 분류기가 과적합된 모델일 수 있습니다. 그 대신 crossval을 사용하여 분류기를 교차 검증하여 교차 검증 분류 오차를 계산할 수 있습니다.

디폴트 선형 학습기 템플릿을 만든 다음 이 템플릿을 사용하여 여러 이진 선형 분류 모델이 포함된 ECOC 모델을 훈련시킵니다.

NLP(자연어 처리) 데이터 세트를 불러옵니다.

load nlpdata

X는 예측 변수 데이터로 구성된 희소 행렬이고, Y는 클래스 레이블로 구성된 categorical형 벡터입니다. 데이터는 13개 클래스를 포함합니다.

디폴트 선형 학습기 템플릿을 만듭니다.

t = templateLinear
t = 
Fit template for Linear.
    Learner: 'svm'

t는 선형 학습기에 대한 템플릿 객체입니다. t의 속성은 모두 비어 있습니다. ECOC 다중클래스 분류를 위해 fitcecoc 같은 훈련 함수에 t를 전달하면 빈 속성이 각각의 디폴트 값으로 설정됩니다. 예를 들면, Type"classification"으로 설정됩니다. 디폴트 값을 수정하려면 templateLinear 이름-값 인수를 참조하십시오.

문서 웹 페이지에 나오는 단어의 도수 분포가 주어지면 어떤 소프트웨어 제품에 대한 페이지인지를 식별할 수 있도록 다중 이진 선형 분류 모델이 포함된 ECOC 모델을 훈련시킵니다. 훈련 시간을 단축하도록 예측 변수 데이터를 전치하고 관측값이 열에 대응됨을 지정하십시오.

X = X';
rng(1); % For reproducibility 
Mdl = fitcecoc(X,Y,'Learners',t,'ObservationsIn','columns')
Mdl = 
  CompactClassificationECOC
      ResponseName: 'Y'
        ClassNames: [comm    dsp    ecoder    fixedpoint    hdlcoder    phased    physmod    simulink    stats    supportpkg    symbolic    vision    xpc]
    ScoreTransform: 'none'
    BinaryLearners: {78x1 cell}
      CodingMatrix: [13x78 double]


또는 "Learners","Linear"를 지정하여 디폴트 선형 분류 모델을 포함하는 ECOC 모델을 훈련시킬 수 있습니다.

메모리를 절약하기 위해 fitcecoc는 선형 분류 학습기를 포함하는 훈련된 ECOC 모델을 CompactClassificationECOC 모델 객체로 반환합니다.

SVM 이진 학습기를 사용하여 ECOC 분류기를 교차 검증하고 일반화된 분류 오차를 추정합니다.

피셔(Fisher)의 붓꽃 데이터 세트를 불러옵니다. 예측 변수 데이터 X와 응답 변수 데이터 Y를 지정합니다.

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

SVM 템플릿을 생성하고 예측 변수를 표준화합니다.

t = templateSVM('Standardize',true)
t = 
Fit template for SVM.
    Standardize: 1

t는 SVM 템플릿입니다. 템플릿 객체의 속성 대부분은 비어 있습니다. ECOC 분류기를 훈련시킬 때 소프트웨어는 적합한 속성을 해당 디폴트 값으로 설정합니다.

ECOC 분류기를 훈련시키고 클래스 순서를 지정합니다.

Mdl = fitcecoc(X,Y,'Learners',t,...
    'ClassNames',{'setosa','versicolor','virginica'});

MdlClassificationECOC 분류기입니다. 점 표기법을 사용하여 해당 속성에 액세스할 수 있습니다.

10겹 교차 검증을 사용하여 Mdl을 교차 검증합니다.

CVMdl = crossval(Mdl);

CVMdl은 교차 검증된 ECOC 분류기 ClassificationPartitionedECOC입니다.

일반화된 분류 오차를 추정합니다.

genError = kfoldLoss(CVMdl)
genError = 0.0400

일반화된 분류 오차는 4%이며, 이는 ECOC 분류기가 일반화를 상당히 잘 함을 나타냅니다.

SVM 이진 학습기를 사용하여 ECOC 분류기를 훈련시킵니다. 먼저 훈련-표본 레이블과 클래스 사후 확률을 예측합니다. 그런 다음 그리드의 각 점에서 클래스 사후 확률 최댓값을 예측합니다. 결과를 시각화합니다.

피셔(Fisher)의 붓꽃 데이터 세트를 불러옵니다. 꽃잎 치수를 예측 변수로 지정하고 종 이름을 응답 변수로 지정합니다.

load fisheriris
X = meas(:,3:4);
Y = species;
rng(1); % For reproducibility

SVM 템플릿을 생성합니다. 예측 변수를 표준화하고 가우스 커널을 지정합니다.

t = templateSVM('Standardize',true,'KernelFunction','gaussian');

t는 SVM 템플릿입니다. 해당 속성 대부분이 비어 있습니다. 소프트웨어는 ECOC 분류기를 훈련시킬 때 적합한 속성을 해당 디폴트 값으로 설정합니다.

SVM 템플릿을 사용하여 ECOC 분류기를 훈련시킵니다. 'FitPosterior' 이름-값 쌍의 인수를 사용하여 분류 점수를 클래스 사후 확률(predict 또는 resubPredict에서 반환됨)로 변환합니다. 'ClassNames' 이름-값 쌍의 인수를 사용하여 클래스 순서를 지정합니다. 'Verbose' 이름-값 쌍의 인수를 사용하여 훈련 중에 진단 메시지를 표시합니다.

Mdl = fitcecoc(X,Y,'Learners',t,'FitPosterior',true,...
    'ClassNames',{'setosa','versicolor','virginica'},...
    'Verbose',2);
Training binary learner 1 (SVM) out of 3 with 50 negative and 50 positive observations.
Negative class indices: 2
Positive class indices: 1

Fitting posterior probabilities for learner 1 (SVM).
Training binary learner 2 (SVM) out of 3 with 50 negative and 50 positive observations.
Negative class indices: 3
Positive class indices: 1

Fitting posterior probabilities for learner 2 (SVM).
Training binary learner 3 (SVM) out of 3 with 50 negative and 50 positive observations.
Negative class indices: 3
Positive class indices: 2

Fitting posterior probabilities for learner 3 (SVM).

MdlClassificationECOC 모델입니다. 동일한 SVM 템플릿이 각각의 이진 학습기에 적용되지만, 템플릿으로 구성된 셀형 벡터를 전달하여 이진 학습기별로 옵션을 조정할 수 있습니다.

훈련-표본 레이블과 클래스 사후 확률을 예측합니다. 'Verbose' 이름-값 쌍의 인수를 사용하여 레이블과 클래스 사후 확률을 계산하는 중에 진단 메시지를 표시합니다.

[label,~,~,Posterior] = resubPredict(Mdl,'Verbose',1);
Predictions from all learners have been computed.
Loss for all observations has been computed.
Computing posterior probabilities...
Mdl.BinaryLoss
ans = 
'quadratic'

소프트웨어는 가장 작은 평균 이진 손실을 생성하는 클래스에 관측값을 할당합니다. 모든 이진 학습기가 사후 확률을 계산하기 때문에 이진 손실 함수는 quadratic입니다.

임의의 결과로 구성된 집합을 표시합니다.

idx = randsample(size(X,1),10,1);
Mdl.ClassNames
ans = 3x1 cell
    {'setosa'    }
    {'versicolor'}
    {'virginica' }

table(Y(idx),label(idx),Posterior(idx,:),...
    'VariableNames',{'TrueLabel','PredLabel','Posterior'})
ans=10×3 table
      TrueLabel         PredLabel                     Posterior               
    ______________    ______________    ______________________________________

    {'virginica' }    {'virginica' }     0.0039322      0.003987       0.99208
    {'virginica' }    {'virginica' }      0.017067      0.018263       0.96467
    {'virginica' }    {'virginica' }      0.014948      0.015856        0.9692
    {'versicolor'}    {'versicolor'}    2.2197e-14       0.87318       0.12682
    {'setosa'    }    {'setosa'    }         0.999    0.00025092    0.00074638
    {'versicolor'}    {'virginica' }    2.2195e-14       0.05943       0.94057
    {'versicolor'}    {'versicolor'}    2.2194e-14       0.97001      0.029985
    {'setosa'    }    {'setosa'    }         0.999    0.00024991     0.0007474
    {'versicolor'}    {'versicolor'}     0.0085642       0.98259     0.0088487
    {'setosa'    }    {'setosa'    }         0.999    0.00025013    0.00074717

Posterior의 열은 Mdl.ClassNames의 클래스 순서에 대응됩니다.

관측된 예측 변수 공간에서 값의 그리드를 정의합니다. 그리드의 각 인스턴스에 대해 사후 확률을 예측합니다.

xMax = max(X);
xMin = min(X);

x1Pts = linspace(xMin(1),xMax(1));
x2Pts = linspace(xMin(2),xMax(2));
[x1Grid,x2Grid] = meshgrid(x1Pts,x2Pts);

[~,~,~,PosteriorRegion] = predict(Mdl,[x1Grid(:),x2Grid(:)]);

그리드의 각 좌표에 대해 모든 클래스 중에서 최대 클래스 사후 확률을 플로팅합니다.

contourf(x1Grid,x2Grid,...
        reshape(max(PosteriorRegion,[],2),size(x1Grid,1),size(x1Grid,2)));
h = colorbar;
h.YLabel.String = 'Maximum posterior';
h.YLabel.FontSize = 15;

hold on
gh = gscatter(X(:,1),X(:,2),Y,'krk','*xd',8);
gh(2).LineWidth = 2;
gh(3).LineWidth = 2;

title('Iris Petal Measurements and Maximum Posterior')
xlabel('Petal length (cm)')
ylabel('Petal width (cm)')
axis tight
legend(gh,'Location','NorthWest')
hold off

Figure contains an axes object. The axes object with title Iris Petal Measurements and Maximum Posterior, xlabel Petal length (cm), ylabel Petal width (cm) contains 4 objects of type contour, line. One or more of the lines displays its values using only markers These objects represent setosa, versicolor, virginica.

대리 분할을 활용하는 결정 트리로 구성된 GentleBoost 앙상블을 사용하여 일대전부 ECOC 분류기를 훈련시킵니다. 훈련 속도를 높이기 위해 숫자형 예측 변수를 비닝하고 병렬 연산을 사용합니다. 비닝은 fitcecoc가 트리 학습기를 사용하는 경우에만 유효합니다. 훈련 후에 10겹 교차 검증을 사용하여 분류 오차를 추정합니다. 병렬 연산을 수행하려면 Parallel Computing Toolbox™가 필요합니다.

표본 데이터를 불러오기

arrhythmia 데이터 세트를 불러온 후 살펴봅니다.

load arrhythmia
[n,p] = size(X)
n = 452
p = 279
isLabels = unique(Y);
nLabels = numel(isLabels)
nLabels = 13
tabulate(categorical(Y))
  Value    Count   Percent
      1      245     54.20%
      2       44      9.73%
      3       15      3.32%
      4       15      3.32%
      5       13      2.88%
      6       25      5.53%
      7        3      0.66%
      8        2      0.44%
      9        9      1.99%
     10       50     11.06%
     14        4      0.88%
     15        5      1.11%
     16       22      4.87%

데이터 세트에는 279개 예측 변수가 있으며, 표본 크기는 452개로 상대적으로 작습니다. 16개의 고유한 레이블 중 13개만 응답 변수(Y)에 나타납니다. 각 레이블은 다양한 부정맥의 정도를 나타내며, 관측값 중 54.20%가 클래스 1에 있습니다.

일대전부 ECOC 분류기 훈련시키기

앙상블 템플릿을 생성합니다. 적어도 세 개의 인수, 방법, 학습기 개수 및 학습기 유형을 지정해야 합니다. 이 예에서는 방법으로 'GentleBoost', 학습기 개수로 100을 지정하고, 누락된 관측값이 있으므로 대리 분할을 사용하는 결정 트리 템플릿을 지정하십시오.

tTree = templateTree('surrogate','on');
tEnsemble = templateEnsemble('GentleBoost',100,tTree);

tEnsemble은 템플릿 객체입니다. 해당 속성의 대부분은 비어 있지만, 소프트웨어가 훈련 중에 해당 디폴트 값으로 속성을 채웁니다.

결정 트리로 구성된 앙상블을 이진 학습기로 사용하여 일대전부 ECOC 분류기를 훈련시킵니다. 훈련 속도를 높이기 위해 비닝과 병렬 연산을 사용합니다.

  • 비닝('NumBins',50) — 훈련 데이터 세트가 큰 경우 'NumBins' 이름-값 쌍의 인수를 사용하여 훈련 속도를 높일 수 있습니다(이 경우 정확도가 떨어질 수 있음). 이 인수는 fitcecoc가 트리 학습기를 사용하는 경우에만 유효합니다. 'NumBins' 값을 지정하면 모든 숫자형 예측 변수를 지정된 개수의 등확률 Bin으로 비닝한 다음 원래 데이터가 아닌 Bin 인덱스에서 트리를 성장시킵니다. 먼저 'NumBins',50을 사용해 본 후에 정확도와 훈련 속도에 따라 'NumBins'를 변경해 볼 수 있습니다.

  • 병렬 연산('Options',statset('UseParallel',true)) — Parallel Computing Toolbox 라이선스가 있는 경우 각각의 이진 학습기를 풀에 있는 각 워커로 전송하는 병렬 연산을 사용하여 계산 속도를 높일 수 있습니다. 워커 개수는 시스템 구성에 따라 달라집니다. 이진 학습기에 결정 트리를 사용할 때는 fitcecoc는 듀얼 코어 이상의 시스템에서 Intel® TBB(Threading Building Block)를 사용하여 훈련을 병렬화합니다. 따라서 단일 컴퓨터에서 'UseParallel' 옵션을 지정하는 것은 도움이 되지 않습니다. 이 옵션은 클러스터에서 사용하십시오.

또한, 사전 확률이 1/K임을 지정합니다. 여기서 K = 13은 고유한 클래스 개수입니다.

options = statset('UseParallel',true);
Mdl = fitcecoc(X,Y,'Coding','onevsall','Learners',tEnsemble,...
                'Prior','uniform','NumBins',50,'Options',options);
Starting parallel pool (parpool) using the 'local' profile ...
Connected to the parallel pool (number of workers: 6).

MdlClassificationECOC 모델입니다.

교차 검증

10겹 교차 검증을 사용하여 ECOC 분류기를 교차 검증합니다.

CVMdl = crossval(Mdl,'Options',options);
Warning: One or more folds do not contain points from all the groups.

CVMdlClassificationPartitionedECOC 모델입니다. 경고는 소프트웨어가 최소 1겹을 훈련시키는데 일부 클래스가 사용되지 않았음을 나타냅니다. 따라서, 이러한 겹은 누락된 클래스에 대한 레이블을 예측할 수 없습니다. 사용자는 셀 인덱싱과 점 표기법을 사용하여 겹의 결과를 검사할 수 있습니다. 예를 들어, CVMdl.Trained{1}을 입력하여 첫 번째 겹의 결과에 액세스할 수 있습니다.

교차 검증된 ECOC 분류기를 사용하여 검증-겹 레이블을 예측합니다. confusionchart를 사용하여 혼동행렬을 계산할 수 있습니다. 내부 위치 속성을 변경하여 차트를 이동하고 크기 조정하여 행 요약에 백분율이 나타나도록 합니다.

oofLabel = kfoldPredict(CVMdl,'Options',options);
ConfMat = confusionchart(Y,oofLabel,'RowSummary','total-normalized');
ConfMat.InnerPosition = [0.10 0.12 0.85 0.85];

비닝된 데이터 재현하기

훈련된 모델의 BinEdges 속성과 discretize 함수를 사용하여, 비닝된 예측 변수 데이터를 재현합니다.

X = Mdl.X; % Predictor data
Xbinned = zeros(size(X));
edges = Mdl.BinEdges;
% Find indices of binned predictors.
idxNumeric = find(~cellfun(@isempty,edges));
if iscolumn(idxNumeric)
    idxNumeric = idxNumeric';
end
for j = idxNumeric 
    x = X(:,j);
    % Convert x to array if x is a table.
    if istable(x)
        x = table2array(x);
    end
    % Group x into bins by using the discretize function.
    xbinned = discretize(x,[-inf; edges{j}; inf]);
    Xbinned(:,j) = xbinned;
end

Xbinned는 숫자형 예측 변수에 대해 1부터 Bin 개수 사이의 Bin 인덱스를 포함합니다. 범주형 예측 변수의 경우 Xbinned 값은 0입니다. XNaN을 포함하는 경우 이에 대응되는 Xbinned 값은 NaN이 됩니다.

fitcecoc를 사용하여 하이퍼파라미터를 자동으로 최적화합니다.

fisheriris 데이터 세트를 불러옵니다.

load fisheriris
X = meas;
Y = species;

자동 하이퍼파라미터 최적화를 사용하여 5겹 교차 검증 손실을 최소화하는 하이퍼파라미터를 구합니다. 재현이 가능하도록 난수 시드값을 설정하고 'expected-improvement-plus' 획득 함수를 사용합니다.

rng default
Mdl = fitcecoc(X,Y,'OptimizeHyperparameters','auto',...
    'HyperparameterOptimizationOptions',struct('AcquisitionFunctionName',...
    'expected-improvement-plus'))
|===================================================================================================================================|
| Iter | Eval   | Objective   | Objective   | BestSoFar   | BestSoFar   |       Coding | BoxConstraint|  KernelScale |  Standardize |
|      | result |             | runtime     | (observed)  | (estim.)    |              |              |              |              |
|===================================================================================================================================|
|    1 | Best   |     0.18667 |      16.853 |     0.18667 |     0.18667 |     onevsall |       76.389 |    0.0012205 |         true |
|    2 | Best   |     0.10667 |     0.39042 |     0.10667 |     0.11235 |     onevsone |    0.0013787 |       41.108 |        false |
|    3 | Best   |        0.04 |      1.0649 |        0.04 |     0.10177 |     onevsall |       16.632 |      0.18987 |        false |
|    4 | Accept |    0.046667 |     0.52451 |        0.04 |    0.091841 |     onevsone |      0.04843 |    0.0042504 |         true |
|    5 | Accept |        0.04 |      1.0138 |        0.04 |    0.040003 |     onevsall |       16.708 |      0.21334 |        false |
|    6 | Accept |     0.33333 |     0.38638 |        0.04 |    0.040005 |     onevsall |    0.0010041 |       21.936 |        false |
|    7 | Accept |     0.47333 |      13.566 |        0.04 |    0.039969 |     onevsall |       94.884 |     0.004214 |        false |
|    8 | Accept |        0.04 |     0.60207 |        0.04 |    0.039876 |     onevsone |     0.077785 |     0.010622 |         true |
|    9 | Accept |        0.26 |      13.315 |        0.04 |    0.039858 |     onevsall |       8.9153 |    0.0033389 |        false |
|   10 | Accept |    0.046667 |      0.6207 |        0.04 |    0.039855 |     onevsall |       4.9266 |      0.18135 |        false |
|   11 | Accept |        0.04 |     0.38947 |        0.04 |    0.039845 |     onevsone |     0.014352 |     0.024917 |         true |
|   12 | Accept |    0.046667 |     0.40265 |        0.04 |    0.039728 |     onevsone |     0.059581 |      0.15666 |         true |
|   13 | Accept |        0.06 |     0.41582 |        0.04 |    0.039703 |     onevsone |     0.004907 |      0.62229 |         true |
|   14 | Accept |    0.046667 |     0.29771 |        0.04 |    0.039733 |     onevsone |    0.0010462 |     0.018383 |         true |
|   15 | Accept |        0.04 |     0.33394 |        0.04 |    0.039437 |     onevsone |    0.0014013 |    0.0010097 |         true |
|   16 | Accept |        0.04 |     0.56882 |        0.04 |     0.03971 |     onevsone |       2.3093 |     0.038776 |         true |
|   17 | Accept |        0.06 |      4.3313 |        0.04 |    0.038874 |     onevsone |       4.1623 |    0.0016004 |         true |
|   18 | Accept |    0.046667 |      2.0911 |        0.04 |    0.039388 |     onevsone |       128.63 |      0.03404 |         true |
|   19 | Accept |        0.04 |     0.46457 |        0.04 |    0.038396 |     onevsone |       21.297 |        1.187 |         true |
|   20 | Accept |        0.08 |     0.34451 |        0.04 |    0.038635 |     onevsall |       33.105 |       8.1376 |        false |
|===================================================================================================================================|
| Iter | Eval   | Objective   | Objective   | BestSoFar   | BestSoFar   |       Coding | BoxConstraint|  KernelScale |  Standardize |
|      | result |             | runtime     | (observed)  | (estim.)    |              |              |              |              |
|===================================================================================================================================|
|   21 | Accept |        0.04 |     0.40208 |        0.04 |    0.038644 |     onevsone |       940.62 |       2.5021 |         true |
|   22 | Accept |        0.08 |     0.42747 |        0.04 |    0.038577 |     onevsone |       116.39 |       115.89 |         true |
|   23 | Accept |     0.16667 |     0.49419 |        0.04 |    0.038565 |     onevsone |      0.42894 |       42.359 |         true |
|   24 | Accept |        0.04 |     0.33769 |        0.04 |    0.038555 |     onevsone |       154.48 |      0.70993 |         true |
|   25 | Accept |        0.08 |      3.9556 |        0.04 |    0.038539 |     onevsone |       870.52 |    0.0010486 |         true |
|   26 | Accept |    0.046667 |     0.53197 |        0.04 |    0.038542 |     onevsone |      0.14081 |      0.17365 |        false |
|   27 | Accept |    0.046667 |     0.40816 |        0.04 |    0.038539 |     onevsone |    0.0040863 |     0.017832 |        false |
|   28 | Accept |    0.046667 |     0.86657 |        0.04 |    0.038522 |     onevsone |      0.14137 |    0.0017205 |        false |
|   29 | Accept |    0.046667 |     0.61553 |        0.04 |    0.038529 |     onevsone |        9.504 |     0.017258 |        false |
|   30 | Accept |    0.046667 |     0.35209 |        0.04 |    0.038515 |     onevsone |       18.974 |       2.1636 |        false |

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

Best observed feasible point:
     Coding     BoxConstraint    KernelScale    Standardize
    ________    _____________    ___________    ___________

    onevsall       16.632          0.18987         false   

Observed objective function value = 0.04
Estimated objective function value = 0.042035
Function evaluation time = 1.0649

Best estimated feasible point (according to models):
     Coding     BoxConstraint    KernelScale    Standardize
    ________    _____________    ___________    ___________

    onevsall       16.708          0.21334         false   

Estimated objective function value = 0.038515
Estimated function evaluation time = 0.91692

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 = 
  ClassificationECOC
                         ResponseName: 'Y'
                CategoricalPredictors: []
                           ClassNames: {'setosa'  'versicolor'  'virginica'}
                       ScoreTransform: 'none'
                       BinaryLearners: {3x1 cell}
                           CodingName: 'onevsall'
    HyperparameterOptimizationResults: [1x1 BayesianOptimization]


tall형 데이터에 대해 훈련된 다중클래스 ECOC 모델 두 개를 생성합니다. 한 모델에는 선형 이진 학습기를 사용하고 다른 모델에는 커널 이진 학습기를 사용합니다. 두 모델에 대한 재대입 분류 오차를 비교합니다.

일반적으로, 선형 이진 학습기 또는 커널 이진 학습기에 fitcecoc를 사용하여 tall형 데이터에 대한 다중클래스 분류를 수행할 수 있습니다. fitcecoc를 사용하여 tall형 배열에 대해 모델을 훈련시키는 경우 SVM 이진 학습기를 직접 사용할 수는 없습니다. 그러나 SVM을 사용하는 선형 이진 분류 모델 또는 커널 이진 분류 모델을 사용할 수는 있습니다.

tall형 배열에 대한 계산을 수행할 때 MATLAB®은 병렬 풀(Parallel Computing Toolbox™를 사용할 경우 디폴트 값) 또는 로컬 MATLAB 세션을 사용합니다. Parallel Computing Toolbox가 있는 상태에서 로컬 MATLAB 세션을 사용하여 예제를 실행하려는 경우 mapreducer 함수를 사용하여 전역 실행 환경을 변경하면 됩니다.

피셔의 붓꽃 데이터 세트가 있는 폴더를 참조하는 데이터저장소를 생성합니다. 'NA' 값을 누락된 데이터로 지정하여 datastore가 이 값을 NaN 값으로 대체하도록 합니다. 예측 변수 데이터 및 응답 변수 데이터를 tall형으로 생성합니다.

ds = datastore('fisheriris.csv','TreatAsMissing','NA');
t = tall(ds);
Starting parallel pool (parpool) using the 'local' profile ...
Connected to the parallel pool (number of workers: 6).
X = [t.SepalLength t.SepalWidth t.PetalLength t.PetalWidth];
Y = t.Species;

예측 변수 데이터를 표준화합니다.

Z = zscore(X);

tall형 데이터와 선형 이진 학습기를 사용하는 다중클래스 ECOC 모델을 훈련시킵니다. 기본적으로, tall형 배열을 fitcecoc에 전달하면 소프트웨어는 SVM을 사용하는 선형 이진 학습기를 훈련시킵니다. 응답 변수 데이터에 고유한 클래스가 세 개만 있기 때문에 코딩 체계를 일대전부(tall형 데이터를 사용하는 경우 디폴트 값임)에서 일대일(메모리 내 데이터를 사용하는 경우 디폴트 값임)로 변경합니다.

재현이 가능하도록 rngtallrng를 사용하여 난수 생성기의 시드값을 설정합니다. 결과는 워커의 개수 및 tall형 배열의 실행 환경에 따라 다를 수 있습니다. 자세한 내용은 Control Where Your Code Runs 항목을 참조하십시오.

rng('default') 
tallrng('default')
mdlLinear = fitcecoc(Z,Y,'Coding','onevsone')
Training binary learner 1 (Linear) out of 3.
Training binary learner 2 (Linear) out of 3.
Training binary learner 3 (Linear) out of 3.
mdlLinear = 
  CompactClassificationECOC
      ResponseName: 'Y'
        ClassNames: {'setosa'  'versicolor'  'virginica'}
    ScoreTransform: 'none'
    BinaryLearners: {3×1 cell}
      CodingMatrix: [3×3 double]


  Properties, Methods

mdlLinear는 세 개의 이진 학습기로 구성된 CompactClassificationECOC 모델입니다.

tall형 데이터와 커널 이진 학습기를 사용하는 다중클래스 ECOC 모델을 훈련시켜 보겠습니다. 먼저, templateKernel 객체를 생성하여 커널 이진 학습기의 속성을 지정합니다. 특히, 확장 크기 수를 216으로 늘립니다.

tKernel = templateKernel('NumExpansionDimensions',2^16)
tKernel = 
Fit template for classification Kernel.

             BetaTolerance: []
                 BlockSize: []
             BoxConstraint: []
                   Epsilon: []
    NumExpansionDimensions: 65536
         GradientTolerance: []
        HessianHistorySize: []
            IterationLimit: []
               KernelScale: []
                    Lambda: []
                   Learner: 'svm'
              LossFunction: []
                    Stream: []
            VerbosityLevel: []
                   Version: 1
                    Method: 'Kernel'
                      Type: 'classification'

기본적으로, 커널 이진 학습기는 SVM을 사용합니다.

templateKernel 객체를 fitcecoc로 전달하고 코딩 체계를 일대일로 변경합니다.

mdlKernel = fitcecoc(Z,Y,'Learners',tKernel,'Coding','onevsone')
Training binary learner 1 (Kernel) out of 3.
Training binary learner 2 (Kernel) out of 3.
Training binary learner 3 (Kernel) out of 3.
mdlKernel = 
  CompactClassificationECOC
      ResponseName: 'Y'
        ClassNames: {'setosa'  'versicolor'  'virginica'}
    ScoreTransform: 'none'
    BinaryLearners: {3×1 cell}
      CodingMatrix: [3×3 double]


  Properties, Methods

mdlKernel도 세 개의 이진 학습기로 구성된 CompactClassificationECOC 모델입니다.

두 모델에 대한 재대입 분류 오차를 비교합니다.

errorLinear = gather(loss(mdlLinear,Z,Y))
Evaluating tall expression using the Parallel Pool 'local':
- Pass 1 of 1: Completed in 1.4 sec
Evaluation completed in 1.6 sec
errorLinear = 0.0333
errorKernel = gather(loss(mdlKernel,Z,Y))
Evaluating tall expression using the Parallel Pool 'local':
- Pass 1 of 1: Completed in 15 sec
Evaluation completed in 16 sec
errorKernel = 0.0067

mdlKernel이 오분류하는 훈련 데이터의 비율이 mdlLinear보다 더 작습니다.

입력 인수

모두 축소

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

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

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

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

데이터형: table

응답 변수 이름으로, 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

ECOC 모델이 훈련되는 클래스 레이블로, categorical형 배열, 문자형 배열, string형 배열, 논리형 벡터 또는 숫자형 벡터, 문자형 벡터로 구성된 셀형 배열로 지정됩니다.

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

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

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

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

예측 변수 데이터로, 비희소 행렬이나 희소 행렬로 지정됩니다.

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

X에 나오는 순서로 예측 변수의 이름을 지정하려면 PredictorNames 이름-값 쌍의 인수를 사용하십시오.

참고

  • 선형 분류 학습기의 경우, 관측값이 열에 대응되도록 X의 방향을 지정하고 'ObservationsIn','columns'를 지정하면 최적화-실행 시간을 상당히 줄일 수 있습니다.

  • 다른 모든 학습기의 경우 관측값이 행에 대응되도록 X의 방향을 지정하십시오.

  • fitcecoc 함수는 선형 분류 모델을 훈련시키는 데에만 희소 행렬을 지원합니다.

데이터형: double | single

참고

NaN, 빈 문자형 벡터(''), 빈 string형(""), <missing>, <undefined> 요소는 누락 데이터로 처리됩니다. Y의 누락값에 대응되는 X의 행은 제거됩니다. 그러나, X의 누락값에 대한 처리는 이진 학습기마다 다릅니다. 자세한 내용은 fitcdiscr, fitckernel, fitcknn, fitclinear, fitcnb, fitcsvm, fitctree, fitcensemble 등 사용하는 이진 학습기의 훈련 함수를 참조하십시오. 관측값을 제거하면 훈련의 효력 또는 교차 검증 표본 크기가 줄어듭니다.

이름-값 인수

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

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

예: 'Learners','tree','Coding','onevsone','CrossVal','on'은 모든 이진 학습기에 대한 결정 트리, 일대일 코딩 설계를 사용하고 10겹 교차 검증을 구현하도록 지정합니다.

참고

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

ECOC 분류기 옵션

모두 축소

코딩 설계 이름으로, 'Coding'과 함께 숫자형 행렬 또는 다음 표에 나와 있는 값이 쉼표로 구분되어 지정됩니다.

이진 학습기 개수설명
'allpairs''onevsone'K(K – 1)/2각각의 이진 학습기에서 한 클래스는 양성이고, 다른 클래스는 음성이며, 나머지 클래스는 무시됩니다. 이 설계는 모든 클래스 쌍 할당 조합을 사용합니다.
'binarycomplete'2(K1)1이 설계는 클래스를 모든 이진 조합으로 분할하며 어떠한 클래스도 무시하지 않습니다. 각각의 이진 학습기에서 모든 클래스 할당은 할당의 적어도 1개가 양성 클래스이고 1개가 음성 클래스인 –11입니다.
'denserandom'임의(하지만 대략적으로 10 log2K)각각의 이진 학습기에서 소프트웨어는 클래스를 양성 클래스 또는 음성 클래스로 임의로 할당하되 적어도 하나의 양성 및 음성 클래스가 있도록 합니다. 자세한 내용은 확률 코딩 설계 행렬 항목을 참조하십시오.
'onevsall'K각각의 이진 학습기에서 한 클래스는 양성이고 나머지는 음성입니다. 이 설계는 모든 양성 클래스 할당 조합을 사용합니다.
'ordinal'K – 1첫 번째 이진 학습기에서는 첫 번째 클래스가 음성이고 나머지는 양성입니다. 두 번째 이진 학습기에서는 처음 두 개의 클래스가 음성이고 나머지는 양성이 되는 식입니다.
'sparserandom'임의(하지만 대략적으로 15 log2K)각각의 이진 학습기에서 소프트웨어는 클래스를 각각 0.25의 확률로 양성 또는 음성으로 임의로 할당하고 0.5의 확률로 무시합니다. 자세한 내용은 확률 코딩 설계 행렬 항목을 참조하십시오.
'ternarycomplete'(3K2(K+1)+1)/2이 설계는 클래스를 모든 삼진(ternary) 조합으로 분할합니다. 모든 클래스 할당은 각 할당의 적어도 1개가 양성 클래스이고 1개가 음성 클래스인 0, –11입니다.

사용자 지정 코딩 행렬을 사용하여 코딩 설계를 지정할 수도 있습니다. 여기서 사용자 지정 코딩 행렬은 K×L 행렬입니다. 각 행은 클래스에 대응되며, 각 열은 이진 학습기에 대응됩니다. 클래스 순서(행)는 ClassNames의 순서에 대응됩니다. 다음 지침에 따라 행렬을 생성하십시오.

  • 사용자 지정 코딩 행렬의 각 요소는 –1, 0 또는 1이어야 하고, 요소의 값은 이분 클래스 할당에 대응해야 합니다. 학습기 j가 클래스 i의 관측값에 할당하는 클래스인 Coding(i,j)를 고려하십시오.

    이분 클래스 할당
    –1학습기 ji 클래스에 있는 관측값을 음성 클래스로 할당합니다.
    0훈련 전에 학습기 j는 데이터 세트에서 i 클래스에 있는 관측값을 제거합니다.
    1학습기 ji 클래스에 있는 관측값을 양성 클래스로 할당합니다.

  • 모든 열은 –11을 각각 1개 이상 포함해야 합니다.

  • ij를 만족하는 모든 열 인덱스 i,j에 대해 Coding(:,i)Coding(:,j)와 같을 수 없으며 Coding(:,i)–Coding(:,j)와 같을 수 없습니다.

  • 사용자 지정 코딩 행렬의 모든 행은 달라야 합니다.

사용자 지정 코딩 설계 행렬의 형식에 대한 자세한 내용은 사용자 지정 코딩 설계 행렬 항목을 참조하십시오.

예: 'Coding','ternarycomplete'

데이터형: char | string | double | single | int16 | int32 | int64 | int8

점수를 사후 확률로 변환할지 여부를 나타내는 플래그로, 'FitPosterior'와 함께 true(1) 또는 false(0)가 쉼표로 구분되어 지정됩니다.

FitPosteriortrue이면 소프트웨어가 이진-학습기 분류 점수를 사후 확률로 변환합니다. kfoldPredict, predict 또는 resubPredict를 사용하여 사후 확률을 얻을 수 있습니다.

fitcecoc는 다음과 같은 경우 사후 확률 피팅을 지원하지 않습니다.

  • 앙상블 방법이 AdaBoostM2, LPBoost, RUSBoost, RobustBoost 또는 TotalBoost입니다.

  • 이진 학습기(Learners)가 SVM을 구현하는 선형 분류 모델 또는 커널 분류 모델입니다. 선형 분류 모델 또는 커널 분류 모델에 대한 사후 확률을 얻으려면 이 대신 로지스틱 회귀를 구현하십시오.

예: 'FitPosterior',true

데이터형: logical

이진 학습기 템플릿으로, 'Learners'와 함께 문자형 벡터, string형 스칼라, 템플릿 객체, 또는 템플릿 객체로 구성된 셀형 벡터가 쉼표로 구분되어 지정됩니다. 특히, SVM과 같은 이진 분류기와 GentleBoost, LogitBoost, RobustBoost를 사용하는 앙상블을 지정하여 다중클래스 문제를 풀 수 있습니다. 그러나, fitcecoc는 다중클래스 모델도 이진 분류기로 지원합니다.

  • Learners가 문자형 벡터 또는 string형 스칼라이면 소프트웨어는 지정된 알고리즘의 디폴트 값을 사용하여 각각의 이진 학습기를 훈련시킵니다. 다음 표에는 사용 가능한 알고리즘이 요약되어 있습니다.

    설명
    'discriminant'판별분석. 디폴트 옵션은 templateDiscriminant를 참조하십시오.
    'kernel'커널 분류 모델. 디폴트 옵션은 templateKernel을 참조하십시오.
    'knn'k-최근접이웃. 디폴트 옵션은 templateKNN을 참조하십시오.
    'linear'선형 분류 모델. 디폴트 옵션은 templateLinear를 참조하십시오.
    'naivebayes'나이브 베이즈(Naive Bayes). 디폴트 옵션은 templateNaiveBayes를 참조하십시오.
    'svm'SVM. 디폴트 옵션은 templateSVM을 참조하십시오.
    'tree'분류 트리. 디폴트 옵션은 templateTree를 참조하십시오.

  • Learners가 템플릿 객체이면 각각의 이진 학습기는 저장된 옵션을 따라 훈련합니다. 다음을 사용하여 템플릿 객체를 생성할 수 있습니다.

  • Learners가 템플릿 객체로 구성된 셀형 벡터이면 다음과 같습니다.

    • 셀 j가 이진 학습기 j(즉, 코딩 설계 행렬의 열 j)에 대응되고, 셀형 벡터의 길이는 L이어야 합니다. L은 코딩 설계 행렬에 포함된 열의 개수입니다. 자세한 내용은 Coding을 참조하십시오.

    • 예측 시 내장 손실 함수 중 하나를 사용하려면 모든 이진 학습기가 동일한 범위의 점수를 반환해야 합니다. 예를 들어, 디폴트 SVM 이진 학습기를 디폴트 나이브 베이즈 이진 학습기와 함께 포함시킬 수는 없습니다. 전자는 (-∞,∞) 범위의 점수를 반환하고 후자는 사후 확률을 점수로 반환합니다. 또는, predictloss와 같은 함수에 대한 함수 핸들로 사용자 지정 손실 함수를 제공해야 합니다.

    • 선형 분류 모델 학습기 템플릿을 다른 템플릿과 함께 지정할 수 없습니다.

    • 마찬가지로, 커널 분류 모델 학습기 템플릿을 다른 템플릿과 함께 지정할 수 없습니다.

기본적으로, 소프트웨어는 디폴트 SVM 템플릿을 사용하여 학습기를 훈련시킵니다.

예: 'Learners','tree'

숫자형 예측 변수의 Bin 개수로, 'NumBins'와 함께 양의 정수 스칼라가 쉼표로 구분되어 지정됩니다. 이 인수는 fitcecoc 함수가 트리 학습기를 사용하는 경우에만 유효합니다. 즉, 'Learners''tree'이거나, templateTree를 사용하여 만든 템플릿 객체이거나, 약한 트리 학습기로 templateEnsemble을 사용하여 만든 템플릿 객체인 경우에만 유효합니다.

  • 'NumBins' 값이 비어 있으면(디폴트 값) fitcecoc 함수는 예측 변수를 비닝하지 않습니다.

  • 'NumBins' 값을 양의 정수 스칼라(numBins)로 지정하면 fitcecoc 함수는 모든 숫자형 예측 변수를 최대 numBins개의 등확률 Bin으로 비닝한 다음 원래 데이터가 아닌 Bin 인덱스에서 트리를 성장시킵니다.

    • 예측 변수의 고유한 값이 numBins개보다 작은 경우 Bin의 개수는 numBins개보다 작을 수 있습니다.

    • fitcecoc 함수는 범주형 예측 변수를 비닝하지 않습니다.

큰 훈련 데이터 세트를 사용할 경우 이 비닝 옵션은 훈련 속도를 높이지만 정확도가 떨어질 가능성이 있습니다. 먼저 'NumBins',50을 사용해 본 후에 정확도와 훈련 속도에 따라 값을 변경해 볼 수 있습니다.

훈련된 모델은 Bin 경계값을 BinEdges 속성에 저장합니다.

예: 'NumBins',50

데이터형: single | double

동시에 훈련되는 이진 학습기 개수로, 'NumConcurrent'와 함께 양의 정수 스칼라가 쉼표로 구분되어 지정됩니다. 디폴트 값은 1이며, 이 경우 fitcecoc가 이진 학습기를 순차적으로 훈련시킵니다.

참고

이 옵션은 tall형 배열에 fitcecoc를 사용하는 경우에만 적용됩니다. 자세한 내용은 tall형 배열 항목을 참조하십시오.

데이터형: single | double

예측 변수 데이터 관측 차원으로, 'ObservationsIn'과 함께 'columns' 또는 'rows'가 쉼표로 구분되어 지정됩니다.

참고

  • 선형 분류 학습기의 경우, 관측값이 열에 대응되도록 X의 방향을 지정하고 'ObservationsIn','columns'를 지정하면 최적화-실행 시간을 상당히 줄일 수 있습니다.

  • 다른 모든 학습기의 경우 관측값이 행에 대응되도록 X의 방향을 지정하십시오.

예: 'ObservationsIn','columns'

세부 정보 표시 수준으로, 'Verbose'와 함께 0, 1 또는 2가 쉼표로 구분되어 지정됩니다. Verbose는 소프트웨어가 명령 창에 표시하는 이진 학습기당 진단 정보의 양을 제어합니다.

다음 표에는 사용 가능한 세부 정보 표시 수준 옵션이 요약되어 있습니다.

설명
0소프트웨어가 진단 정보를 표시하지 않습니다.
1소프트웨어가 새로운 이진 학습기를 훈련시킬 때마다 진단 메시지를 표시합니다.
2소프트웨어가 새로운 이진 학습기를 훈련시킬 때마다 추가 진단 메시지를 표시합니다.

각 이진 학습기는 이 이름-값 쌍의 인수와는 독립적인 고유한 세부 정보 표시 수준을 갖습니다. 이진 학습기의 세부 정보 표시 수준을 변경하려면 템플릿 객체를 생성하고 'Verbose' 이름-값 쌍의 인수를 지정하십시오. 그런 다음, 'Learners' 이름-값 쌍의 인수를 사용하여 템플릿 객체를 fitcecoc에 전달합니다.

예: 'Verbose',1

데이터형: double | single

교차 검증 옵션

모두 축소

교차 검증된 분류기를 훈련시키는 플래그로, '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

리브-원-아웃 교차 검증 플래그로, 'Leaveout'과 함께 'on'이나 'off'가 쉼표로 구분되어 지정됩니다. 'Leaveout','on'을 지정하는 경우, n개 관측값 각각에 대해(여기서 n은 size(Mdl.X,1)임) 소프트웨어가 다음 동작을 수행합니다.

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

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

교차 검증된 모델을 생성하려면 다음 4개의 옵션 중 하나만을 사용할 수 있습니다. CVPartition, Holdout, KFold 또는 Leaveout.

참고

리브-원-아웃은 선형 분류 모델 학습기 또는 커널 분류 모델 학습기로 구성된 ECOC 모델을 교차 검증하는 데는 권장되지 않습니다.

예: 'Leaveout','on'

기타 분류 옵션

모두 축소

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

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

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

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

논리형 벡터

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

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

다음과 같은 경우 'CategoricalPredictors'를 지정하는 것이 적합합니다.

  • 하나 이상의 예측 변수가 범주형 변수이고 모든 이진 학습기가 분류 트리, 나이브 베이즈 학습기, SVM, 선형 학습기, 커널 학습기 또는 분류 트리의 앙상블입니다.

  • 모든 예측 변수가 범주형 변수이고 하나 이상의 이진 학습기가 kNN입니다.

그 밖의 학습기에 'CategoricalPredictors'를 지정하면 이진 학습기를 훈련시킬 수 없다는 내용의 경고가 표시됩니다. 예를 들어, 범주형 예측 변수를 사용하여 판별분석 분류기를 훈련시킬 수 없습니다.

각 학습기는 해당 학습기에서 사용하는 피팅 함수와 동일한 방식으로 범주형 예측 변수를 식별하고 처리합니다. 커널 학습기는 fitckernel'CategoricalPredictors', k-최근접 학습기는 fitcknn'CategoricalPredictors', 선형 학습기는 fitclinear'CategoricalPredictors', 나이브 베이즈 학습기는 fitcnb'CategoricalPredictors' SVM 학습기는 fitcsvm'CategoricalPredictors', 트리 학습기는 fitctree'CategoricalPredictors'를 참조하십시오.

예: '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를 지정하는 경우, Cost(i,j)는 실제 클래스가 i인 한 점을 클래스 j로 분류하는 비용입니다. 즉, 행은 실제 클래스에 대응되고, 열은 예측 클래스에 대응됩니다. Cost의 대응 행과 대응 열에 대한 클래스 순서를 지정하려면 ClassNames 이름-값 쌍의 인수도 지정하십시오.

  • 구조체 S를 지정하는 경우, 이 구조체는 다음과 같은 두 개의 필드를 가져야 합니다.

    • 클래스 이름을 Y와 같은 데이터형의 변수로 포함하는 S.ClassNames

    • S.ClassNames에서와 같은 순서로 행과 열을 갖는 비용 행렬을 포함하는 S.ClassificationCosts

디폴트 값은 ones(K) - eye(K)입니다. 여기서 K는 고유한 클래스의 개수입니다.

예: 'Cost',[0 1 2 ; 1 0 2; 2 2 0]

데이터형: double | single | struct

병렬 연산 옵션으로, 'Options'와 함께 statset에서 반환되는 구조체형 배열이 쉼표로 구분되어 지정됩니다. 병렬 연산을 사용하려면 Parallel Computing Toolbox™가 필요합니다. fitcecoc 함수는 'Streams', 'UseParallel', 'UseSubtreams' 필드를 사용합니다.

다음 표에는 사용 가능한 옵션이 요약되어 있습니다.

옵션설명
'Streams'

RandStream 객체 또는 이러한 객체로 구성된 셀형 배열. Streams를 지정하지 않으면 디폴트 스트림이 사용됩니다. Streams를 지정하면 다음에 해당하는 경우를 제외하고는 단일 객체를 사용하십시오.

  • 열어 놓은 병렬 풀이 있습니다.

  • UseParalleltrue입니다.

  • UseSubstreamsfalse입니다.

이 경우, 병렬 풀과 크기가 같은 셀형 배열을 사용하십시오. 병렬 풀이 열려 있지 않으면 소프트웨어가 병렬 풀(기본 설정에 따름)을 열려고 하고 Streams는 단일 난수 스트림을 제공해야 합니다.

'UseParallel'

Parallel Computing Toolbox가 있는 경우 'UseParallel',true를 설정하여 워커로 이루어진 풀을 불러올 수 있습니다. fitcecoc 함수는 각 이진 학습기를 풀에 있는 각 워커로 전송합니다.

이진 학습기에 결정 트리를 사용할 때는 fitcecoc 함수는 듀얼 코어 이상의 시스템에서 Intel® TBB(Threading Building Block)를 사용하여 훈련을 병렬화합니다. 따라서 단일 컴퓨터에서 'UseParallel' 옵션을 지정하는 것은 도움이 되지 않습니다. 이 옵션은 클러스터에서 사용하십시오. Intel TBB에 대한 자세한 내용은 https://www.intel.com/content/www/us/en/developer/tools/oneapi/onetbb.html 항목을 참조하십시오.

'UseSubstreams''Streams'로 지정된 스트림을 사용하여 병렬로 계산하려면 true를 설정하십시오. 디폴트 값은 false입니다. 예를 들어, 'mlfg6331_64' 또는 'mrg32k3a'와 같은 서브스트림을 허용하는 유형으로 Streams를 설정하십시오.

더욱 예측 가능한 결과를 얻으려면 parpool (Parallel Computing Toolbox)을 사용하고 fitcecoc 함수를 사용하여 병렬 계산을 불러오기 전에 병렬 풀을 명시적으로 생성하는 것이 좋습니다.

예: 'Options',statset('UseParallel',true)

데이터형: 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를 사용하여 훈련에 사용할 예측 변수를 선택할 수 있습니다. 즉, fitcecoc 함수는 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이 되도록 요소를 정규화합니다.

소프트웨어가 클래스 사전 확률을 통합하는 방법에 대한 자세한 내용은 사전 확률과 오분류 비용 항목을 참조하십시오.

예: struct('ClassNames',{{'setosa','versicolor','virginica'}},'ClassProbs',1:3)

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

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

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

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

예: "ResponseName","response"

데이터형: char | string

관측값 가중치로, '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' — 지정된 Learners의 디폴트 모수와 함께 {'Coding'}을 사용합니다.

    • Learners = 'svm'(디폴트 값) — {'BoxConstraint','KernelScale','Standardize'}

    • Learners = 'discriminant'{'Delta','Gamma'}

    • Learners = 'kernel'{'KernelScale','Lambda','Standardize'}

    • Learners = 'knn'{'Distance','NumNeighbors','Standardize'}

    • Learners = 'linear'{'Lambda','Learner'}

    • Learners = 'tree'{'MinLeafSize'}

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

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

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

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

참고

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

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

  • Codingfitcecoc'onevsall''onevsone' 중에서 탐색을 수행합니다.

  • 아래 표에서 각 Learners마다 지정된 적합한 하이퍼파라미터.

    학습기적합한 하이퍼파라미터
    (굵게 표시된 항목이 디폴트 값임)
    디폴트 범위
    'discriminant'Delta[1e-6,1e3] 범위에서 로그 스케일링된 값
    DiscrimType'linear', 'quadratic', 'diagLinear', 'diagQuadratic', 'pseudoLinear', 'pseudoQuadratic'
    Gamma[0,1]의 실수 값
    'kernel'Lambda[1e-3/NumObservations,1e3/NumObservations] 범위에서 로그 스케일링된 양수 값
    KernelScale[1e-3,1e3] 범위에서 로그 스케일링된 양수 값
    Learner'svm''logistic'
    NumExpansionDimensions[100,10000] 범위에서 로그 스케일링된 정수
    Standardize'true''false'
    'knn'Distance'cityblock', 'chebychev', 'correlation', 'cosine', 'euclidean', 'hamming', 'jaccard', 'mahalanobis', 'minkowski', 'seuclidean', 'spearman'
    DistanceWeight'equal', 'inverse', 'squaredinverse'
    Exponent[0.5,3]의 양수 값
    NumNeighbors[1, max(2,round(NumObservations/2))] 범위에서 로그 스케일링된 양의 정수 값
    Standardize'true''false'
    'linear'Lambda[1e-5/NumObservations,1e5/NumObservations] 범위에서 로그 스케일링된 양수 값
    Learner'svm''logistic'
    Regularization

    'ridge''lasso'

    • Regularization'ridge'인 경우, 함수는 기본적으로 메모리 제한 BFGS(LBFGS) 솔버를 사용합니다.

    • Regularization'lasso'인 경우, 함수는 기본적으로 SpaRSA(Sparse Reconstruction by Separable Approximation) 솔버를 사용합니다.

    'svm'BoxConstraint[1e-3,1e3] 범위에서 로그 스케일링된 양수 값
    KernelScale[1e-3,1e3] 범위에서 로그 스케일링된 양수 값
    KernelFunction'gaussian', 'linear', 'polynomial'
    PolynomialOrder[2,4] 범위의 정수
    Standardize'true''false'
    'tree'MaxNumSplits[1,max(2,NumObservations-1)] 범위에서 로그 스케일링된 정수
    MinLeafSize[1,max(2,floor(NumObservations/2))] 범위에서 로그 스케일링된 정수
    NumVariablesToSample[1,max(2,NumPredictors)] 범위의 정수
    SplitCriterion'gdi', 'deviance', 'twoing'

    또는, 다음과 같이 선택한 Learners와 함께 hyperparameters를 사용할 수 있습니다.

    load fisheriris % hyperparameters requires data and learner
    params = hyperparameters('fitcecoc',meas,species,'svm');

    적합한 하이퍼파라미터와 디폴트 하이퍼파라미터를 보려면 params를 살펴보십시오.

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

load fisheriris
params = hyperparameters('fitcecoc',meas,species,'svm');
params(2).Range = [1e-4,1e6];

paramsOptimizeHyperparameters의 값으로 전달합니다.

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

예제는 ECOC 분류기 최적화하기 항목을 참조하십시오.

예: '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

출력 인수

모두 축소

훈련된 ECOC 분류기로, 모델 객체 ClassificationECOC 또는 CompactClassificationECOC나 교차 검증된 모델 객체 ClassificationPartitionedECOC, ClassificationPartitionedLinearECOC 또는 ClassificationPartitionedKernelECOC로 반환됩니다.

다음 표에서는 fitcecoc에서 반환된 모델 객체의 유형이 사용자가 지정하는 이진 학습기 유형과 교차 검증 수행 여부에 따라 어떻게 달라지는지를 보여줍니다.

선형 분류 모델 학습기커널 분류 모델 학습기교차 검증반환되는 모델 객체
아니요아니요아니요ClassificationECOC
아니요아니요ClassificationPartitionedECOC
아니요아니요CompactClassificationECOC
아니요ClassificationPartitionedLinearECOC
아니요아니요CompactClassificationECOC
아니요ClassificationPartitionedKernelECOC

하이퍼파라미터에 대한 교차 검증 최적화와 관련된 설명으로, BayesianOptimization 객체 또는 하이퍼파라미터 및 관련 값으로 구성된 테이블로 반환됩니다. HyperparameterOptimizationResults 이름-값 쌍의 인수는 OptimizeHyperparameters 이름-값 쌍의 인수가 비어 있지 않은 경우에 비어 있지 않으며 Learners 이름-값 쌍의 인수는 선형 이진 학습기 또는 커널 이진 학습기를 지정합니다. 값은 HyperparameterOptimizationOptions 이름-값 쌍의 인수의 설정에 따라 결정됩니다.

  • 'bayesopt'(디폴트 값) — BayesianOptimization 클래스의 객체

  • 'gridsearch' 또는 'randomsearch' — 사용된 하이퍼파라미터, 관측된 목적 함수 값(교차 검증 손실), 그리고 관측값 순위가 가장 낮은 값(최상)에서 가장 높은 값(최하)순으로 포함된 테이블

데이터형: table

제한 사항

  • fitcecoc 함수는 선형 분류 모델을 훈련시키는 데에만 희소 행렬을 지원합니다. 기타 모든 모델의 경우, 비희소 행렬을 예측 변수 데이터로 제공하십시오.

세부 정보

모두 축소

오류 수정 출력 코드(ECOC) 모델

오류 수정 출력 코드(ECOC) 모델은 세 개 이상의 클래스를 갖는 분류 문제를 이진 분류기 문제 세트로 간소화합니다.

ECOC 분류에는 이진 학습기가 훈련하는 데 기준이 되는 클래스를 결정하는 코딩 설계와 이진 분류기의 결과(예측값)가 어떻게 집계되는지를 결정하는 디코딩 체계가 필요합니다.

다음과 같이 가정하겠습니다.

  • 분류 문제에는 3개의 클래스가 있습니다.

  • 코딩 설계가 일대일입니다. 3개의 클래스에 대해 이 코딩 설계는

    Learner 1Learner 2Learner 3Class 1110Class 2101Class 3011

    입니다. 분류 모델을 생성할 때 Coding 이름-값 인수를 사용하여 다른 코딩 설계를 지정할 수 있습니다.

  • 이 모델은 이진 손실 함수 g와 함께 손실 가중 디코딩 체계를 사용하여, 예측된 클래스를 결정합니다. 또한 손실 기반 디코딩 체계도 지원됩니다. predict, loss, margin, edge 등과 같은 객체 함수를 호출할 때 DecodingBinaryLoss 이름-값 인수를 각각 사용하여 디코딩 체계 및 이진 손실 함수를 지정할 수 있습니다.

ECOC 알고리즘은 다음 단계를 따릅니다.

  1. 학습기 1은 클래스 1 또는 클래스 2에 있는 관측값에 대해 훈련하고, 클래스 1을 양성 클래스로, 클래스 2를 음성 클래스로 처리합니다. 다른 학습기도 비슷하게 훈련됩니다.

  2. M을 요소 mkl을 포함하는 코딩 설계 행렬이라 하고, sl은 학습기 l의 양성 클래스에 대한 예측 분류 점수라고 하겠습니다. 알고리즘은 새 관측값을 B 이진 학습기의 손실에 대한 집계를 최소화하는 클래스(k^)에 할당합니다.

    k^=argminkl=1B|mkl|g(mkl,sl)l=1B|mkl|.

ECOC 모델은 기타 다중클래스 모델에 비해 분류 정확도를 향상시킬 수 있습니다[2].

코딩 설계

코딩 설계는 어떤 클래스가 각각의 이진 학습기로 훈련되는지, 즉, 다중클래스 문제가 일련의 이진 문제로 어떤 식으로 간소화되는지를 요소가 나타내는 행렬입니다.

코딩 설계의 각 행은 고유한 클래스에 대응되며, 각 열은 이진 학습기에 대응됩니다. 삼진 코딩 설계에서는 특정 열(또는 이진 학습기)에 대해 다음 사항이 적용됩니다.

  • 1을 포함하는 행은 이진 학습기에게 대응 클래스에 포함된 모든 관측값을 양성 클래스로 그룹화하라고 지시합니다.

  • -1을 포함하는 행은 이진 학습기에게 대응 클래스에 포함된 모든 관측값을 음성 클래스로 그룹화하라고 지시합니다.

  • 0을 포함하는 행은 이진 학습기에게 대응 클래스에 포함된 모든 관측값을 무시하라고 지시합니다.

해밍 측정법에 기반한 최소 쌍별 행 거리가 큰 값으로 구성된 코딩 설계 행렬이 적합합니다. 쌍별 행 거리에 대한 자세한 내용은 확률 코딩 설계 행렬 항목과 [3] 항목을 참조하십시오.

다음 표에는 많이 사용되는 코딩 설계가 설명되어 있습니다.

코딩 설계설명학습기 수 최소 쌍별 행 거리
일대전부(OVA)각각의 이진 학습기에서 한 클래스는 양성이고 나머지는 음성입니다. 이 설계는 모든 양성 클래스 할당 조합을 사용합니다.K2
일대일(OVO)각각의 이진 학습기에서 한 클래스는 양성이고, 한 클래스는 음성이며, 나머지 클래스는 무시됩니다. 이 설계는 모든 클래스 쌍 할당 조합을 사용합니다.

K(K – 1)/2

1
완전 이진

이 설계는 클래스를 모든 이진 조합으로 분할하며 어떠한 클래스도 무시하지 않습니다. 즉, 모든 클래스는 –11 중 하나로 할당되며, 각 이진 학습기에 대한 각 조합에는 적어도 하나의 양성 클래스와 하나의 음성 클래스가 있습니다.

2K – 1 – 12K – 2
완전 삼진

이 설계는 클래스를 모든 삼진(ternary) 조합으로 분할합니다. 즉, 모든 클래스는 0, 1, –1 중 하나로 할당되며, 각 이진 학습기에 대한 각 조합에는 적어도 하나의 양성 클래스와 하나의 음성 클래스가 있습니다.

(3K – 2K + 1 + 1)/2

3K – 2
순서형첫 번째 이진 학습기에서는 첫 번째 클래스가 음성이고 나머지는 양성입니다. 두 번째 이진 학습기에서는 처음 두 개의 클래스가 음성이고 나머지는 양성이 되는 식입니다.K – 11
조밀 확률각각의 이진 학습기에서 소프트웨어는 클래스를 양성 클래스 또는 음성 클래스로 임의로 할당하되 적어도 하나의 양성 및 음성 클래스가 있도록 합니다. 자세한 내용은 확률 코딩 설계 행렬 항목을 참조하십시오.

임의(하지만 대략적으로 10 log2K)

가변
희소 확률각각의 이진 학습기에서 소프트웨어는 클래스를 각각 0.25의 확률로 양성 또는 음성으로 임의로 할당하고 0.5의 확률로 무시합니다. 자세한 내용은 확률 코딩 설계 행렬 항목을 참조하십시오.

임의(하지만 대략적으로 15 log2K)

가변

이 플롯은 클래스 개수(K)가 증가함에 따라 코딩 설계에 필요한 이진 학습기 개수를 비교합니다.

Plots of the number of binary learners versus the number of classes

  • 이진 학습기 개수는 클래스 개수에 따라 늘어납니다. 클래스가 많은 문제의 경우, binarycompleteternarycomplete 코딩 설계는 효율적이지 않습니다. 그러나 다음을 참고하십시오.

    • K ≤ 4이면 sparserandom 대신 ternarycomplete 코딩 설계를 사용하십시오.

    • K ≤ 5이면 denserandom 대신 binarycomplete 코딩 설계를 사용하십시오.

    명령 창에 Mdl.CodingMatrix를 입력하여 훈련된 ECOC 분류기의 코딩 설계 행렬을 표시할 수 있습니다.

  • 사용자는 코딩 행렬 생성 시 응용 방법에 대한 깊은 지식을 이용하고 계산적인 제약 조건을 고려해야 합니다. 충분한 계산 성능과 시간이 있다면 여러 코딩 행렬을 사용해 본 후 가장 성능이 좋은 코딩 행렬을 선택하십시오(즉, confusionchart를 사용하여 각 모델에 대해 혼동행렬을 확인하십시오).

  • 리브-원-아웃 교차 검증(Leaveout)은 관측값이 많은 데이터 세트에 대해서는 효율적이지 않습니다. 대신, k겹 교차 검증(KFold)을 사용하십시오.

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

알고리즘

모두 축소

사용자 지정 코딩 설계 행렬

사용자 지정 코딩 행렬은 특정 형식을 가져야 합니다. 소프트웨어는 다음의 조건을 확보해 사용자 지정 코딩 행렬을 검증합니다.

  • 모든 요소는 1, 0 또는 1입니다.

  • 모든 열이 -1과 1을 각각 하나 이상 포함합니다.

  • 모든 고유한 열 벡터 u 및 v에 대해 u ≠ v이고 u ≠ -v입니다.

  • 모든 행 벡터가 고유합니다.

  • 행렬이 두 클래스를 분리할 수 있습니다. 즉, 다음 규칙을 따라 행 간을 이동할 수 있습니다.

    • 1에서 -1까지 또는 -1에서 1까지 수직으로 이동합니다.

    • 0이 아닌 요소 간을 수평으로 이동합니다.

    • 세로 이동 시 행렬의 열은 한 번만 사용합니다.

    이러한 규칙을 사용하여 행 i에서 행 j로 이동할 수 없다면 i 클래스와 j 클래스는 해당 설계 행렬에 의해 분리될 수 없다는 걸 의미합니다. 예를 들어, 다음 코딩 설계

    [10100101]

    에서 클래스 1 및 클래스 2는 클래스 3 및 클래스 4와 분리될 수 없습니다(즉, 열 2에 0이 있으므로 행 2의 -1에서 열 2로 가로로 이동할 수 없음). 따라서 소프트웨어가 이 코딩 설계를 거부합니다.

병렬 연산

병렬 연산을 사용하면(Options 참조), fitcecoc가 이진 학습기를 병렬로 훈련시킵니다.

사전 확률과 오분류 비용

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

각각의 이진 학습기에 대해 소프트웨어는 사전 확률을 2개 요소의 벡터로 정규화하며, 비용 행렬을 2×2 행렬로 정규화합니다. 그런 다음, 소프트웨어는 2×2 비용 행렬에 있는 벌점을 통합하여 사전 확률 벡터를 조정하고, 비용 행렬을 디폴트 비용 행렬로 설정합니다. Mdl에 정의된 이진 학습기(Mdl.BinaryLearners)의 CostPrior 속성은 조정된 값을 저장합니다. 특히 소프트웨어는 다음 단계를 완료합니다.

  1. 소프트웨어는 각각의 이진 학습기에 대해 지정된 클래스 사전 확률(Prior)을 정규화합니다. M을 코딩 설계 행렬이라고 하고, I(A,c)를 표시 행렬이라고 하겠습니다. 표시 행렬은 A와 차원 크기가 같습니다. A의 대응 요소가 c이면 표시 행렬은 값이 1인 요소를 가지며, 그렇지 않은 경우는 요소 값이 0이 됩니다. M+1과 M-1을 다음을 충족하는 K×L 행렬이라고 하겠습니다.

    • M+1 = M○I(M,1). 여기서 ○은 요소별 곱셈(즉, Mplus = M.*(M == 1))을 나타냅니다. 또한, ml(+1)을 M+1의 열 벡터 l이라고 하겠습니다.

    • M-1 = -M○I(M,-1)(즉, Mminus = -M.*(M == -1)). 또한, ml(1)을 M-1의 열 벡터 l이라고 하겠습니다.

    πl+1=ml(+1)°ππl1=ml(1)°π이라고 하겠습니다. 여기서 π는 지정된 클래스 사전 확률(Prior)의 벡터입니다.

    그러면, 이진 학습기 l에 대한 양성 및 음성 스칼라 클래스 사전 확률은 다음과 같습니다.

    π^l(j)=πl(j)1πl(+1)1+πl(1)1,

    여기서 j = {-1,1}이며 a1은 a의 1-노름입니다.

  2. 소프트웨어는 각 이진 학습기에 대해 K×K 비용 행렬 C(Cost)를 정규화합니다. 이진 학습기 l에 대해 음성 클래스 관측값을 양성 클래스로 분류하는 비용은 다음과 같습니다.

    cl+=(πl(1))Cπl(+1).

    마찬가지로, 양성 클래스 관측값을 음성 클래스로 분류하는 비용은 다음과 같습니다.

    cl+=(πl(+1))Cπl(1).

    이진 학습기 l에 대한 비용 행렬은 다음과 같습니다.

    Cl=[0cl+cl+0].

  3. ECOC 모델은 오분류 비용을 클래스 사전 확률에 통합하여 수용합니다. 소프트웨어가 다음과 같이 클래스 사전 확률을 조정하고 비용 행렬을 이진 학습기에 대한 디폴트 비용 행렬로 설정합니다.

    π¯l1=cl+π^l1cl+π^l1+c+π^l+1,π¯l+1=cl+π^l+1cl+π^l1+c+π^l+1,C¯l=[0110].

확률 코딩 설계 행렬

클래스의 개수가 K개로 주어지면 다음과 같이 확률 코딩 설계 행렬을 생성합니다.

  1. 다음 행렬 중 하나를 생성합니다.

    1. 조밀 확률 — K×Ld 코딩 설계 행렬의 각 요소에 동일한 확률로 1 또는 –1을 할당합니다. 여기서 Ld10log2K입니다.

    2. 희소 확률 — K×Ls 코딩 설계 행렬의 각 요소에 확률 0.25로 1 또는 –1을 할당하고 확률 0.5로 0을 할당합니다. 여기서 Ls15log2K입니다.

  2. 열이 1과 -1을 각각 하나 이상 포함하지 않을 경우, 소프트웨어는 해당 열을 제거합니다.

  3. 서로 다른 열 u와 v에 대해 u = v 또는 u = -v이면 소프트웨어는 코딩 설계 행렬에서 v를 제거합니다.

기본적으로 10,000개의 행렬을 임의로 생성한 다음, 아래의 해밍 측정법([3])에 기반하여 가장 큰 최소 쌍별 행 거리를 가지는 행렬을 유지합니다.

Δ(k1,k2)=0.5l=1L|mk1l||mk2l||mk1lmk2l|,

여기서 mkjl은 코딩 설계 행렬 j의 요소입니다.

서포트 벡터 저장

기본적으로 효율성을 높이기 위해 fitcecoc는 모든 선형 SVM 이진 학습기에 대해 속성 Alpha, SupportVectorLabels, SupportVectors를 비워 둡니다. fitcecoc는 모델 표시 화면에 Alpha가 아니라 Beta를 표시합니다.

Alpha, SupportVectorLabels, SupportVectors를 저장하려면 fitcecoc에 서포트 벡터를 저장함을 지정하는 선형 SVM 템플릿을 전달하십시오. 예를 들어, 다음을 입력합니다.

t = templateSVM('SaveSupportVectors',true)
Mdl = fitcecoc(X,Y,'Learners',t);

결과로 생성된 ClassificationECOC 모델을 discardSupportVectors로 전달하여 서포트 벡터 및 관련 값을 제거할 수 있습니다.

참고 문헌

[1] Allwein, E., R. Schapire, and Y. Singer. “Reducing multiclass to binary: A unifying approach for margin classifiers.” Journal of Machine Learning Research. Vol. 1, 2000, pp. 113–141.

[2] Fürnkranz, Johannes. “Round Robin Classification.” J. Mach. Learn. Res., Vol. 2, 2002, pp. 721–747.

[3] Escalera, S., O. Pujol, and P. Radeva. “Separability of ternary codes for sparse designs of error-correcting output codes.” Pattern Recog. Lett., Vol. 30, Issue 3, 2009, pp. 285–297.

[4] Escalera, S., O. Pujol, and P. Radeva. “On the decoding process in ternary error-correcting output codes.” IEEE Transactions on Pattern Analysis and Machine Intelligence. Vol. 32, Issue 7, 2010, pp. 120–134.

확장 기능

버전 내역

R2014b에 개발됨

모두 확장