이 번역 페이지는 최신 내용을 담고 있지 않습니다. 최신 내용을 영문으로 보려면 여기를 클릭하십시오.
fitcecoc
서포트 벡터 머신 또는 다른 분류기에 대해 다중클래스 모델 피팅하기
구문
설명
은 테이블 Mdl
= fitcecoc(Tbl
,ResponseVarName
)Tbl
에 포함된 예측 변수와 Tbl.ResponseVarName
에 포함된 클래스 레이블을 사용하여 전체 훈련된 다중클래스 오류 수정 출력 코드(ECOC) 모델을 반환합니다. fitcecoc
는 일대일 코딩 설계를 활용하여 K(K – 1)/2개의 이진 서포트 벡터 머신(SVM) 모델을 사용합니다. 여기서 K는 고유한 클래스 레이블(레벨) 개수입니다. Mdl
은 ClassificationECOC
모델입니다.
는 위에 열거된 구문을 사용하여 하나 이상의 Mdl
= fitcecoc(___,Name,Value
)Name,Value
쌍의 인수로 지정된 추가 옵션을 통해 ECOC 모델을 반환합니다.
예를 들어, 다른 이진 학습기 또는 다른 코딩 설계를 지정하거나 교차 검증할 수 있습니다. Kfold
Name,Value
쌍의 인수를 사용하여 교차 검증을 수행하는 것이 좋습니다. 교차 검증 결과를 통해 모델이 얼마나 잘 일반화되는지 확인할 수 있습니다.
[
는 Mdl
,HyperparameterOptimizationResults
] = fitcecoc(___,Name,Value
)OptimizeHyperparameters
이름-값 쌍의 인수를 지정하고 선형 또는 커널 이진 학습기를 사용할 경우 하이퍼파라미터 최적화 세부 정보도 반환합니다. 다른 Learners
의 경우, Mdl
의 HyperparameterOptimizationResults
속성에 결과가 들어있습니다.
예제
SVM 학습기를 사용하여 다중클래스 모델 훈련시키기
서포트 벡터 머신(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'
Mdl
은 ClassificationECOC
모델입니다. 기본적으로, 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.4505 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
모델 객체로 반환합니다.
ECOC 분류기 교차 검증하기
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'});
Mdl
은 ClassificationECOC
분류기입니다. 점 표기법을 사용하여 해당 속성에 액세스할 수 있습니다.
10겹 교차 검증을 사용하여 Mdl
을 교차 검증합니다.
CVMdl = crossval(Mdl);
CVMdl
은 교차 검증된 ECOC 분류기 ClassificationPartitionedECOC
입니다.
일반화된 분류 오차를 추정합니다.
genError = kfoldLoss(CVMdl)
genError = 0.0400
일반화된 분류 오차는 4%이며, 이는 ECOC 분류기가 일반화를 상당히 잘 함을 나타냅니다.
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).
Mdl
은 ClassificationECOC
모델입니다. 동일한 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
비닝과 병렬 연산을 사용하여 ECOC 분류기 훈련의 속도 높이기
대리 분할을 활용하는 결정 트리로 구성된 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).
Mdl
은 ClassificationECOC
모델입니다.
교차 검증
10겹 교차 검증을 사용하여 ECOC 분류기를 교차 검증합니다.
CVMdl = crossval(Mdl,'Options',options);
Warning: One or more folds do not contain points from all the groups.
CVMdl
은 ClassificationPartitionedECOC
모델입니다. 경고는 소프트웨어가 최소 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
입니다. X
가 NaN
을 포함하는 경우 이에 대응되는 Xbinned
값은 NaN
이 됩니다.
ECOC 분류기 최적화하기
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 | 19.278 | 0.18667 | 0.18667 | onevsall | 76.389 | 0.0012205 | true | | 2 | Best | 0.10667 | 0.54601 | 0.10667 | 0.11235 | onevsone | 0.0013787 | 41.108 | false | | 3 | Best | 0.04 | 1.2953 | 0.04 | 0.10177 | onevsall | 16.632 | 0.18987 | false | | 4 | Accept | 0.046667 | 0.58983 | 0.04 | 0.091841 | onevsone | 0.04843 | 0.0042504 | true | | 5 | Accept | 0.04 | 1.3414 | 0.04 | 0.040003 | onevsall | 16.708 | 0.21334 | false | | 6 | Accept | 0.33333 | 0.58215 | 0.04 | 0.040005 | onevsall | 0.0010041 | 21.936 | false | | 7 | Accept | 0.47333 | 16.436 | 0.04 | 0.039969 | onevsall | 94.884 | 0.004214 | false | | 8 | Accept | 0.04 | 0.54251 | 0.04 | 0.039876 | onevsone | 0.077785 | 0.010622 | true | | 9 | Accept | 0.26 | 15.662 | 0.04 | 0.039858 | onevsall | 8.9153 | 0.0033389 | false | | 10 | Accept | 0.046667 | 0.66622 | 0.04 | 0.039855 | onevsall | 4.9266 | 0.18135 | false | | 11 | Accept | 0.04 | 0.63448 | 0.04 | 0.039845 | onevsone | 0.014352 | 0.024917 | true | | 12 | Accept | 0.046667 | 0.46726 | 0.04 | 0.039728 | onevsone | 0.059581 | 0.15666 | true | | 13 | Accept | 0.06 | 0.44585 | 0.04 | 0.039703 | onevsone | 0.004907 | 0.62229 | true | | 14 | Accept | 0.046667 | 0.51251 | 0.04 | 0.039733 | onevsone | 0.0010462 | 0.018383 | true | | 15 | Accept | 0.04 | 0.47167 | 0.04 | 0.039437 | onevsone | 0.0014013 | 0.0010097 | true | | 16 | Accept | 0.04 | 0.38739 | 0.04 | 0.03971 | onevsone | 2.3093 | 0.038776 | true | | 17 | Accept | 0.06 | 4.2112 | 0.04 | 0.038874 | onevsone | 4.1623 | 0.0016004 | true | | 18 | Accept | 0.046667 | 2.5373 | 0.04 | 0.039388 | onevsone | 128.63 | 0.03404 | true | | 19 | Accept | 0.04 | 0.48483 | 0.04 | 0.038396 | onevsone | 21.297 | 1.187 | true | | 20 | Accept | 0.08 | 0.68254 | 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.34521 | 0.04 | 0.038644 | onevsone | 940.62 | 2.5021 | true | | 22 | Accept | 0.08 | 0.70581 | 0.04 | 0.038577 | onevsone | 116.39 | 115.89 | true | | 23 | Accept | 0.16667 | 0.6389 | 0.04 | 0.038565 | onevsone | 0.42894 | 42.359 | true | | 24 | Accept | 0.04 | 0.61222 | 0.04 | 0.038555 | onevsone | 154.48 | 0.70993 | true | | 25 | Accept | 0.08 | 4.3317 | 0.04 | 0.038539 | onevsone | 870.52 | 0.0010486 | true | | 26 | Accept | 0.046667 | 0.5207 | 0.04 | 0.038542 | onevsone | 0.14081 | 0.17365 | false | | 27 | Accept | 0.046667 | 1.0978 | 0.04 | 0.038539 | onevsone | 0.0040863 | 0.017832 | false | | 28 | Accept | 0.046667 | 0.98088 | 0.04 | 0.038522 | onevsone | 0.14137 | 0.0017205 | false | | 29 | Accept | 0.046667 | 1.1718 | 0.04 | 0.038529 | onevsone | 9.504 | 0.017258 | false | | 30 | Accept | 0.046667 | 0.92941 | 0.04 | 0.038515 | onevsone | 18.974 | 2.1636 | false | __________________________________________________________ Optimization completed. MaxObjectiveEvaluations of 30 reached. Total function evaluations: 30 Total elapsed time: 106.6355 seconds Total objective function evaluation time: 79.1092 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.2953 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 = 1.1533
Mdl = ClassificationECOC ResponseName: 'Y' CategoricalPredictors: [] ClassNames: {'setosa' 'versicolor' 'virginica'} ScoreTransform: 'none' BinaryLearners: {3x1 cell} CodingName: 'onevsall' HyperparameterOptimizationResults: [1x1 BayesianOptimization]
SVM 및 tall형 배열을 사용하여 다중클래스 ECOC 모델 훈련시키기
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형 데이터를 사용하는 경우 디폴트 값임)에서 일대일(메모리 내 데이터를 사용하는 경우 디폴트 값임)로 변경합니다.
재현이 가능하도록 rng
및 tallrng
를 사용하여 난수 생성기의 시드값을 설정합니다. 결과는 워커의 개수 및 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
객체를 생성하여 커널 이진 학습기의 속성을 지정합니다. 특히, 확장 크기 수를 으로 늘립니다.
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
— 표본 데이터
table형
표본 데이터로, 테이블로 지정됩니다. Tbl
의 각 행은 하나의 관측값에 대응되고, 각 열은 하나의 예측 변수에 대응됩니다. 선택적으로, Tbl
은 응답 변수에 대해 하나의 추가 열을 포함할 수 있습니다. 문자형 벡터로 구성된 셀형 배열 이외의 셀형 배열과 다중 열 변수는 허용되지 않습니다.
Tbl
이 응답 변수를 포함하며 Tbl
의 나머지 모든 변수를 예측 변수로 사용하려는 경우 ResponseVarName
을 사용하여 응답 변수를 지정하십시오.
Tbl
이 응답 변수를 포함하며 Tbl
의 나머지 변수 중 일부만 예측 변수로 사용하려는 경우 formula
를 사용하여 공식을 지정하십시오.
Tbl
이 응답 변수를 포함하지 않는 경우, Y
를 사용하여 응답 변수를 지정하십시오. 응답 변수의 길이와 Tbl
의 행 개수는 동일해야 합니다.
데이터형: table
ResponseVarName
— 응답 변수 이름
Tbl
에 포함된 변수 이름
응답 변수 이름으로, Tbl
의 변수 이름으로 지정됩니다.
ResponseVarName
은 문자형 벡터나 string형 스칼라로 지정해야 합니다. 예를 들어, 응답 변수 Y
가 Tbl.Y
로 저장된 경우 이를 "Y"
로 지정하십시오. 이렇게 하지 않으면 모델을 훈련시킬 때 Y
를 포함한 Tbl
의 모든 열이 예측 변수로 처리됩니다.
응답 변수는 categorical형 배열, 문자형 배열, string형 배열, 논리형 벡터 또는 숫자형 벡터, 문자형 벡터로 구성된 셀형 배열이어야 합니다. Y
가 문자형 배열인 경우, 응답 변수의 각 요소는 배열의 각 행에 대응되어야 합니다.
ClassNames
이름-값 인수를 사용하여 클래스의 순서를 지정하는 것이 좋습니다.
데이터형: char
| string
formula
— 응답 변수와 예측 변수의 부분 집합에 대한 설명 모델
문자형 벡터 | 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
Y
— 클래스 레이블
categorical형 배열 | 문자형 배열 | string형 배열 | 논리형 벡터 | 숫자형 벡터 | 문자형 벡터로 구성된 셀형 배열
ECOC 모델이 훈련되는 클래스 레이블로, categorical형 배열, 문자형 배열, string형 배열, 논리형 벡터 또는 숫자형 벡터, 문자형 벡터로 구성된 셀형 배열로 지정됩니다.
Y
가 문자형 배열인 경우, 각 요소는 배열의 각 행에 대응되어야 합니다.
Y
의 길이와 Tbl
또는 X
의 행 개수는 동일해야 합니다.
ClassNames
이름-값 쌍의 인수를 사용하여 클래스 순서를 지정하는 것이 좋습니다.
데이터형: categorical
| char
| string
| logical
| single
| double
| cell
X
— 예측 변수 데이터
비희소 행렬 | 희소 행렬
예측 변수 데이터로, 비희소 행렬이나 희소 행렬로 지정됩니다.
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'
이름-값 인수를 사용해야만 합니다.
Coding
— 코딩 설계
'onevsone'
(디폴트 값) | 'allpairs'
| 'binarycomplete'
| 'denserandom'
| 'onevsall'
| 'ordinal'
| 'sparserandom'
| 'ternarycomplete'
| 숫자형 행렬
코딩 설계 이름으로, 'Coding'
과 함께 숫자형 행렬 또는 다음 표에 나와 있는 값이 쉼표로 구분되어 지정됩니다.
값 | 이진 학습기 개수 | 설명 |
---|---|---|
'allpairs' 와 'onevsone' | K(K – 1)/2 | 각각의 이진 학습기에서 한 클래스는 양성이고, 다른 클래스는 음성이며, 나머지 클래스는 무시됩니다. 이 설계는 모든 클래스 쌍 할당 조합을 사용합니다. |
'binarycomplete' | 이 설계는 클래스를 모든 이진 조합으로 분할하며 어떠한 클래스도 무시하지 않습니다. 각각의 이진 학습기에서 모든 클래스 할당은 할당의 적어도 1개가 양성 클래스이고 1개가 음성 클래스인 –1 및 1 입니다. | |
'denserandom' | 임의(하지만 대략적으로 10 log2K) | 각각의 이진 학습기에서 소프트웨어는 클래스를 양성 클래스 또는 음성 클래스로 임의로 할당하되 적어도 하나의 양성 및 음성 클래스가 있도록 합니다. 자세한 내용은 확률 코딩 설계 행렬 항목을 참조하십시오. |
'onevsall' | K | 각각의 이진 학습기에서 한 클래스는 양성이고 나머지는 음성입니다. 이 설계는 모든 양성 클래스 할당 조합을 사용합니다. |
'ordinal' | K – 1 | 첫 번째 이진 학습기에서는 첫 번째 클래스가 음성이고 나머지는 양성입니다. 두 번째 이진 학습기에서는 처음 두 개의 클래스가 음성이고 나머지는 양성이 되는 식입니다. |
'sparserandom' | 임의(하지만 대략적으로 15 log2K) | 각각의 이진 학습기에서 소프트웨어는 클래스를 각각 0.25의 확률로 양성 또는 음성으로 임의로 할당하고 0.5의 확률로 무시합니다. 자세한 내용은 확률 코딩 설계 행렬 항목을 참조하십시오. |
'ternarycomplete' | 이 설계는 클래스를 모든 삼진(ternary) 조합으로 분할합니다. 모든 클래스 할당은 각 할당의 적어도 1개가 양성 클래스이고 1개가 음성 클래스인 0 , –1 및 1 입니다. |
사용자 지정 코딩 행렬을 사용하여 코딩 설계를 지정할 수도 있습니다. 여기서 사용자 지정 코딩 행렬은 K×L 행렬입니다. 각 행은 클래스에 대응되며, 각 열은 이진 학습기에 대응됩니다. 클래스 순서(행)는 ClassNames
의 순서에 대응됩니다. 다음 지침에 따라 행렬을 생성하십시오.
사용자 지정 코딩 행렬의 각 요소는
–1
,0
또는1
이어야 하고, 요소의 값은 이분 클래스 할당에 대응해야 합니다. 학습기j
가 클래스i
의 관측값에 할당하는 클래스인Coding(i,j)
를 고려하십시오.값 이분 클래스 할당 –1
학습기 j
가i
클래스에 있는 관측값을 음성 클래스로 할당합니다.0
훈련 전에 학습기 j
는 데이터 세트에서i
클래스에 있는 관측값을 제거합니다.1
학습기 j
가i
클래스에 있는 관측값을 양성 클래스로 할당합니다.모든 열은
–1
및1
을 각각 1개 이상 포함해야 합니다.i
≠j
를 만족하는 모든 열 인덱스i
,j
에 대해Coding(:,i)
는Coding(:,j)
와 같을 수 없으며Coding(:,i)
는–Coding(:,j)
와 같을 수 없습니다.사용자 지정 코딩 행렬의 모든 행은 달라야 합니다.
사용자 지정 코딩 설계 행렬의 형식에 대한 자세한 내용은 사용자 지정 코딩 설계 행렬 항목을 참조하십시오.
예: 'Coding','ternarycomplete'
데이터형: char
| string
| double
| single
| int16
| int32
| int64
| int8
FitPosterior
— 점수를 사후 확률로 변환할지 여부를 나타내는 플래그
false
또는 0
(디폴트 값) | true
또는 1
점수를 사후 확률로 변환할지 여부를 나타내는 플래그로, 'FitPosterior'
와 함께 true
(1
) 또는 false
(0
)가 쉼표로 구분되어 지정됩니다.
FitPosterior
가 true
이면 소프트웨어가 이진-학습기 분류 점수를 사후 확률로 변환합니다. kfoldPredict
, predict
또는 resubPredict
를 사용하여 사후 확률을 얻을 수 있습니다.
fitcecoc
는 다음과 같은 경우 사후 확률 피팅을 지원하지 않습니다.
앙상블 방법이
AdaBoostM2
,LPBoost
,RUSBoost
,RobustBoost
또는TotalBoost
입니다.이진 학습기(
Learners
)가 SVM을 구현하는 선형 분류 모델 또는 커널 분류 모델입니다. 선형 분류 모델 또는 커널 분류 모델에 대한 사후 확률을 얻으려면 이 대신 로지스틱 회귀를 구현하십시오.
예: 'FitPosterior',true
데이터형: logical
Learners
— 이진 학습기 템플릿
"svm"
(디폴트 값) | "discriminant"
| "ensemble"
| "kernel"
| "knn"
| "linear"
| "naivebayes"
| "tree"
| 템플릿 객체 | 템플릿 객체로 구성된 셀형 벡터
이진 학습기 템플릿으로, 문자형 벡터, string형 스칼라, 템플릿 객체, 또는 템플릿 객체로 구성된 셀형 벡터로 지정됩니다. 특히, SVM과 같은 이진 분류기와 GentleBoost
, LogitBoost
, RobustBoost
를 사용하는 앙상블을 지정하여 다중클래스 문제를 풀 수 있습니다. 그러나, fitcecoc
는 다중클래스 모델도 이진 분류기로 지원합니다.
Learners
가 문자형 벡터 또는 string형 스칼라이면 소프트웨어는 지정된 알고리즘의 디폴트 값을 사용하여 각각의 이진 학습기를 훈련시킵니다. 다음 표에는 사용 가능한 알고리즘이 요약되어 있습니다.값 설명 "discriminant"
판별분석. 디폴트 옵션은 templateDiscriminant
를 참조하십시오."ensemble"
(R2024a 이후)앙상블 학습 모델. 기본적으로 앙상블은 적응형 로지스틱 회귀( "LogitBoost"
) 집계 방법, 100개의 학습 사이클, 약한 트리 학습기를 사용합니다. 기타 디폴트 옵션은templateEnsemble
을 참조하십시오."kernel"
커널 분류 모델. 디폴트 옵션은 templateKernel
을 참조하십시오."knn"
k-최근접이웃. 디폴트 옵션은 templateKNN
을 참조하십시오."linear"
선형 분류 모델. 디폴트 옵션은 templateLinear
를 참조하십시오."naivebayes"
나이브 베이즈(Naive Bayes). 디폴트 옵션은 templateNaiveBayes
를 참조하십시오."svm"
SVM. 디폴트 옵션은 templateSVM
을 참조하십시오."tree"
분류 트리. 디폴트 옵션은 templateTree
를 참조하십시오.Learners
가 템플릿 객체이면 각각의 이진 학습기는 저장된 옵션을 따라 훈련합니다. 다음을 사용하여 템플릿 객체를 생성할 수 있습니다.templateDiscriminant
- 판별분석에 사용합니다.templateEnsemble
- 앙상블 학습에 사용합니다. 최소한 학습 방법(Method
), 학습기 개수(NLearn
), 학습기 유형(Learners
)을 지정해야 합니다. 이진 학습에는"AdaBoostM2"
앙상블 방법을 사용할 수 없습니다.OptimizeHyperparameters
이름-값 인수를 사용하여 하이퍼파라미터 최적화를 수행하려면 앙상블 방법이"AdaBoostM1"
,"GentleBoost"
,"LogitBoost"
중 하나이고 약한 앙상블 학습기가 트리여야 합니다.templateKernel
- 커널 분류에 사용합니다.templateKNN
- k-최근접이웃에 사용합니다.templateLinear
- 선형 분류에 사용합니다.templateNaiveBayes
- 나이브 베이즈에 사용합니다.templateSVM
- SVM에 사용합니다.templateTree
- 분류 트리에 사용합니다.
Learners
가 템플릿 객체로 구성된 셀형 벡터이면 다음과 같습니다.셀 j가 이진 학습기 j(즉, 코딩 설계 행렬의 열 j)에 대응되고, 셀형 벡터의 길이는 L이어야 합니다. L은 코딩 설계 행렬에 포함된 열의 개수입니다. 자세한 내용은
Coding
을 참조하십시오.예측 시 내장 손실 함수 중 하나를 사용하려면 모든 이진 학습기가 동일한 범위의 점수를 반환해야 합니다. 예를 들어, 디폴트 SVM 이진 학습기를 디폴트 나이브 베이즈 이진 학습기와 함께 포함시킬 수는 없습니다. 전자는 (-∞,∞) 범위의 점수를 반환하고 후자는 사후 확률을 점수로 반환합니다. 또는,
predict
및loss
와 같은 함수에 대한 함수 핸들로 사용자 지정 손실 함수를 제공해야 합니다.선형 분류 모델 학습기 템플릿을 다른 템플릿과 함께 지정할 수 없습니다.
마찬가지로, 커널 분류 모델 학습기 템플릿을 다른 템플릿과 함께 지정할 수 없습니다.
기본적으로, 소프트웨어는 디폴트 SVM 템플릿을 사용하여 학습기를 훈련시킵니다.
예: "Learners","tree"
NumBins
— 숫자형 예측 변수의 Bin 개수
[]
(비어 있음) (디폴트 값) | 양의 정수 스칼라
숫자형 예측 변수의 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
(디폴트 값) | 양의 정수 스칼라
동시에 훈련되는 이진 학습기 개수로, 'NumConcurrent'
와 함께 양의 정수 스칼라가 쉼표로 구분되어 지정됩니다. 디폴트 값은 1
이며, 이 경우 fitcecoc
가 이진 학습기를 순차적으로 훈련시킵니다.
참고
이 옵션은 tall형 배열에 fitcecoc
를 사용하는 경우에만 적용됩니다. 자세한 내용은 tall형 배열 항목을 참조하십시오.
데이터형: single
| double
ObservationsIn
— 예측 변수 데이터 관측 차원
'rows'
(디폴트 값) | 'columns'
예측 변수 데이터 관측 차원으로, 'ObservationsIn'
과 함께 'columns'
또는 'rows'
가 쉼표로 구분되어 지정됩니다.
참고
선형 분류 학습기의 경우, 관측값이 열에 대응되도록
X
의 방향을 지정하고'ObservationsIn','columns'
를 지정하면 최적화-실행 시간을 상당히 줄일 수 있습니다.다른 모든 학습기의 경우 관측값이 행에 대응되도록
X
의 방향을 지정하십시오.
예: 'ObservationsIn','columns'
Verbose
— 세부 정보 표시 수준
0
(디폴트 값) | 1
| 2
세부 정보 표시 수준으로, 'Verbose'
와 함께 0
, 1
또는 2
가 쉼표로 구분되어 지정됩니다. Verbose
는 소프트웨어가 명령 창에 표시하는 이진 학습기당 진단 정보의 양을 제어합니다.
다음 표에는 사용 가능한 세부 정보 표시 수준 옵션이 요약되어 있습니다.
값 | 설명 |
---|---|
0 | 소프트웨어가 진단 정보를 표시하지 않습니다. |
1 | 소프트웨어가 새로운 이진 학습기를 훈련시킬 때마다 진단 메시지를 표시합니다. |
2 | 소프트웨어가 새로운 이진 학습기를 훈련시킬 때마다 추가 진단 메시지를 표시합니다. |
각 이진 학습기는 이 이름-값 쌍의 인수와는 독립적인 고유한 세부 정보 표시 수준을 갖습니다. 이진 학습기의 세부 정보 표시 수준을 변경하려면 템플릿 객체를 생성하고 'Verbose'
이름-값 쌍의 인수를 지정하십시오. 그런 다음, 'Learners'
이름-값 쌍의 인수를 사용하여 템플릿 객체를 fitcecoc
에 전달합니다.
예: 'Verbose',1
데이터형: double
| single
CrossVal
— 교차 검증된 분류기를 훈련시키는 플래그
'off'
(디폴트 값) | 'on'
교차 검증된 분류기를 훈련시키는 플래그로, 'Crossval'
과 함께 'on'
또는 'off'
가 쉼표로 구분되어 지정됩니다.
'on'
으로 지정하면 소프트웨어가 10겹 교차 검증된 분류기를 훈련시킵니다.
CVPartition
, Holdout
, KFold
또는 Leaveout
이름-값 쌍의 인수 중 하나를 사용하여 이 교차 검증 설정을 재정의할 수 있습니다. 한 번에 하나의 교차 검증 이름-값 쌍의 인수만 사용하여 교차 검증된 모델을 생성할 수 있습니다.
또는, Mdl
을 crossval
로 전달하여 나중에 교차 검증을 수행할 수 있습니다.
예: 'Crossval','on'
CVPartition
— 교차 검증 분할
[]
(디폴트 값) | cvpartition
객체
교차 검증 분할로, 교차 검증의 유형과 훈련 세트 및 검증 세트의 인덱싱을 지정하는 cvpartition
객체로 지정됩니다.
교차 검증된 모델을 생성하려면 다음 4개의 이름-값 인수 중 하나만 지정할 수 있습니다. CVPartition
, Holdout
, KFold
, Leaveout
예: cvp = cvpartition(500,KFold=5)
를 사용하여 500개 관측값에 대한 5겹 교차 검증에 사용할 임의 분할을 생성한다고 가정하겠습니다. 그러면 CVPartition=cvp
를 설정하여 교차 검증 분할을 지정할 수 있습니다.
Holdout
— 홀드아웃 검증에 사용할 데이터의 비율
(0,1) 범위의 스칼라 값
홀드아웃 검증에 사용할 데이터의 비율로, 범위 [0,1] 내 스칼라 값으로 지정됩니다. Holdout=p
를 지정하는 경우 소프트웨어는 다음 단계를 완료합니다.
데이터의
p*100
%를 무작위로 선택하여 검증 데이터용으로 남겨두고 나머지 데이터를 사용하여 모델을 훈련시킵니다.교차 검증된 모델의
Trained
속성에 훈련된 간소 모델을 저장합니다.
교차 검증된 모델을 생성하려면 다음 4개의 이름-값 인수 중 하나만 지정할 수 있습니다. CVPartition
, Holdout
, KFold
, Leaveout
예: Holdout=0.1
데이터형: double
| single
KFold
— 겹의 개수
10
(디폴트 값) | 1보다 큰 양의 정수 값
교차 검증된 모델에 사용할 겹의 개수로, 1보다 큰 양의 정수 값으로 지정됩니다. KFold=k
를 지정하는 경우 소프트웨어는 다음 단계를 완료합니다.
데이터를
k
개 세트로 임의로 분할합니다.각 세트마다 해당 세트를 검증 데이터로 남겨두고 나머지
k
– 1개의 세트를 사용하여 모델을 훈련시킵니다.교차 검증된 모델의
Trained
속성에k
×1 셀형 벡터로k
개의 훈련된 간소 모델을 저장합니다.
교차 검증된 모델을 생성하려면 다음 4개의 이름-값 인수 중 하나만 지정할 수 있습니다. CVPartition
, Holdout
, KFold
, Leaveout
예: KFold=5
데이터형: single
| double
Leaveout
— 리브-원-아웃(Leave-One-Out) 교차 검증 플래그
'off'
(디폴트 값) | 'on'
리브-원-아웃 교차 검증 플래그로, 'Leaveout'
과 함께 'on'
이나 'off'
가 쉼표로 구분되어 지정됩니다. 'Leaveout','on'
을 지정하는 경우, n개 관측값 각각에 대해(여기서 n은 size(Mdl.X,1)
임) 소프트웨어가 다음 동작을 수행합니다.
관측값을 검증 데이터로 남겨두고 나머지 n – 1개 관측값을 사용하여 모델을 훈련시킵니다.
교차 검증된 모델의
Trained
속성에 n×1 셀형 벡터의 셀로 n개의 훈련된 간소 모델을 저장합니다.
교차 검증된 모델을 생성하려면 다음 4개의 옵션 중 하나만을 사용할 수 있습니다. CVPartition
, Holdout
, KFold
또는 Leaveout
.
참고
리브-원-아웃은 선형 분류 모델 학습기 또는 커널 분류 모델 학습기로 구성된 ECOC 모델을 교차 검증하는 데는 권장되지 않습니다.
예: 'Leaveout','on'
CategoricalPredictors
— 범주형 예측 변수 목록
양의 정수로 구성된 벡터 | 논리형 벡터 | 문자형 행렬 | string형 배열 | 문자형 벡터로 구성된 셀형 배열 | 'all'
범주형 예측 변수 목록으로, 다음 표에 있는 값 중 하나로 지정됩니다.
값 | 설명 |
---|---|
양의 정수로 구성된 벡터 | 벡터의 각 요소는 대응되는 예측 변수가 범주형임을 나타내는 인덱스 값입니다. 인덱스 값은 1과
|
논리형 벡터 | 요소의 값이 |
문자형 행렬 | 행렬의 각 행은 예측 변수의 이름입니다. 이름은 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
ClassNames
— 훈련에 사용할 클래스의 이름
categorical형 배열 | 문자형 배열 | string형 배열 | 논리형 벡터 | 숫자형 벡터 | 문자형 벡터로 구성된 셀형 배열
훈련에 사용할 클래스의 이름으로, categorical형 배열, 문자형 배열, string형 배열, 논리형 벡터 또는 숫자형 벡터, 문자형 벡터로 구성된 셀형 배열로 지정됩니다. ClassNames
는 Tbl
의 응답 변수 또는 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
를 지정하는 경우,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
에서 반환되는 구조체형 배열
병렬 연산 옵션으로, 'Options'
와 함께 statset
에서 반환되는 구조체형 배열이 쉼표로 구분되어 지정됩니다. 병렬 연산을 사용하려면 Parallel Computing Toolbox™가 필요합니다. fitcecoc
함수는 'Streams'
, 'UseParallel'
, 'UseSubtreams'
필드를 사용합니다.
다음 표에는 사용 가능한 옵션이 요약되어 있습니다.
옵션 | 설명 |
---|---|
'Streams' |
이 경우, 병렬 풀과 크기가 같은 셀형 배열을 사용하십시오. 병렬 풀이 열려 있지 않으면 소프트웨어가 병렬 풀(기본 설정에 따름)을 열려고 하고 |
'UseParallel' | Parallel Computing Toolbox가 있는 경우 이진 학습기에 결정 트리를 사용할 때는 |
'UseSubstreams' | 'Streams' 로 지정된 스트림을 사용하여 계산하려면 true 를 설정하십시오. 디폴트 값은 false 입니다. 예를 들어, 'mlfg6331_64' 또는 'mrg32k3a' 와 같은 서브스트림을 허용하는 유형으로 Streams 를 설정하십시오. |
더욱 예측 가능한 결과를 얻으려면 parpool
(Parallel Computing Toolbox)을 사용하고 fitcecoc
함수를 사용하여 병렬 계산을 불러오기 전에 병렬 풀을 명시적으로 생성하는 것이 좋습니다.
예: 'Options',statset('UseParallel',true)
데이터형: struct
PredictorNames
— 예측 변수 이름
고유한 이름으로 구성된 string형 배열 | 고유한 문자형 벡터로 구성된 셀형 배열
예측 변수 이름으로, 고유한 이름으로 구성된 string형 배열 또는 고유한 문자형 벡터로 구성된 셀형 배열로 지정됩니다. PredictorNames
의 기능은 훈련 데이터를 어떤 방식으로 제공하느냐에 따라 달라집니다.
X
와Y
를 제공하는 경우,PredictorNames
를 사용하여X
의 예측 변수에 이름을 할당할 수 있습니다.PredictorNames
의 이름의 순서는X
의 열 순서와 일치해야 합니다. 즉,PredictorNames{1}
은X(:,1)
의 이름이고,PredictorNames{2}
는X(:,2)
의 이름이 되는 식입니다. 또한,size(X,2)
와numel(PredictorNames)
는 같아야 합니다.기본적으로
PredictorNames
는{'x1','x2',...}
입니다.
Tbl
을 제공하는 경우,PredictorNames
를 사용하여 훈련에 사용할 예측 변수를 선택할 수 있습니다. 즉,fitcecoc
함수는PredictorNames
의 예측 변수와 이에 대한 응답 변수만을 훈련 중에 사용합니다.PredictorNames
는Tbl.Properties.VariableNames
의 부분 집합이어야 하므로 응답 변수의 이름은 포함할 수 없습니다.기본적으로,
PredictorNames
는 모든 예측 변수의 이름을 포함합니다.PredictorNames
와formula
중 하나만 사용하여 훈련에 사용할 예측 변수를 지정하는 것이 좋습니다.
예: "PredictorNames",["SepalLength","SepalWidth","PetalLength","PetalWidth"]
데이터형: string
| cell
Prior
— 사전 확률
'empirical'
(디폴트 값) | 'uniform'
| 숫자형 벡터 | 구조체형 배열
각 클래스의 사전 확률로, 'Prior'
와 함께 다음 표에 나와 있는 값이 쉼표로 구분되어 지정됩니다.
값 | 설명 |
---|---|
'empirical' | 클래스 사전 확률은 Y 의 클래스 상대 도수입니다. |
'uniform' | 모든 클래스 사전 확률은 1/K와 같습니다. 여기서 K는 클래스 개수입니다. |
숫자형 벡터 | 각 요소는 클래스 사전 확률입니다. Mdl .ClassNames 에 따라 요소의 순서를 지정하거나 ClassNames 이름-값 쌍의 인수를 사용하여 순서를 지정합니다. 소프트웨어는 합이 1 이 되도록 요소를 정규화합니다. |
구조체 | 다음과 같은 두 개의 필드를 갖는 구조체
|
소프트웨어가 클래스 사전 확률을 통합하는 방법에 대한 자세한 내용은 사전 확률과 오분류 비용 항목을 참조하십시오.
예: struct('ClassNames',{{'setosa','versicolor','virginica'}},'ClassProbs',1:3)
데이터형: single
| double
| char
| string
| struct
ResponseName
— 응답 변수 이름
"Y"
(디폴트 값) | 문자형 벡터 | string형 스칼라
응답 변수 이름으로, 문자형 벡터 또는 string형 스칼라로 지정됩니다.
Y
를 제공하는 경우,ResponseName
을 사용하여 응답 변수의 이름을 지정할 수 있습니다.ResponseVarName
또는formula
를 제공하는 경우에는ResponseName
을 사용할 수 없습니다.
예: "ResponseName","response"
데이터형: char
| string
Weights
— 관측값 가중치
양수 값으로 구성된 숫자형 벡터 | Tbl
에 포함된 변수 이름
관측값 가중치로, 'Weights'
와 함께 양수 값으로 구성된 숫자형 벡터나 Tbl
에 포함된 변수의 이름이 쉼표로 구분되어 지정됩니다. 소프트웨어는 X
또는 Tbl
의 각 행에 있는 관측값에 이에 대응하는 Weights
의 값을 함께 사용하여 가중치를 적용합니다. Weights
의 크기는 X
또는 Tbl
의 행 개수와 일치해야 합니다.
입력 데이터를 테이블 Tbl
로 지정하는 경우, Weights
는 Tbl
에서 숫자형 벡터를 포함하는 변수의 이름일 수 있습니다. 이 경우, Weights
를 문자형 벡터 또는 string형 스칼라로 지정해야 합니다. 예를 들어, 가중 벡터 W
가 Tbl.W
로 저장된 경우, 이를 'W'
로 지정하십시오. 그렇지 않은 경우, 소프트웨어는 모델을 훈련시킬 때 W
를 포함한 Tbl
의 모든 열을 예측 변수 또는 응답 변수로 처리합니다.
소프트웨어는 Weights
의 총합이 각 클래스의 사전 확률의 값이 되도록 정규화합니다.
기본적으로, Weights
는 ones(
입니다. 여기서 n
,1)n
은 X
또는 Tbl
에 포함된 관측값 개수입니다.
데이터형: double
| single
| char
| string
OptimizeHyperparameters
— 최적화할 모수
"none"
(디폴트 값) | "auto"
| "all"
| 적합한 모수 이름으로 구성된 string형 배열 또는 셀형 배열 | optimizableVariable
객체로 구성된 벡터
최적화할 모수로, 다음 값 중 하나로 지정됩니다.
"none"
— 최적화하지 않습니다."auto"
— 지정된Learners
의 디폴트 모수와 함께"Coding"
을 사용합니다.Learners
="svm"
(디폴트 값) —["BoxConstraint","KernelScale","Standardize"]
Learners
="discriminant"
—["Delta","Gamma"]
Learners
="ensemble"
—["LearnRate","Method","MinLeafSize","NumLearningCycles"]
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
에 대한 적합한 모수는 다음과 같습니다.
Coding
—fitcecoc
가"onevsall"
과"onevsone"
중에서 탐색을 수행합니다.아래 표에서 각
Learners
마다 지정된 적합한 하이퍼파라미터.학습기 적합한 하이퍼파라미터
(굵게 표시된 항목이 디폴트 값임)디폴트 범위 "discriminant"
Delta
[1e-6,1e3]
범위에서 로그 스케일링된 값Gamma
[0,1]
의 실수 값DiscrimType
"linear"
,"quadratic"
,"diagLinear"
,"diagQuadratic"
,"pseudoLinear"
,"pseudoQuadratic"
"ensemble"
(R2024a 이후)Method
"AdaBoostM1"
,"GentleBoost"
,"LogitBoost"
NumLearningCycles
[10,500]
범위에서 로그 스케일링된 정수LearnRate
[1e-3,1]
범위에서 로그 스케일링된 양수 값MinLeafSize
[1,max(2,floor(NumObservations/2))]
범위에서 로그 스케일링된 정수MaxNumSplits
[1,max(2,NumObservations-1)]
범위에서 로그 스케일링된 정수SplitCriterion
"deviance"
,"gdi"
,"twoing"
"kernel"
Learner
"svm"
및"logistic"
KernelScale
[1e-3,1e3]
범위에서 로그 스케일링된 양수 값Lambda
[1e-3/NumObservations,1e3/NumObservations]
범위에서 로그 스케일링된 양수 값NumExpansionDimensions
[100,10000]
범위에서 로그 스케일링된 정수Standardize
"true"
및"false"
"knn"
NumNeighbors
[1, max(2,round(NumObservations/2))]
범위에서 로그 스케일링된 양의 정수 값Distance
"cityblock"
,"chebychev"
,"correlation"
,"cosine"
,"euclidean"
,"hamming"
,"jaccard"
,"mahalanobis"
,"minkowski"
,"seuclidean"
,"spearman"
DistanceWeight
"equal"
,"inverse"
,"squaredinverse"
Exponent
[0.5,3]
의 양수 값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"
MinLeafSize
[1,max(2,floor(NumObservations/2))]
범위에서 로그 스케일링된 정수MaxNumSplits
[1,max(2,NumObservations-1)]
범위에서 로그 스케일링된 정수SplitCriterion
"gdi"
,"deviance"
,"twoing"
NumVariablesToSample
[1,max(2,NumPredictors)]
범위의 정수또는, 다음과 같이 선택한
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];
params
를 OptimizeHyperparameters
의 값으로 전달합니다.
기본적으로, 반복 표시가 명령줄에 표시되고, 최적화에 지정된 하이퍼파라미터 개수에 따라 플롯이 표시됩니다. 최적화와 플롯에 대해 목적 함수는 오분류율입니다. 반복 표시를 제어하려면 HyperparameterOptimizationOptions
이름-값 인수에 대한 Verbose
필드를 설정하십시오. 플롯을 제어하려면 HyperparameterOptimizationOptions
이름-값 인수에 대한 ShowPlots
필드를 설정하십시오.
예제는 ECOC 분류기 최적화하기 항목을 참조하십시오.
예: "OptimizeHyperparameters","auto"
HyperparameterOptimizationOptions
— 최적화에 사용할 옵션
구조체
최적화에 사용할 옵션으로, 구조체로 지정됩니다. 이 인수는 OptimizeHyperparameters
이름-값 인수의 효과를 수정합니다. 이 구조체에 포함된 모든 필드는 선택 사항입니다.
필드 이름 | 값 | 디폴트 값 |
---|---|---|
Optimizer |
| "bayesopt" |
AcquisitionFunctionName |
최적화는 목적 함수의 런타임에 종속적이기 때문에 이름에 | "expected-improvement-per-second-plus" |
MaxObjectiveEvaluations | 목적 함수 실행의 최대 횟수입니다. |
|
MaxTime | 시간 제한으로, 양의 실수형 스칼라로 지정됩니다. 시간 제한은 초 단위이며, | Inf |
NumGridDivisions | "gridsearch" 의 경우, 각 차원의 값 개수입니다. 이 값은 각 차원에 대한 값의 개수를 제공하는 양의 정수로 구성된 벡터 또는 모든 차원에 적용되는 스칼라일 수 있습니다. 이 필드는 범주형 변수의 경우 무시됩니다. | 10 |
ShowPlots | 플롯 표시 여부를 나타내는 논리값입니다. true 인 경우, 이 필드는 반복 횟수에 대해 최선의 관측된 목적 함수 값을 플로팅합니다. 베이즈 최적화를 사용하는 경우(Optimizer 가 "bayesopt" 임), 이 필드는 최선의 추정된 목적 함수 값도 플로팅합니다. 최선의 관측된 목적 함수 값과 최선의 추정된 목적 함수 값은 각각 반복 표시의 BestSoFar (observed) 열과 BestSoFar (estim.) 열의 값에 대응됩니다. Mdl.HyperparameterOptimizationResults 의 속성 ObjectiveMinimumTrace 및 EstimatedObjectiveMinimumTrace 에서 이러한 값을 확인할 수 있습니다. 문제에 베이즈 최적화를 위한 하나 또는 두 개의 최적화 모수가 있는 경우, ShowPlots 는 이 모수에 대해서도 목적 함수의 모델을 플로팅합니다. | true |
SaveIntermediateResults | Optimizer 가 "bayesopt" 인 경우 결과를 저장할지 여부를 나타내는 논리값입니다. true 인 경우, 이 필드는 각 반복마다 "BayesoptResults" 라는 이름의 작업 공간 변수를 덮어씁니다. 변수는 BayesianOptimization 객체입니다. | false |
Verbose | 명령줄에 표시되는 내용:
자세한 내용은 | 1 |
UseParallel | 베이즈 최적화를 병렬로 실행할지 여부를 나타내는 논리값으로, Parallel Computing Toolbox가 필요합니다. 병렬 시간 재현이 불가능하기 때문에, 병렬 베이즈 최적화에서 반드시 재현 가능한 결과를 산출하지는 않습니다. 자세한 내용은 Parallel Bayesian Optimization 항목을 참조하십시오. | false |
Repartition | 매 반복 시 교차 검증을 다시 분할할지 여부를 나타내는 논리값입니다. 이 필드의 값이
| false |
다음과 같은 3개 옵션 중 하나만 사용합니다. | ||
CVPartition | cvpartition 으로 생성되는 cvpartition 객체 | 교차 검증 필드를 지정하지 않을 경우 "Kfold",5 |
Holdout | 홀드아웃 비율을 나타내는 범위 (0,1) 내 스칼라 | |
Kfold | 1보다 큰 정수 |
예: "HyperparameterOptimizationOptions",struct("MaxObjectiveEvaluations",60)
데이터형: struct
출력 인수
Mdl
— 훈련된 ECOC 모델
ClassificationECOC
모델 객체 | CompactClassificationECOC
모델 객체 | ClassificationPartitionedECOC
교차 검증된 모델 객체 | ClassificationPartitionedLinearECOC
교차 검증된 모델 객체 | ClassificationPartitionedKernelECOC
교차 검증된 모델 객체
훈련된 ECOC 분류기로, 모델 객체 ClassificationECOC
또는 CompactClassificationECOC
나 교차 검증된 모델 객체 ClassificationPartitionedECOC
, ClassificationPartitionedLinearECOC
또는 ClassificationPartitionedKernelECOC
로 반환됩니다.
다음 표에서는 fitcecoc
에서 반환된 모델 객체의 유형이 사용자가 지정하는 이진 학습기 유형과 교차 검증 수행 여부에 따라 어떻게 달라지는지를 보여줍니다.
선형 분류 모델 학습기 | 커널 분류 모델 학습기 | 교차 검증 | 반환되는 모델 객체 |
---|---|---|---|
아니요 | 아니요 | 아니요 | ClassificationECOC |
아니요 | 아니요 | 예 | ClassificationPartitionedECOC |
예 | 아니요 | 아니요 | CompactClassificationECOC |
예 | 아니요 | 예 | ClassificationPartitionedLinearECOC |
아니요 | 예 | 아니요 | CompactClassificationECOC |
아니요 | 예 | 예 | ClassificationPartitionedKernelECOC |
HyperparameterOptimizationResults
— 하이퍼파라미터에 대한 교차 검증 최적화와 관련된 설명
BayesianOptimization
객체 | 하이퍼파라미터 및 관련 값으로 구성된 테이블
하이퍼파라미터에 대한 교차 검증 최적화와 관련된 설명으로, BayesianOptimization
객체 또는 하이퍼파라미터 및 관련 값으로 구성된 테이블로 반환됩니다. HyperparameterOptimizationResults
이름-값 쌍의 인수는 OptimizeHyperparameters
이름-값 쌍의 인수가 비어 있지 않은 경우에 비어 있지 않으며 Learners
이름-값 쌍의 인수는 선형 이진 학습기 또는 커널 이진 학습기를 지정합니다. 값은 HyperparameterOptimizationOptions
이름-값 쌍의 인수의 설정에 따라 결정됩니다.
'bayesopt'
(디폴트 값) —BayesianOptimization
클래스의 객체'gridsearch'
또는'randomsearch'
— 사용된 하이퍼파라미터, 관측된 목적 함수 값(교차 검증 손실), 그리고 관측값 순위가 가장 낮은 값(최상)에서 가장 높은 값(최하)순으로 포함된 테이블
데이터형: table
제한 사항
fitcecoc
함수는 선형 분류 모델을 훈련시키는 데에만 희소 행렬을 지원합니다. 기타 모든 모델의 경우, 비희소 행렬을 예측 변수 데이터로 제공하십시오.
세부 정보
오류 수정 출력 코드(ECOC) 모델
오류 수정 출력 코드(ECOC) 모델은 세 개 이상의 클래스를 갖는 분류 문제를 이진 분류기 문제 세트로 간소화합니다.
ECOC 분류에는 이진 학습기가 훈련하는 데 기준이 되는 클래스를 결정하는 코딩 설계와 이진 분류기의 결과(예측값)가 어떻게 집계되는지를 결정하는 디코딩 체계가 필요합니다.
다음과 같이 가정하겠습니다.
분류 문제에는 3개의 클래스가 있습니다.
코딩 설계가 일대일입니다. 3개의 클래스에 대해 이 코딩 설계는
입니다. 분류 모델을 생성할 때
Coding
이름-값 인수를 사용하여 다른 코딩 설계를 지정할 수 있습니다.이 모델은 이진 손실 함수 g와 함께 손실 가중 디코딩 체계를 사용하여, 예측된 클래스를 결정합니다. 또한 손실 기반 디코딩 체계도 지원됩니다.
predict
,loss
,margin
,edge
등과 같은 객체 함수를 호출할 때Decoding
및BinaryLoss
이름-값 인수를 각각 사용하여 디코딩 체계 및 이진 손실 함수를 지정할 수 있습니다.
ECOC 알고리즘은 다음 단계를 따릅니다.
학습기 1은 클래스 1 또는 클래스 2에 있는 관측값에 대해 훈련하고, 클래스 1을 양성 클래스로, 클래스 2를 음성 클래스로 처리합니다. 다른 학습기도 비슷하게 훈련됩니다.
M을 요소 mkl을 포함하는 코딩 설계 행렬이라 하고, sl은 학습기 l의 양성 클래스에 대한 예측 분류 점수라고 하겠습니다. 알고리즘은 새 관측값을 B 이진 학습기의 손실에 대한 집계를 최소화하는 클래스()에 할당합니다.
ECOC 모델은 기타 다중클래스 모델에 비해 분류 정확도를 향상시킬 수 있습니다[2].
코딩 설계
코딩 설계는 어떤 클래스가 각각의 이진 학습기로 훈련되는지, 즉, 다중클래스 문제가 일련의 이진 문제로 어떤 식으로 간소화되는지를 요소가 나타내는 행렬입니다.
코딩 설계의 각 행은 고유한 클래스에 대응되며, 각 열은 이진 학습기에 대응됩니다. 삼진 코딩 설계에서는 특정 열(또는 이진 학습기)에 대해 다음 사항이 적용됩니다.
1을 포함하는 행은 이진 학습기에게 대응 클래스에 포함된 모든 관측값을 양성 클래스로 그룹화하라고 지시합니다.
-1을 포함하는 행은 이진 학습기에게 대응 클래스에 포함된 모든 관측값을 음성 클래스로 그룹화하라고 지시합니다.
0을 포함하는 행은 이진 학습기에게 대응 클래스에 포함된 모든 관측값을 무시하라고 지시합니다.
해밍 측정법에 기반한 최소 쌍별 행 거리가 큰 값으로 구성된 코딩 설계 행렬이 적합합니다. 쌍별 행 거리에 대한 자세한 내용은 확률 코딩 설계 행렬 항목과 [3] 항목을 참조하십시오.
다음 표에는 많이 사용되는 코딩 설계가 설명되어 있습니다.
코딩 설계 | 설명 | 학습기 수 | 최소 쌍별 행 거리 |
---|---|---|---|
일대다(OVA) | 각각의 이진 학습기에서 한 클래스는 양성이고 나머지는 음성입니다. 이 설계는 모든 양성 클래스 할당 조합을 사용합니다. | K | 2 |
일대일(OVO) | 각각의 이진 학습기에서 한 클래스는 양성이고, 한 클래스는 음성이며, 나머지 클래스는 무시됩니다. 이 설계는 모든 클래스 쌍 할당 조합을 사용합니다. | K(K – 1)/2 | 1 |
완전 이진 | 이 설계는 클래스를 모든 이진 조합으로 분할하며 어떠한 클래스도 무시하지 않습니다. 즉, 모든 클래스는 | 2K – 1 – 1 | 2K – 2 |
완전 삼진 | 이 설계는 클래스를 모든 삼진(ternary) 조합으로 분할합니다. 즉, 모든 클래스는 | (3K – 2K + 1 + 1)/2 | 3K – 2 |
순서형 | 첫 번째 이진 학습기에서는 첫 번째 클래스가 음성이고 나머지는 양성입니다. 두 번째 이진 학습기에서는 처음 두 개의 클래스가 음성이고 나머지는 양성이 되는 식입니다. | K – 1 | 1 |
조밀 확률 | 각각의 이진 학습기에서 소프트웨어는 클래스를 양성 클래스 또는 음성 클래스로 임의로 할당하되 적어도 하나의 양성 및 음성 클래스가 있도록 합니다. 자세한 내용은 확률 코딩 설계 행렬 항목을 참조하십시오. | 임의(하지만 대략적으로 10 log2K) | 가변 |
희소 확률 | 각각의 이진 학습기에서 소프트웨어는 클래스를 각각 0.25의 확률로 양성 또는 음성으로 임의로 할당하고 0.5의 확률로 무시합니다. 자세한 내용은 확률 코딩 설계 행렬 항목을 참조하십시오. | 임의(하지만 대략적으로 15 log2K) | 가변 |
이 플롯은 클래스 개수(K)가 증가함에 따라 코딩 설계에 필요한 이진 학습기 개수를 비교합니다.
팁
이진 학습기 개수는 클래스 개수에 따라 늘어납니다. 클래스가 많은 문제의 경우,
binarycomplete
및ternarycomplete
코딩 설계는 효율적이지 않습니다. 그러나 다음을 참고하십시오.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 클래스는 해당 설계 행렬에 의해 분리될 수 없다는 걸 의미합니다. 예를 들어, 다음 코딩 설계
에서 클래스 1 및 클래스 2는 클래스 3 및 클래스 4와 분리될 수 없습니다(즉, 열 2에 0이 있으므로 행- 2의 -1에서 열 2로 가로로 이동할 수 없음). 따라서 소프트웨어가 이 코딩 설계를 거부합니다.
병렬 연산
병렬 연산을 사용하면(Options
참조), fitcecoc
가 이진 학습기를 병렬로 훈련시킵니다.
사전 확률과 오분류 비용
Cost
, Prior
및 Weights
이름-값 인수를 지정할 경우 출력 모델 객체는 지정된 값을 각각 Cost
, Prior
및 W
속성에 저장합니다. Cost
속성은 사용자가 지정한 비용 행렬을 그대로 저장합니다. Prior
속성과 W
속성은 각각 정규화한 후의 사전 확률 및 관측값 가중치를 저장합니다. 자세한 내용은 오분류 비용 행렬, 사전 확률 및 관측값 가중치 항목을 참조하십시오.
각각의 이진 학습기에 대해 소프트웨어는 사전 확률을 2개 요소의 벡터로 정규화하며, 비용 행렬을 2×2 행렬로 정규화합니다. 그런 다음, 소프트웨어는 2×2 비용 행렬에 있는 벌점을 통합하여 사전 확률 벡터를 조정하고, 비용 행렬을 디폴트 비용 행렬로 설정합니다. Mdl
에 정의된 이진 학습기(Mdl.BinaryLearners
)의 Cost
및 Prior
속성은 조정된 값을 저장합니다. 특히 소프트웨어는 다음 단계를 완료합니다.
소프트웨어는 각각의 이진 학습기에 대해 지정된 클래스 사전 확률(
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)
)을 나타냅니다. 또한, 을 M+1의 열 벡터 l이라고 하겠습니다.M-1 = -M○I(M,-1)(즉,
Mminus = -M.*(M == -1)
). 또한, 을 M-1의 열 벡터 l이라고 하겠습니다.
및 이라고 하겠습니다. 여기서 π는 지정된 클래스 사전 확률(
Prior
)의 벡터입니다.그러면, 이진 학습기 l에 대한 양성 및 음성 스칼라 클래스 사전 확률은 다음과 같습니다.
여기서 j = {-1,1}이며 은 a의 1-노름입니다.
소프트웨어는 각 이진 학습기에 대해 K×K 비용 행렬 C(
Cost
)를 정규화합니다. 이진 학습기 l에 대해 음성 클래스 관측값을 양성 클래스로 분류하는 비용은 다음과 같습니다.마찬가지로, 양성 클래스 관측값을 음성 클래스로 분류하는 비용은 다음과 같습니다.
이진 학습기 l에 대한 비용 행렬은 다음과 같습니다.
ECOC 모델은 오분류 비용을 클래스 사전 확률에 통합하여 수용합니다. 소프트웨어가 다음과 같이 클래스 사전 확률을 조정하고 비용 행렬을 이진 학습기에 대한 디폴트 비용 행렬로 설정합니다.
확률 코딩 설계 행렬
클래스의 개수가 K개로 주어지면 다음과 같이 확률 코딩 설계 행렬을 생성합니다.
다음 행렬 중 하나를 생성합니다.
조밀 확률 — K×Ld 코딩 설계 행렬의 각 요소에 동일한 확률로 1 또는 –1을 할당합니다. 여기서 입니다.
희소 확률 — K×Ls 코딩 설계 행렬의 각 요소에 확률 0.25로 1 또는 –1을 할당하고 확률 0.5로 0을 할당합니다. 여기서 입니다.
열이 1과 -1을 각각 하나 이상 포함하지 않을 경우, 소프트웨어는 해당 열을 제거합니다.
서로 다른 열 u와 v에 대해 u = v 또는 u = -v이면 소프트웨어는 코딩 설계 행렬에서 v를 제거합니다.
기본적으로 10,000개의 행렬을 임의로 생성한 다음, 아래의 해밍 측정법([3])에 기반하여 가장 큰 최소 쌍별 행 거리를 가지는 행렬을 유지합니다.
여기서 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.
확장 기능
tall형 배열
메모리에 담을 수 없을 정도로 많은 행을 가진 배열을 계산할 수 있습니다.
사용법 관련 참고 및 제한 사항:
지원되는 구문은 다음과 같습니다.
Mdl = fitcecoc(X,Y)
Mdl = fitcecoc(X,Y,Name,Value)
[Mdl,FitInfo,HyperparameterOptimizationResults] = fitcecoc(X,Y,Name,Value)
—fitcecoc
는'OptimizeHyperparameters'
이름-값 쌍의 인수를 지정할 경우 출력 인수FitInfo
와HyperparameterOptimizationResults
도 추가로 반환합니다.
FitInfo
출력 인수는 향후 사용을 위해 현재 예약되어 있는 빈 구조체형 배열입니다.교차 검증과 관련된 옵션은 지원되지 않습니다. 지원되는 이름-값 쌍의 인수는 다음과 같습니다.
'ClassNames'
'Cost'
'Coding'
— 디폴트 값은'onevsall'
입니다.'HyperparameterOptimizationOptions'
— 교차 검증의 경우 tall형에 대한 최적화에는'Holdout'
검증만 지원됩니다. 기본적으로 소프트웨어는 데이터의 20%를 선택하여 홀드아웃 검증 데이터로 남겨두고 나머지 데이터를 사용하여 모델을 훈련시킵니다. 이 인수를 사용하여 홀드아웃 비율에 다른 값을 지정할 수 있습니다. 예를 들어, 데이터의 30%를 검증 데이터로 남겨두려면'HyperparameterOptimizationOptions',struct('Holdout',0.3)
을 지정하십시오.'Learners'
— 디폴트 값은'linear'
입니다.'linear'
,'kernel'
,templateLinear
또는templateKernel
객체나 이러한 객체로 구성된 셀형 배열을 지정할 수 있습니다.'OptimizeHyperparameters'
— 선형 이진 학습기를 사용할 경우'Regularization'
하이퍼파라미터의 값은'ridge'
여야 합니다.'Prior'
'Verbose'
— 디폴트 값은1
입니다.'Weights'
다음의 추가적인 이름-값 쌍의 인수는 tall형 배열에만 사용할 수 있습니다.
'NumConcurrent'
— 파일 I/O 작업을 결합하여 동시에 훈련시키는 이진 학습기 개수를 지정하는 양의 정수 스칼라입니다.'NumConcurrent'
의 디폴트 값은1
이며, 이 경우fitcecoc
는 이진 분류기를 순차적으로 훈련시킵니다. 입력 배열을 분산 군집 메모리에 담을 수 없는 경우'NumConcurrent'
가 가장 유용합니다. 그렇지 않으면 입력 배열이 캐시될 수도 있으며 속도 향상은 거의 이뤄지지 않습니다.Apache® Spark™에서 코드를 실행하면 통신에 사용 가능한 메모리에 따라
NumConcurrent
의 상한 값이 제한됩니다. Apache Spark 구성에서'spark.executor.memory'
및'spark.driver.memory'
속성을 확인하십시오. 자세한 내용은parallel.cluster.Hadoop
(Parallel Computing Toolbox) 항목을 참조하십시오. Apache Spark 및 코드가 실행되는 위치를 제어하는 기타 실행 환경에 대한 자세한 내용은 Extend Tall Arrays with Other Products 항목을 참조하십시오.
자세한 내용은 tall형 배열 항목을 참조하십시오.
자동 병렬 지원
Parallel Computing Toolbox™를 사용해 자동 병렬 계산을 실행하여 코드 실행 속도를 높일 수 있습니다.
병렬로 실행하려면 다음 방법 중 하나로 'UseParallel'
옵션을 true
로 설정해야 합니다.
statset
을 사용하여 options 구조체의'UseParallel'
필드를true
로 설정하고fitceoc
에 대한 호출에'Options'
이름-값 쌍의 인수를 지정합니다.예:
'Options',statset('UseParallel',true)
자세한 내용은
'Options'
이름-값 쌍의 인수를 참조하십시오.병렬 하이퍼파라미터 최적화를 수행하려면
fitceoc
에 대한 호출에'HyperparameterOptions',struct('UseParallel',true)
이름-값 쌍의 인수를 사용하십시오.병렬 하이퍼파라미터 최적화에 대한 자세한 내용은 Parallel Bayesian Optimization 항목을 참조하십시오.
GPU 배열
Parallel Computing Toolbox™를 사용해 GPU(그래픽스 처리 장치)에서 실행하여 코드 실행 속도를 높일 수 있습니다.
사용법 관련 참고 및 제한 사항:
이름-값 인수
'Learners'
는 이 표에 지정된 학습기 중 하나로만 지정할 수 있습니다.학습기 학습기 이름 템플릿 객체 생성 함수 gpuArray
지원에 대한 정보서포트 벡터 머신 'svm'
templateSVM
fitcsvm
에 대한 GPU 배열k-최근접이웃 'knn'
templateKNN
fitcknn
에 대한 GPU 배열분류 트리 'tree'
templateTree
fitctree
에 대한 GPU 배열
자세한 내용은 GPU에서 MATLAB 함수 실행하기 (Parallel Computing Toolbox) 항목을 참조하십시오.
버전 내역
R2014b에 개발됨R2024a: 앙상블 이진 학습기의 하이퍼파라미터 최적화
fitcecoc
는 앙상블 이진 학습기를 사용할 경우 하이퍼파라미터 최적화를 지원합니다. Learners
값이 "ensemble"
이거나 templateEnsemble
함수를 사용하여 만든 앙상블 템플릿인 경우 OptimizeHyperparameters
이름-값 인수를 지정할 수 있습니다.
앙상블 이진 학습기를 사용하여 하이퍼파라미터 최적화를 수행할 경우 앙상블 방법은
"AdaBoostM1"
,"GentleBoost"
,"LogitBoost"
중 하나이고, 약한 앙상블 학습기는 트리여야 합니다."ensemble"
값은 적응형 로지스틱 회귀 집계 방법(LogitBoost
), 100개의 학습 사이클, 약한 트리 학습기를 사용하는 앙상블을 의미합니다.
fitcecoc
는 앙상블 이진 학습기로 베이즈 최적화를 수행할 경우 MaxObjectiveEvaluations
에 대해 디폴트 값 70을 사용합니다. 자세한 내용은 HyperparameterOptimizationOptions
항목을 참조하십시오.
hyperparameters
함수를 사용하여 앙상블 이진 학습기에 적합한 하이퍼파라미터와 디폴트 하이퍼파라미터를 확인할 수 있습니다. 또한 이 함수를 사용하여 하이퍼파라미터와 그 범위를 조정할 수 있습니다. 피팅 함수 이름으로 "fitcecoc"
를 지정하고 학습기 유형으로 "ensemble"
또는 앙상블 템플릿을 지정하십시오.
R2023b: 이진 학습기가 커널 분류기, k-최근접이웃(KNN) 분류기 또는 서포트 벡터 머신(SVM) 분류기인 경우 OptimizeHyperparameters
의 "auto"
옵션에 Standardize
가 포함됨
R2023b부터, Learners
값을 "kernel"
, "knn"
또는 "svm"
으로 지정하고 OptimizeHyperparameters
값을 "auto"
로 지정하면 fitcecoc
함수는 Standardize
를 최적화 가능한 하이퍼파라미터로 포함합니다.
R2022a: 정규화 방법에 따라 하이퍼파라미터 최적화 중에 사용되는 선형 학습기 솔버가 결정됨
R2022a 릴리스부터는 ECOC 모델에 대한 하이퍼파라미터 최적화에 선형 이진 학습기('linear'
또는 templateLinear
)를 사용하도록 지정하면서 특정 솔버를 사용하도록 지정하지 않으면 하이퍼파라미터 최적화가 반복될 때마다 선택된 정규화 유형에 따라 fitcecoc
함수가 LBFGS(Limited-memory BFGS) 솔버를 사용하거나 SpaRSA(Sparse Reconstruction by Separable Approximation) 솔버를 사용합니다.
Regularization
이'ridge'
이면 함수는 기본적으로Solver
값을'lbfgs'
로 설정합니다.Regularization
이'lasso'
이면 함수는 기본적으로Solver
값을'sparsa'
로 설정합니다.
이전 릴리스에서 하이퍼파라미터 최적화 중의 디폴트 솔버 선택은 정규화 유형, 학습기 유형 및 예측 변수 개수 등 여러 요인에 따라 달라졌습니다. 자세한 내용은 Solver
항목을 참조하십시오.
MATLAB 명령
다음 MATLAB 명령에 해당하는 링크를 클릭했습니다.
명령을 실행하려면 MATLAB 명령 창에 입력하십시오. 웹 브라우저는 MATLAB 명령을 지원하지 않습니다.
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)