Main Content

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

fitcsvm

단일 클래스 및 이진 분류를 위한 서포트 벡터 머신(SVM) 분류기 훈련

설명

fitcsvm은 저차원이나 중간 차원의 예측 변수 데이터 세트에 대한 단일 클래스 및 2-클래스(이진) 분류에 대해 서포트 벡터 머신(SVM) 모델을 훈련시키거나 교차 검증합니다. fitcsvm은 커널 함수를 사용하여 예측 변수 데이터를 매핑하는 것을 지원하고, 순차적 최소규모 최적화(SMO), 반복 단일 데이터 알고리즘(ISDA)도 지원하며, 목적 함수 최소화를 위한 2차 계획법을 사용하는 L1 소프트 마진(Soft Margin) 최소화를 지원합니다.

고차원 데이터 세트, 즉 많은 예측 변수를 포함하는 데이터 세트에 대한 이진 분류를 수행할 선형 SVM 모델을 훈련시키려면 fitclinear를 대신 사용하십시오.

이진 SVM 모델을 결합하는 다중클래스 학습에 대해서는 오류 수정 출력 코드(ECOC)를 사용하십시오. 자세한 내용은 fitcecoc를 참조하십시오.

SVM 회귀 모델을 훈련시키려면 저차원 및 중간 차원의 예측 변수 데이터 세트의 경우 fitrsvm을 참조하고 고차원 데이터 세트의 경우 fitrlinear를 참조하십시오.

Mdl = fitcsvm(Tbl,ResponseVarName)은 테이블 Tbl에 포함된 표본 데이터를 사용하여 훈련된 서포트 벡터 머신(SVM) 분류기 Mdl을 반환합니다. ResponseVarNameTbl에서 단일 클래스 또는 2-클래스 분류에 대한 클래스 레이블을 포함하는 변수의 이름입니다.

클래스 레이블 변수에 클래스가 한 개만 포함된 경우(예: 1로 구성된 벡터) fitcsvm은 단일 클래스 분류에 대해 모델을 훈련시킵니다. 그렇지 않은 경우, 함수는 2-클래스 분류에 대해 모델을 훈련시킵니다.

Mdl = fitcsvm(Tbl,formula)는 테이블 Tbl에 포함된 표본 데이터를 사용하여 훈련된 SVM 분류기를 반환합니다. formulaMdl을 피팅하는 데 사용되는 Tbl의 응답 변수와 예측 변수의 부분 집합에 대한 설명 모델입니다.

Mdl = fitcsvm(Tbl,Y)는 테이블 Tbl에 포함된 예측 변수와 벡터 Y의 클래스 레이블을 사용하여 훈련된 SVM 분류기를 반환합니다.

예제

Mdl = fitcsvm(X,Y)는 단일 클래스 분류 또는 2-클래스 분류에 대해 행렬 X에 포함된 예측 변수와 벡터 Y의 클래스 레이블을 사용하여 훈련된 SVM 분류기를 반환합니다.

예제

Mdl = fitcsvm(___,Name,Value)는 위에 열거된 구문에 나와 있는 입력 인수와 함께 하나 이상의 이름-값 쌍의 인수를 사용하여 옵션을 지정합니다. 예를 들어, 교차 검증 유형, 오분류 비용 그리고 점수 변환 함수 유형을 지정할 수 있습니다.

예제

모두 축소

피셔(Fisher)의 붓꽃 데이터 세트를 불러옵니다. 꽃받침 길이와 너비, 그리고 관측된 모든 부채붓꽃(Setosa Iris)을 제거합니다.

load fisheriris
inds = ~strcmp(species,'setosa');
X = meas(inds,3:4);
y = species(inds);

처리된 데이터 세트를 사용하여 SVM 분류기를 훈련시킵니다.

SVMModel = fitcsvm(X,y)
SVMModel = 
  ClassificationSVM
             ResponseName: 'Y'
    CategoricalPredictors: []
               ClassNames: {'versicolor'  'virginica'}
           ScoreTransform: 'none'
          NumObservations: 100
                    Alpha: [24x1 double]
                     Bias: -14.4149
         KernelParameters: [1x1 struct]
           BoxConstraints: [100x1 double]
          ConvergenceInfo: [1x1 struct]
          IsSupportVector: [100x1 logical]
                   Solver: 'SMO'


SVMModel은 훈련된 ClassificationSVM 분류기입니다. SVMModel의 속성을 표시합니다. 예를 들어, 클래스 순서를 확인하려면 점 표기법을 사용하십시오.

classOrder = SVMModel.ClassNames
classOrder = 2x1 cell
    {'versicolor'}
    {'virginica' }

첫 번째 클래스('versicolor')는 음성 클래스이고, 두 번째 클래스('virginica')는 양성 클래스입니다. 'ClassNames' 이름-값 쌍의 인수를 사용하여 훈련 중에 클래스 순서를 변경할 수 있습니다.

데이터의 산점도 도식을 플로팅하고 서포트 벡터를 원으로 표시합니다.

sv = SVMModel.SupportVectors;
figure
gscatter(X(:,1),X(:,2),y)
hold on
plot(sv(:,1),sv(:,2),'ko','MarkerSize',10)
legend('versicolor','virginica','Support Vector')
hold off

Figure contains an axes object. The axes object contains 3 objects of type line. One or more of the lines displays its values using only markers These objects represent versicolor, virginica, Support Vector.

서포트 벡터는 추정된 클래스 경계 또는 그 너머에 있는 관측값입니다.

'BoxConstraint' 이름-값 쌍의 인수를 사용하여 훈련 중에 상자 제약 조건을 설정하여 경계(즉, 서포트 벡터 개수)를 조정할 수 있습니다.

이 예제에서는 2개의 예측 변수가 있는 2-클래스(이진) SVM 분류기의 결정 경계와 마진 선을 플로팅하는 방법을 보여줍니다.

피셔(Fisher)의 붓꽃 데이터 세트를 불러옵니다. 모든 versicolor 붓꽃 종을 제외시키고(setosa 종과 virginica 종만 남김), 꽃받침 길이와 너비 측정값만 남깁니다.

load fisheriris;
inds = ~strcmp(species,'versicolor');
X = meas(inds,1:2);
s = species(inds);

선형 커널 SVM 분류기를 훈련시킵니다.

SVMModel = fitcsvm(X,s);

SVMModel은 훈련된 ClassificationSVM 분류기이며, 그 속성에는 서포트 벡터, 선형 예측 변수 계수, 편향 항이 포함됩니다.

sv = SVMModel.SupportVectors; % Support vectors
beta = SVMModel.Beta; % Linear predictor coefficients
b = SVMModel.Bias; % Bias term

데이터의 산점도 도식을 플로팅하고, 서포트 벡터를 원으로 표시합니다. 서포트 벡터는 추정된 클래스 경계 또는 그 너머에 있는 관측값입니다.

hold on
gscatter(X(:,1),X(:,2),s)
plot(sv(:,1),sv(:,2),'ko','MarkerSize',10)

SVMModel 분류기의 최적의 분리 초평면은 β1X1+β2X2+b=0으로 지정된 직선입니다. 두 종 사이의 결정 경계를 실선으로 플로팅합니다.

X1 = linspace(min(X(:,1)),max(X(:,1)),100);
X2 = -(beta(1)/beta(2)*X1)-b/beta(2);
plot(X1,X2,'-')

선형 예측 변수 계수 β는 결정 경계에 직교하는 벡터를 정의합니다. 최대 마진 너비는 2||β-1입니다(자세한 내용은 이진 분류를 위한 서포트 벡터 머신 항목 참조). 최대 마진 경계를 파선으로 플로팅합니다. 좌표축에 레이블을 지정하고 범례를 추가합니다.

m = 1/sqrt(beta(1)^2 + beta(2)^2);  % Margin half-width
X1margin_low = X1+beta(1)*m^2;
X2margin_low = X2+beta(2)*m^2;
X1margin_high = X1-beta(1)*m^2;
X2margin_high = X2-beta(2)*m^2;
plot(X1margin_high,X2margin_high,'b--')
plot(X1margin_low,X2margin_low,'r--')
xlabel('X_1 (Sepal Length in cm)')
ylabel('X_2 (Sepal Width in cm)')
legend('setosa','virginica','Support Vector', ...
    'Boundary Line','Upper Margin','Lower Margin')
hold off

Figure contains an axes object. The axes object with xlabel X_1 (Sepal blank Length blank in blank cm), ylabel X_2 (Sepal blank Width blank in blank cm) contains 6 objects of type line. One or more of the lines displays its values using only markers These objects represent setosa, virginica, Support Vector, Boundary Line, Upper Margin, Lower Margin.

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

load ionosphere
rng(1); % For reproducibility

방사 기저 커널을 사용하여 SVM 분류기를 훈련시킵니다. 소프트웨어가 커널 함수의 스케일 값을 구하도록 합니다. 예측 변수를 표준화합니다.

SVMModel = fitcsvm(X,Y,'Standardize',true,'KernelFunction','RBF',...
    'KernelScale','auto');

SVMModel은 훈련된 ClassificationSVM 분류기입니다.

SVM 분류기를 교차 검증합니다. 기본적으로, 소프트웨어는 10겹 교차 검증을 사용합니다.

CVSVMModel = crossval(SVMModel);

CVSVMModelClassificationPartitionedModel 교차 검증된 분류기입니다.

표본외 오분류율을 추정합니다.

classLoss = kfoldLoss(CVSVMModel)
classLoss = 0.0484

일반화율은 약 5%입니다.

모든 붓꽃을 동일한 클래스에 할당하여 피셔(Fisher)의 붓꽃 데이터 세트를 수정합니다. 수정된 데이터 세트에서 이상값을 감지하고 관측값 중 이상값 비율이 예상대로인지 확인합니다.

피셔(Fisher)의 붓꽃 데이터 세트를 불러옵니다. 꽃잎 길이와 너비를 제거합니다. 모든 붓꽃을 같은 클래스에서 온 것으로 처리합니다.

load fisheriris
X = meas(:,1:2);
y = ones(size(X,1),1);

수정된 데이터 세트를 사용하여 SVM 분류기를 훈련시킵니다. 관측값의 5%가 이상값이라고 가정합니다. 예측 변수를 표준화합니다.

rng(1);
SVMModel = fitcsvm(X,y,'KernelScale','auto','Standardize',true,...
    'OutlierFraction',0.05);

SVMModel은 훈련된 ClassificationSVM 분류기입니다. 기본적으로, 소프트웨어는 단일 클래스 학습에 가우스 커널을 사용합니다.

관측값과 결정 경계를 플로팅합니다. 서포트 벡터와 잠재적인 이상값에 플래그를 지정합니다.

svInd = SVMModel.IsSupportVector;
h = 0.02; % Mesh grid step size
[X1,X2] = meshgrid(min(X(:,1)):h:max(X(:,1)),...
    min(X(:,2)):h:max(X(:,2)));
[~,score] = predict(SVMModel,[X1(:),X2(:)]);
scoreGrid = reshape(score,size(X1,1),size(X2,2));

figure
plot(X(:,1),X(:,2),'k.')
hold on
plot(X(svInd,1),X(svInd,2),'ro','MarkerSize',10)
contour(X1,X2,scoreGrid)
colorbar;
title('{\bf Iris Outlier Detection via One-Class SVM}')
xlabel('Sepal Length (cm)')
ylabel('Sepal Width (cm)')
legend('Observation','Support Vector')
hold off

Figure contains an axes object. The axes object with title blank Iris blank Outlier blank Detection blank via blank One-Class blank SVM, xlabel Sepal Length (cm), ylabel Sepal Width (cm) contains 3 objects of type line, contour. One or more of the lines displays its values using only markers These objects represent Observation, Support Vector.

이상값을 나머지 데이터와 분리하는 경계는 등고선 값이 0인 위치에서 나타납니다.

교차 검증된 데이터에서 음의 점수를 갖는 관측값의 비율이 5%에 가까운지 확인합니다.

CVSVMModel = crossval(SVMModel);
[~,scorePred] = kfoldPredict(CVSVMModel);
outlierRate = mean(scorePred<0)
outlierRate = 0.0467

fisheriris 데이터 세트에 대한 산점도 플롯을 생성합니다. 플롯 내 그리드 좌표를 데이터 세트 분포의 새 관측값으로 처리하고 데이터 세트의 좌표 값을 세 클래스 중 하나에 할당하여 클래스 경계를 찾습니다.

피셔(Fisher)의 붓꽃 데이터 세트를 불러옵니다. 꽃잎 길이와 너비를 예측 변수로 사용합니다.

load fisheriris
X = meas(:,3:4);
Y = species;

데이터에 대한 산점도 플롯을 검토합니다.

figure
gscatter(X(:,1),X(:,2),Y);
h = gca;
lims = [h.XLim h.YLim]; % Extract the x and y axis limits
title('{\bf Scatter Diagram of Iris Measurements}');
xlabel('Petal Length (cm)');
ylabel('Petal Width (cm)');
legend('Location','Northwest');

Figure contains an axes object. The axes object with title blank Scatter blank Diagram blank of blank Iris blank Measurements, xlabel Petal Length (cm), ylabel Petal Width (cm) contains 3 objects of type line. One or more of the lines displays its values using only markers These objects represent setosa, versicolor, virginica.

데이터에는 세 개의 클래스가 있는데, 이 중 한 클래스는 나머지 두 클래스로부터 선형 분리될 수 있습니다.

각 클래스에 대해 다음 작업을 수행합니다.

  1. 관측값이 그 클래스의 멤버인지 여부를 나타내는 논리형 벡터(indx)를 생성합니다.

  2. 예측 변수 데이터와 indx를 사용하여 SVM 분류기를 훈련시킵니다.

  3. 셀형 배열의 셀로 분류기를 저장합니다.

클래스 순서를 정의합니다.

SVMModels = cell(3,1);
classes = unique(Y);
rng(1); % For reproducibility

for j = 1:numel(classes)
    indx = strcmp(Y,classes(j)); % Create binary classes for each classifier
    SVMModels{j} = fitcsvm(X,indx,'ClassNames',[false true],'Standardize',true,...
        'KernelFunction','rbf','BoxConstraint',1);
end

SVMModels는 각 셀이 ClassificationSVM 분류기를 포함하는 3×1 셀형 배열입니다. 각 셀에 대해 양성 클래스는 각각 setosa, versicolor, virginica입니다.

플롯 내에 조밀한 그리드를 정의하고, 좌표를 훈련 데이터의 분포에서 새 관측값으로 처리합니다. 각 분류기를 사용하여 새 관측값의 점수를 추정합니다.

d = 0.02;
[x1Grid,x2Grid] = meshgrid(min(X(:,1)):d:max(X(:,1)),...
    min(X(:,2)):d:max(X(:,2)));
xGrid = [x1Grid(:),x2Grid(:)];
N = size(xGrid,1);
Scores = zeros(N,numel(classes));

for j = 1:numel(classes)
    [~,score] = predict(SVMModels{j},xGrid);
    Scores(:,j) = score(:,2); % Second column contains positive-class scores
end

Scores의 각 행에는 3개의 점수가 있습니다. 최대 점수를 갖는 요소의 인덱스는 새 클래스 관측값이 속할 가능성이 가장 높은 클래스의 인덱스입니다.

각각의 새 관측값을 최대 점수를 내는 분류기와 연결합니다.

[~,maxScore] = max(Scores,[],2);

대응되는 새 관측값이 속하는 클래스를 기준으로 플롯의 영역을 색으로 구분합니다.

figure
h(1:3) = gscatter(xGrid(:,1),xGrid(:,2),maxScore,...
    [0.1 0.5 0.5; 0.5 0.1 0.5; 0.5 0.5 0.1]);
hold on
h(4:6) = gscatter(X(:,1),X(:,2),Y);
title('{\bf Iris Classification Regions}');
xlabel('Petal Length (cm)');
ylabel('Petal Width (cm)');
legend(h,{'setosa region','versicolor region','virginica region',...
    'observed setosa','observed versicolor','observed virginica'},...
    'Location','Northwest');
axis tight
hold off

Figure contains an axes object. The axes object with title blank Iris blank Classification blank Regions, xlabel Petal Length (cm), ylabel Petal Width (cm) contains 6 objects of type line. One or more of the lines displays its values using only markers These objects represent setosa region, versicolor region, virginica region, observed setosa, observed versicolor, observed virginica.

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

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

load ionosphere

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

rng default
Mdl = fitcsvm(X,Y,'OptimizeHyperparameters','auto', ...
    'HyperparameterOptimizationOptions',struct('AcquisitionFunctionName', ...
    'expected-improvement-plus'))
|====================================================================================================================|
| Iter | Eval   | Objective   | Objective   | BestSoFar   | BestSoFar   | BoxConstraint|  KernelScale |  Standardize |
|      | result |             | runtime     | (observed)  | (estim.)    |              |              |              |
|====================================================================================================================|
|    1 | Best   |     0.35897 |      1.3255 |     0.35897 |     0.35897 |       3.8653 |       961.53 |         true |
|    2 | Best   |     0.12821 |      10.645 |     0.12821 |     0.15646 |       429.99 |       0.2378 |        false |
|    3 | Accept |     0.35897 |      0.1418 |     0.12821 |      0.1315 |      0.11801 |       8.9479 |        false |
|    4 | Accept |      0.1339 |      5.4158 |     0.12821 |     0.12965 |    0.0010694 |    0.0032063 |         true |
|    5 | Accept |     0.15954 |      12.603 |     0.12821 |     0.12824 |       973.65 |      0.15179 |        false |
|    6 | Accept |     0.13675 |     0.25161 |     0.12821 |      0.1283 |       234.28 |       2.8822 |        false |
|    7 | Accept |     0.35897 |     0.10278 |     0.12821 |     0.12826 |     0.005253 |       835.53 |         true |
|    8 | Accept |     0.14245 |      12.308 |     0.12821 |     0.12829 |       91.176 |     0.042696 |        false |
|    9 | Accept |       0.151 |       11.82 |     0.12821 |     0.12831 |    0.0064316 |    0.0010249 |         true |
|   10 | Accept |      0.1339 |      6.6402 |     0.12821 |     0.12835 |       153.27 |      0.38874 |        false |
|   11 | Accept |     0.26781 |      12.453 |     0.12821 |     0.12948 |       260.21 |     0.001097 |        false |
|   12 | Accept |     0.12821 |     0.18018 |     0.12821 |     0.12935 |    0.0034086 |     0.029311 |         true |
|   13 | Best   |     0.11966 |     0.10792 |     0.11966 |     0.12144 |    0.0010229 |     0.032368 |         true |
|   14 | Accept |     0.35897 |     0.16151 |     0.11966 |     0.12177 |       987.92 |       683.08 |        false |
|   15 | Accept |     0.12821 |     0.28945 |     0.11966 |     0.11979 |    0.0010124 |      0.28112 |         true |
|   16 | Accept |     0.22792 |      12.561 |     0.11966 |     0.11995 |       6.9606 |     0.001715 |         true |
|   17 | Accept |     0.11966 |    0.094113 |     0.11966 |     0.11979 |    0.0010509 |     0.078769 |         true |
|   18 | Accept |     0.12251 |     0.11013 |     0.11966 |     0.12049 |    0.0010131 |     0.054019 |         true |
|   19 | Accept |      0.1339 |      6.2799 |     0.11966 |     0.12071 |      0.08684 |     0.018067 |         true |
|   20 | Accept |     0.11966 |     0.13304 |     0.11966 |     0.12123 |     0.048335 |      0.21846 |         true |
|====================================================================================================================|
| Iter | Eval   | Objective   | Objective   | BestSoFar   | BestSoFar   | BoxConstraint|  KernelScale |  Standardize |
|      | result |             | runtime     | (observed)  | (estim.)    |              |              |              |
|====================================================================================================================|
|   21 | Accept |     0.11966 |     0.10786 |     0.11966 |     0.12119 |     0.013573 |      0.11789 |         true |
|   22 | Accept |      0.1339 |     0.62175 |     0.11966 |     0.12123 |       1.2995 |      0.26436 |         true |
|   23 | Accept |      0.1396 |      10.732 |     0.11966 |     0.12127 |    0.0019603 |    0.0010023 |        false |
|   24 | Accept |     0.13675 |      8.3477 |     0.11966 |     0.12136 |      0.17347 |     0.010479 |        false |
|   25 | Accept |     0.14245 |     0.20486 |     0.11966 |     0.11914 |    0.0010001 |    0.0076351 |        false |
|   26 | Accept |     0.12536 |     0.22236 |     0.11966 |     0.12144 |     0.035903 |      0.11247 |         true |
|   27 | Accept |      0.1339 |      4.0171 |     0.11966 |     0.12144 |       897.97 |        1.361 |        false |
|   28 | Accept |      0.1339 |      6.2467 |     0.11966 |     0.12146 |       6.6245 |     0.085879 |        false |
|   29 | Accept |     0.12251 |     0.15966 |     0.11966 |      0.1214 |    0.0069215 |      0.12029 |         true |
|   30 | Accept |     0.12251 |     0.10721 |     0.11966 |     0.12136 |     0.049433 |      0.43143 |         true |

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

Best observed feasible point:
    BoxConstraint    KernelScale    Standardize
    _____________    ___________    ___________

      0.0010229       0.032368         true    

Observed objective function value = 0.11966
Estimated objective function value = 0.12229
Function evaluation time = 0.10792

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

      0.013573         0.11789         true    

Estimated objective function value = 0.12136
Estimated function evaluation time = 0.14066

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 = 
  ClassificationSVM
                         ResponseName: 'Y'
                CategoricalPredictors: []
                           ClassNames: {'b'  'g'}
                       ScoreTransform: 'none'
                      NumObservations: 351
    HyperparameterOptimizationResults: [1x1 BayesianOptimization]
                                Alpha: [90x1 double]
                                 Bias: -0.1318
                     KernelParameters: [1x1 struct]
                                   Mu: [0.8917 0 0.6413 0.0444 0.6011 0.1159 0.5501 0.1194 0.5118 0.1813 0.4762 0.1550 0.4008 0.0934 0.3442 0.0711 0.3819 -0.0036 0.3594 -0.0240 0.3367 0.0083 0.3625 -0.0574 0.3961 -0.0712 0.5416 -0.0695 ... ] (1x34 double)
                                Sigma: [0.3112 0 0.4977 0.4414 0.5199 0.4608 0.4927 0.5207 0.5071 0.4839 0.5635 0.4948 0.6222 0.4949 0.6528 0.4584 0.6180 0.4968 0.6263 0.5191 0.6098 0.5182 0.6038 0.5275 0.5785 0.5085 0.5162 0.5500 ... ] (1x34 double)
                       BoxConstraints: [351x1 double]
                      ConvergenceInfo: [1x1 struct]
                      IsSupportVector: [351x1 logical]
                               Solver: 'SMO'


입력 인수

모두 축소

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

선택적으로, Tbl은 응답 변수에 대한 하나의 열과 관측값 가중치에 대한 하나의 열을 포함할 수 있습니다.

  • 응답 변수는 categorical형 배열, 문자형 배열, string형 배열, 논리형 벡터 또는 숫자형 벡터, 문자형 벡터로 구성된 셀형 배열이어야 합니다.

    • fitcsvm 함수는 단일 클래스 및 2-클래스(이진) 분류만 지원합니다. 응답 변수가 최대 두 개의 서로 다른 클래스를 포함해야 하거나, ClassNames 이름-값 인수를 사용하여 훈련에 사용할 하나 또는 두 개의 클래스를 지정해야 합니다. 다중클래스 학습에 대해서는 fitcecoc를 참조하십시오.

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

  • 가중치에 대한 열은 숫자형 벡터여야 합니다.

  • ResponseVarName 또는 formula를 사용하여 Tbl의 응답 변수를 지정하고 Weights를 사용하여 Tbl의 관측값 가중치를 지정해야 합니다.

    • ResponseVarName을 사용하여 응답 변수 지정 — fitcsvm 함수는 나머지 변수를 예측 변수로 사용합니다. Tbl의 나머지 변수 중 일부를 예측 변수로 사용하려면 PredictorNames를 사용하여 예측 변수를 지정하십시오.

    • formula를 사용하여 모델 사양 정의 — fitcsvm 함수는 formula에 지정된 대로 Tbl의 변수 중 일부를 예측 변수 및 응답 변수로 사용합니다.

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

데이터형: 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

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

  • fitcsvm 함수는 단일 클래스 및 2-클래스(이진) 분류만 지원합니다. Y가 최대 두 개의 서로 다른 클래스를 포함해야 하거나, ClassNames 이름-값 인수를 사용하여 훈련에 사용할 하나 또는 두 개의 클래스를 지정해야 합니다. 다중클래스 학습에 대해서는 fitcecoc를 참조하십시오.

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

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

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

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

SVM 분류기가 훈련되는 예측 변수 데이터로, 숫자형 값으로 구성된 행렬로 지정됩니다.

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

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

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

데이터형: double | single

이름-값 인수

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

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

예: fitcsvm(X,Y,'KFold',10,'Cost',[0 2;1 0],'ScoreTransform','sign')은 10겹 교차 검증을 수행하고, 거짓 음성에 비해 거짓 양성에 대한 벌점을 두 배로 적용하고, 부호 함수를 사용하여 점수를 변환합니다.

SVM 옵션

모두 축소

상자 제약 조건으로, 'BoxConstraint'와 함께 양의 스칼라가 쉼표로 구분되어 지정됩니다.

단일 클래스 학습의 경우, 상자 제약 조건은 항상 1로 설정됩니다.

BoxConstraint, Cost, Prior, Standardize, Weights의 관계와 알고리즘 동작에 대한 자세한 내용은 알고리즘 항목을 참조하십시오.

예: 'BoxConstraint',100

데이터형: double | single

그람 행렬의 요소를 계산하는 데 사용되는 커널 함수로, 'KernelFunction'과 함께 커널 함수 이름이 쉼표로 구분되어 지정됩니다. G(xj,xk)가 그람 행렬의 요소(j,k)라고 가정합니다. 여기서 xj와 xkX의 관측값 j와 k를 나타내는 p차원 벡터입니다. 다음 표에는 지원되는 커널 함수 이름과 해당 함수 형식이 나와 있습니다.

커널 함수 이름설명공식
'gaussian' 또는 'rbf'가우스 커널 또는 방사 기저 함수(RBF) 커널로, 단일 클래스 학습에 대한 디폴트 값임

G(xj,xk)=exp(xjxk2)

'linear'선형 커널로, 2-클래스 학습에 대한 디폴트 값임

G(xj,xk)=xjxk

'polynomial'다항식 커널. 'PolynomialOrder',q를 사용하여 차수가 q인 다항식 커널을 지정합니다.

G(xj,xk)=(1+xjxk)q

'KernelFunction','kernel'을 설정하여 자신만의 고유한 커널 함수(예: kernel)를 설정할 수 있습니다. kernel의 형식은 다음과 같아야 합니다.

function G = kernel(U,V)
여기서

  • U는 m×p 행렬입니다. 열은 예측 변수에 대응되고 행은 관측값에 대응됩니다.

  • V는 n×p 행렬입니다. 열은 예측 변수에 대응되고 행은 관측값에 대응됩니다.

  • GUV의 행으로 구성된 m×n 그람 행렬입니다.

kernel.m은 MATLAB 경로에 있어야 합니다.

커널 함수에 일반적인 이름을 사용하지 않는 것이 좋습니다. 예를 들어, 시그모이드 커널 함수는 'sigmoid' 대신 'mysigmoid'로 명명하십시오.

예: 'KernelFunction','gaussian'

데이터형: char | string

커널 스케일 모수로, 'KernelScale'과 함께 'auto' 또는 양의 스칼라가 쉼표로 구분되어 지정됩니다. 소프트웨어는 예측 변수 행렬 X의 모든 요소를 KernelScale의 값으로 나눕니다. 그런 다음, 적합한 커널 노름(Norm)을 적용하여 그람 행렬을 계산합니다.

  • 'auto'를 지정하면 소프트웨어가 발견적 절차(heuristic procedure)를 사용하여 적합한 스케일링 인자를 선택합니다. 이 발견적 절차는 부표본추출을 사용하므로, 추정값이 호출마다 다를 수 있습니다. 따라서 동일한 결과를 재현하기 위해 분류기를 훈련시키기 전에 rng를 사용하여 난수 시드값을 설정합니다.

  • KernelScale과 자신만의 고유한 커널 함수(예: 'KernelFunction','kernel')를 지정하는 경우, 오류가 발생합니다. kernel 내에서 스케일링을 적용해야 합니다.

예: 'KernelScale','auto'

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

다항식 커널 함수 차수로, 'PolynomialOrder'와 함께 양의 정수가 쉼표로 구분되어 지정됩니다.

'PolynomialOrder'를 설정했는데 KernelFunction'polynomial'이 아닌 경우, 오류가 발생합니다.

예: 'PolynomialOrder',2

데이터형: double | single

커널 오프셋 파라미터로, 'KernelOffset'과 함께 음이 아닌 스칼라가 쉼표로 구분되어 지정됩니다.

KernelOffset이 그람 행렬의 각 요소에 추가됩니다.

디폴트 값은 다음과 같습니다.

  • 솔버가 SMO인 경우(즉, 'Solver','SMO'를 설정하는 경우) 0

  • 솔버가 ISDA인 경우(즉, 'Solver','ISDA'를 설정하는 경우) 0.1

예: 'KernelOffset',0

데이터형: double | single

예측 변수 데이터를 표준화하는 플래그로, 'Standardize'와 함께 true(1) 또는 false(0)이 쉼표로 구분되어 지정됩니다.

'Standardize',true를 설정할 경우 다음이 수행됩니다.

  • 각 예측 변수(X 또는 Tbl)는 대응되는 가중 열 평균과 표준편차를 기준으로 정규화됩니다. 가중 표준화에 대한 자세한 내용은 알고리즘 항목을 참조하십시오. MATLAB은 범주형 예측 변수에 대해 생성된 가변수 열에 포함된 데이터를 표준화하지 않습니다.

  • 소프트웨어는 표준화된 예측 변수를 사용하여 분류기를 훈련시키지만, 표준화되지 않은 예측 변수를 분류기 속성 X에 행렬 또는 테이블로 저장합니다.

예: 'Standardize',true

데이터형: logical

최적화 루틴으로, 'Solver'와 함께 다음 표에 나와 있는 값이 쉼표로 구분되어 지정됩니다.

설명
'ISDA'반복 단일 데이터 알고리즘([30] 항목 참조)
'L1QP'quadprog (Optimization Toolbox)를 사용하여 2차 계획법을 통해 L1 소프트 마진 최소화를 구현합니다. 이 옵션을 사용하려면 Optimization Toolbox™ 라이선스가 필요합니다. 자세한 내용은 2차 계획법 정의 (Optimization Toolbox) 항목을 참조하십시오.
'SMO'순차적 최소규모 최적화([17] 항목 참조)

디폴트 값은 2-클래스 학습에 대해 'OutlierFraction'을 양수 값으로 설정하는 경우 'ISDA'이고, 그렇지 않은 경우 'SMO'입니다.

예: 'Solver','ISDA'

알파 계수의 초기 추정값으로, 'Alpha'와 함께 음이 아닌 값으로 구성된 숫자형 벡터가 쉼표로 구분되어 지정됩니다. Alpha의 길이는 X의 행 개수와 같아야 합니다.

  • 'Alpha'의 각 요소는 X의 관측값에 대응됩니다.

  • 'Alpha'NaN을 포함할 수 없습니다.

  • 'Alpha'와 교차 검증 이름-값 쌍의 인수('CrossVal', 'CVPartition', 'Holdout', 'KFold' 또는 'Leaveout') 중 하나를 지정하는 경우, 소프트웨어가 오류를 반환합니다.

Y가 누락값을 포함하는 경우, 누락값에 대응되는 Y, X, 'Alpha'의 모든 행을 제거하십시오. 즉, 다음을 입력합니다.

idx = ~isundefined(categorical(Y));
Y = Y(idx,:);
X = X(idx,:);
alpha = alpha(idx);
그런 다음, Y, X, alpha를 각각 응답 변수, 예측 변수, 초기 알파 추정값으로 전달합니다.

디폴트 값은 다음과 같습니다.

  • 단일 클래스 학습의 경우 0.5*ones(size(X,1),1)

  • 2-클래스 학습의 경우 zeros(size(X,1),1)

예: 'Alpha',0.1*ones(size(X,1),1)

데이터형: double | single

캐시 크기로, 'CacheSize'와 함께 'maximal' 또는 양의 스칼라가 쉼표로 구분되어 지정됩니다.

CacheSize'maximal'인 경우, 소프트웨어는 전체 n×n 그람 행렬을 유지하는 데 충분한 메모리를 예약합니다.

CacheSize가 양의 스칼라인 경우, 소프트웨어는 모델 훈련에 사용하기 위해 CacheSize(단위: 메가바이트) 크기의 메모리를 예약합니다.

예: 'CacheSize','maximal'

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

알파 계수 자르기 여부를 표시하는 플래그로, 'ClipAlphas'와 함께 truefalse가 쉼표로 구분되어 지정됩니다.

관측값 j에 대한 알파 계수가 αj이고 관측값 j의 상자 제약 조건이 Cj인 경우, j = 1,...,n입니다. 여기서 n은 훈련 표본 크기입니다.

설명
true각 반복마다 αj가 0에 가깝거나 Cj에 가까운 경우, MATLAB이 αj를 각각 0 또는 Cj로 설정합니다.
falseMATLAB이 최적화 과정 중에 알파 계수를 변경하지 않습니다.

MATLAB은 훈련된 SVM 모델 객체의 Alpha 속성에 α의 최종 값을 저장합니다.

ClipAlphas는 SMO 및 ISDA 수렴에 영향을 미칠 수 있습니다.

예: 'ClipAlphas',false

데이터형: logical

단일 클래스 학습에 대한 ν 모수로, 'Nu'와 함께 양의 스칼라가 쉼표로 구분되어 지정됩니다. Nu0보다 크고 최대 1이어야 합니다.

Nu를 설정하여 대부분의 훈련 예가 양성 클래스에 있도록 하는 것과 점수 함수의 가중치를 최소화하는 것 간의 장단점을 절충합니다.

예: 'Nu',0.25

데이터형: double | single

최적화 진단 메시지 출력 간 반복 횟수로, 'NumPrint'와 함께 음이 아닌 정수가 쉼표로 구분되어 지정됩니다.

'Verbose',1'NumPrint',numprint를 지정하는 경우, 소프트웨어가 명령 창에서 매 numprint회의 반복마다 SMO 및 ISDA의 모든 최적화 진단 메시지를 표시합니다.

예: 'NumPrint',500

데이터형: double | single

훈련 데이터의 이상값 예상 비율로, 'OutlierFraction'과 함께 구간 [0,1) 내 숫자형 스칼라가 쉼표로 구분되어 지정됩니다.

outlierfraction을 0보다 큰 값으로 하여 'OutlierFraction',outlierfraction을 설정했다고 가정해 보겠습니다.

  • 2-클래스 학습의 경우, 로버스트 학습을 구현합니다. 다시 말해, 최적화 알고리즘이 수렴될 때 소프트웨어가 관측값의 100*outlierfraction%를 제거한다는 의미입니다. 제거되는 관측값은 크기가 큰 기울기에 해당합니다.

  • 단일 클래스 학습의 경우, 훈련 세트에서 관측값의 outlierfraction이 음의 점수를 갖도록 하는 적합한 편향 항을 찾게 됩니다.

예: 'OutlierFraction',0.01

데이터형: double | single

훈련 데이터에서 중복된 관측값을 단일 관측값으로 교체하는 플래그로, 'RemoveDuplicates'와 함께 truefalse가 쉼표로 구분되어 지정됩니다.

RemoveDuplicatestrue인 경우, fitcsvm 함수는 훈련 데이터에서 중복된 관측값을 동일한 값을 가지는 단일 관측값으로 바꿉니다. 단일 관측값의 가중치는 제거된 중복 항목의 가중치를 모두 더한 합과 일치합니다(Weights 참조).

데이터 세트에 중복된 관측값이 많이 포함된 경우 'RemoveDuplicates',true를 지정하면 수렴 시간을 상당히 단축시킬 수 있습니다.

데이터형: logical

세부 정보 표시 수준으로, 'Verbose'와 함께 0, 1 또는 2가 쉼표로 구분되어 지정됩니다. Verbose의 값은 소프트웨어가 명령 창에 표시하는 최적화 정보의 양을 제어하고 이 정보를 Mdl.ConvergenceInfo.History에 구조체로 저장합니다.

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

설명
0소프트웨어가 수렴 정보를 표시하거나 저장하지 않습니다.
1소프트웨어가 매 numprint회의 반복마다 진단 메시지를 표시하고 수렴 조건을 저장합니다. 여기서 numprint는 이름-값 쌍 인수 'NumPrint'의 값입니다.
2소프트웨어가 매 반복마다 진단 메시지를 표시하고 수렴 조건을 저장합니다.

예: 'Verbose',1

데이터형: double | single

기타 분류 옵션

모두 축소

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

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

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

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

논리형 벡터

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

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

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

식별된 범주형 예측 변수에 대해 fitcsvm 함수는 범주형 변수에 순서가 지정되어 있는지에 따라 서로 다른 두 가지 체계를 사용하여 가변수를 생성합니다. 순서가 지정되지 않은 범주형 변수에 대해 fitcsvm 함수는 범주형 변수의 각 수준마다 하나의 가변수를 생성합니다. 순서가 지정된 범주형 변수에 대해 fitcsvm 함수는 범주 개수보다 하나가 적은 가변수를 생성합니다. 자세한 내용은 Automatic Creation of Dummy Variables 항목을 참조하십시오.

예: 'CategoricalPredictors','all'

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

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

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

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

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

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

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

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

이 인수는 2-클래스 학습의 경우에만 유효합니다.

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

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

2-클래스 학습에 대한 오분류 비용으로, 'Cost'와 함께 정사각 행렬 또는 구조체형 배열이 쉼표로 구분되어 지정됩니다.

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

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

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

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

비용 행렬을 지정하면 소프트웨어가 훈련 시 비용 행렬에 있는 벌점을 통합하여 사전 확률을 업데이트하고, 사용자가 지정한 값을 훈련된 SVM 모델 객체의 Cost 속성에 저장합니다. BoxConstraint, Cost, Prior, Standardize, Weights의 관계와 알고리즘 동작에 대한 자세한 내용은 알고리즘 항목을 참조하십시오.

이 인수는 2-클래스 학습의 경우에만 유효합니다.

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

데이터형: double | single | 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를 사용하여 훈련에 사용할 예측 변수를 선택할 수 있습니다. 즉, fitcsvm 함수는 PredictorNames의 예측 변수와 이에 대한 응답 변수만을 훈련 중에 사용합니다.

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

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

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

예: "PredictorNames",["SepalLength","SepalWidth","PetalLength","PetalWidth"]

데이터형: string | cell

2-클래스 학습에 대한 각 클래스의 사전 확률로, 'Prior'와 함께 다음 표에 나와 있는 값이 쉼표로 구분되어 지정됩니다.

설명
'empirical'클래스 사전 확률은 Y의 클래스 상대 도수입니다.
'uniform'모든 클래스 사전 확률은 1/K와 같습니다. 여기서 K는 클래스 개수입니다.
숫자형 벡터벡터의 각 요소는 클래스 사전 확률입니다. Mdl.ClassNames에 따라 요소의 순서를 지정하거나 ClassNames 이름-값 쌍의 인수를 사용하여 순서를 지정합니다. 소프트웨어는 합이 1이 되도록 요소를 정규화합니다.
구조체

다음과 같은 두 개의 필드를 갖는 구조체 S입니다.

  • S.ClassNames는 클래스 이름을 Y와 같은 유형의 변수로 포함합니다.

  • S.ClassProbs는 대응되는 사전 확률로 구성된 벡터를 포함합니다. 소프트웨어는 합이 1이 되도록 벡터의 요소를 정규화합니다.

비용 행렬을 지정하면 소프트웨어가 훈련 시 비용 행렬에 설명된 벌점을 통합하여 사전 확률을 업데이트합니다. 소프트웨어는 합이 1이 되도록 사용자가 지정한 사전 확률을 정규화한 후에 이 확률을 훈련된 모델 객체의 Prior 속성에 저장합니다. BoxConstraint, Cost, Prior, Standardize, Weights의 관계와 알고리즘 동작에 대한 자세한 내용은 알고리즘 항목을 참조하십시오.

이 인수는 2-클래스 학습의 경우에만 유효합니다.

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

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

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

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

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

예: "ResponseName","response"

데이터형: char | string

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

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

설명
"doublelogit"1/(1 + e–2x)
"invlogit"log(x / (1 – x))
"ismax"최대 점수를 갖는 클래스의 점수를 1로 설정하고, 다른 모든 클래스의 점수를 0으로 설정합니다.
"logit"1/(1 + e–x)
"none" 또는 "identity"x(변환 없음)
"sign"x < 0의 경우 –1
x = 0의 경우 0
x > 0의 경우 1
"symmetric"2x – 1
"symmetricismax"최대 점수를 갖는 클래스의 점수를 1로 설정하고, 다른 모든 클래스의 점수를 -1로 설정합니다.
"symmetriclogit"2/(1 + e–x) – 1

MATLAB 함수나 사용자가 직접 정의하는 함수의 경우, 이에 대한 함수 핸들을 점수 변환에 사용하십시오. 함수 핸들은 행렬(원래 점수)을 받아 동일한 크기의 행렬(변환된 점수)을 반환합니다.

예: "ScoreTransform","logit"

데이터형: char | string | function_handle

관측값 가중치로, 'Weights'와 함께 양수 값으로 구성된 숫자형 벡터나 Tbl에 포함된 변수의 이름이 쉼표로 구분되어 지정됩니다. 소프트웨어는 X 또는 Tbl의 각 행에 있는 관측값에 이에 대응하는 Weights의 값을 함께 사용하여 가중치를 적용합니다. Weights의 크기는 X 또는 Tbl의 행 개수와 일치해야 합니다.

입력 데이터를 테이블 Tbl로 지정하는 경우, WeightsTbl에서 숫자형 벡터를 포함하는 변수의 이름일 수 있습니다. 이 경우, Weights를 문자형 벡터 또는 string형 스칼라로 지정해야 합니다. 예를 들어, 가중 벡터 WTbl.W로 저장된 경우, 이를 'W'로 지정하십시오. 그렇지 않은 경우, 소프트웨어는 모델을 훈련시킬 때 W를 포함한 Tbl의 모든 열을 예측 변수 또는 응답 변수로 처리합니다.

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

소프트웨어는 Weights의 총합이 각 클래스의 사전 확률의 값이 되도록 정규화합니다. BoxConstraint, Cost, Prior, Standardize, Weights의 관계와 알고리즘 동작에 대한 자세한 내용은 알고리즘 항목을 참조하십시오.

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

참고

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

교차 검증 옵션

모두 축소

교차 검증된 분류기를 훈련시키는 플래그로, 'Crossval'과 함께 'on' 또는 'off'가 쉼표로 구분되어 지정됩니다.

'on'으로 지정하면 소프트웨어가 10겹 교차 검증된 분류기를 훈련시킵니다.

사용자는 CVPartition, Holdout, KFold 또는 Leaveout 이름-값 쌍의 인수 중 하나를 사용하여 이 교차 검증 설정을 재정의할 수 있습니다. 한 번에 하나의 교차 검증 이름-값 쌍의 인수만 사용하여 교차 검증된 모델을 생성할 수 있습니다.

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

예: 'Crossval','on'

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

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

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

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

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

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

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

예: Holdout=0.1

데이터형: double | single

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

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

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

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

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

예: KFold=5

데이터형: single | double

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

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

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

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

예: Leaveout="on"

데이터형: char | string

수렴 제어 옵션

모두 축소

순차적 최소규모 최적화(SMO) 또는 반복 단일 데이터 알고리즘(ISDA)으로 구한 상한 이탈값과 하한 이탈값 간의 기울기 차이에 대한 허용오차로, 'DeltaGradientTolerance'와 함께 음이 아닌 스칼라가 쉼표로 구분되어 지정됩니다.

DeltaGradientTolerance0인 경우, 소프트웨어는 기울기 차이에 대한 허용오차를 사용하여 최적화 수렴을 확인하지 않습니다.

디폴트 값은 다음과 같습니다.

  • 솔버가 SMO인 경우(예를 들어, 'Solver','SMO'를 설정한 경우) 1e-3

  • 솔버가 ISDA인 경우(예를 들어, 'Solver','ISDA'를 설정한 경우) 0

예: 'DeltaGradientTolerance',1e-2

데이터형: double | single

SMO 또는 ISDA로 구한 실현가능성 격차 허용오차로, 'GapTolerance'와 함께 음이 아닌 스칼라가 쉼표로 구분되어 지정됩니다.

GapTolerance0인 경우, 소프트웨어는 실현가능성 격차 허용오차를 사용하여 최적화 수렴을 확인하지 않습니다.

예: 'GapTolerance',1e-2

데이터형: double | single

수치 최적화 반복의 최대 횟수로, 'IterationLimit'와 함께 양의 정수가 쉼표로 구분되어 지정됩니다.

최적화 루틴이 성공적으로 수렴되는지 여부에 상관없이 소프트웨어가 훈련된 모델을 반환합니다. Mdl.ConvergenceInfo는 수렴 정보를 포함합니다.

예: 'IterationLimit',1e8

데이터형: double | single

카루쉬-쿤-터커(KKT) 상보성 조건 위반 허용오차로, 'KKTTolerance'와 함께 음이 아닌 스칼라가 쉼표로 구분되어 지정됩니다.

KKTTolerance0인 경우, 소프트웨어는 KKT 상보성 조건 위반 허용오차를 사용하여 최적화 수렴을 확인하지 않습니다.

디폴트 값은 다음과 같습니다.

  • 솔버가 SMO인 경우(예를 들어, 'Solver','SMO'를 설정한 경우) 0

  • 솔버가 ISDA인 경우(예를 들어, 'Solver','ISDA'를 설정한 경우) 1e-3

예: 'KKTTolerance',1e-2

데이터형: double | single

활성 세트 감소 간의 반복 횟수로, 'ShrinkagePeriod'와 함께 음이 아닌 정수가 쉼표로 구분되어 지정됩니다.

'ShrinkagePeriod',0을 설정하는 경우, 소프트웨어는 활성 세트를 축소하지 않습니다.

예: 'ShrinkagePeriod',1000

데이터형: double | single

하이퍼파라미터 최적화 옵션

모두 축소

2-클래스 학습을 위해 최적화할 모수로, 'OptimizeHyperparameters'와 함께 다음 값 중 하나가 쉼표로 구분되어 지정됩니다.

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

  • 'auto'{'BoxConstraint','KernelScale','Standardize'}를 사용합니다.

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

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

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

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

참고

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

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

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

  • KernelFunctionfitcsvm'gaussian', 'linear', 'polynomial' 중에서 탐색을 수행합니다.

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

  • PolynomialOrderfitcsvm이 범위 [2,4] 내 정수 중에서 탐색을 수행합니다.

  • Standardizefitcsvm'true''false' 중에서 탐색을 수행합니다.

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

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

paramsOptimizeHyperparameters의 값으로 전달합니다.

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

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

이 인수는 2-클래스 학습의 경우에만 유효합니다.

예: 'OptimizeHyperparameters','auto'

2-클래스 학습에 대한 최적화 옵션으로, 구조체로 지정됩니다. 이 인수는 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보다 큰 정수

이 인수는 2-클래스 학습의 경우에만 유효합니다.

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

데이터형: struct

출력 인수

모두 축소

훈련된 SVM 분류 모델로, ClassificationSVM 모델 객체 또는 ClassificationPartitionedModel 교차 검증된 모델 객체로 반환됩니다.

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

Mdl의 속성을 참조하려면 점 표기법을 사용하십시오. 예를 들어, 명령 창에 Mdl.Alpha를 입력하여 훈련된 라그랑주 승수를 표시할 수 있습니다.

제한 사항

  • fitcsvm은 단일 클래스 학습 응용 사례와 2-클래스 학습 응용 사례에 대해 SVM 분류기를 훈련시킵니다. 세 개 이상의 클래스를 갖는 데이터를 사용하여 SVM 분류기를 훈련시키려면 fitcecoc를 사용하십시오.

  • fitcsvm은 저차원 및 중간 차원의 데이터 세트를 지원합니다. 고차원 데이터 세트에 대해서는 fitclinear를 대신 사용하십시오.

세부 정보

모두 축소

상자 제약 조건

상자 제약 조건은 마진을 위반하는 관측값에 적용되는 최대 벌점을 제어하고 과적합을 방지(정규화)하는 데 도움이 되는 모수입니다.

상자 제약 조건을 늘리면 SVM 분류기가 더 적은 서포트 벡터를 할당합니다. 그러나, 상자 제약 조건을 늘리면 훈련 시간이 더 길어질 수 있습니다.

그람 행렬(Gram matrix)

n개 벡터의 집합으로 구성된 그람 행렬 {x1,..,xn; xj ∊ Rp}는 커널 함수 ϕ를 사용하여 변환된 예측 변수의 내적인 G(xj,xk) = <ϕ(xj),ϕ(xk)>로 정의된 요소 (j,k)를 갖는 n×n 행렬입니다.

비선형 SVM의 경우, 이 알고리즘은 예측 변수 데이터 X의 행을 사용하여 그람 행렬을 형성합니다. 쌍대 문제 형식화는 X에 포함된 관측값의 내적을 결과로 생성되는 그람 행렬의 대응 요소로 바꿉니다(“커널 트릭(Kernel trick)”이라고 함). 그 결과, 비선형 SVM은 변환된 예측 변수 공간에서 동작하여 분리 초평면을 찾습니다.

카루쉬-쿤-터커(KKT) 상보성 조건

카루쉬-쿤-터커(KKT) 상보성 조건은 최적의 비선형 계획법 해에 요구되는 최적화 제약 조건입니다.

SVM에서 KKT 상보성 조건은 다음과 같습니다.

{αj[yjf(xj)1+ξj]=0ξj(Cαj)=0

이는 모든 j = 1,...,n에 대해 적용됩니다. 여기서 f(xj)=ϕ(xj)β+b, ϕ는 커널 함수(그람 행렬 참조)이고, ξj는 여유 변수입니다. 클래스가 완벽하게 분리 가능한 경우, 모든 j = 1,...,n에 대해 ξj = 0입니다.

단일 클래스 학습

단일 클래스 학습, 즉 비지도 SVM은 고차원 예측 변수 공간(원래 예측 변수 공간이 아님)의 원점에서 데이터를 분리하는 것이 목적이며, 이상값 감지에 사용되는 알고리즘입니다.

이 알고리즘은 이진 분류를 위한 SVM의 알고리즘과 비슷합니다. 목적은 다음과 같은 쌍대 문제 표현식의 크기를 최소화하는 것입니다.

0.5jkαjαkG(xj,xk)

여기에서 α1,...,αn은 다음의 값입니다.

αj=nν

또한, 모든 j = 1,...,n에 대해 0αj1입니다. G(xj,xk)의 값은 그람 행렬의 요소 (j,k)에 있습니다.

ν의 값이 작을 경우 서포트 벡터의 수가 더 적어지고, 이에 따라 매끄럽고 엄격한 결정 경계가 생성됩니다. ν의 값이 클 경우 서포트 벡터의 수가 더 많아지고, 이에 따라 굴곡이 많은 유연한 결정 경계가 생성됩니다. ν의 최적 값은 데이터 복잡성을 포착할 만큼 커야 하고 과잉훈련을 피할 수 있을 정도로 작아야 합니다. 또한, 0 < ν ≤ 1입니다.

자세한 내용은 [5] 항목을 참조하십시오.

서포트 벡터

서포트 벡터는 순양수 추정값 α1,...,αn에 대응되는 관측값입니다.

주어진 훈련 세트에 대해 더 적은 수의 서포트 벡터를 생성하는 SVM 분류기가 더 좋습니다.

이진 분류를 위한 서포트 벡터 머신

SVM 이진 분류 알고리즘은 두 클래스로 데이터를 분리하는 최적의 초평면을 탐색합니다. 분리 가능한 클래스에 대해 최적의 초평면은 양성 클래스와 음성 클래스에 대한 경계를 생성하는, 이를 둘러싸는 마진(관측값을 포함하지 않는 공간)을 극대화합니다. 분리가 불가능한 클래스에 대해서도 목적은 같지만, 이 알고리즘은 클래스 경계의 잘못된 변에 있는 모든 관측값에 대한 마진의 길이에 벌점을 적용합니다.

선형 SVM 점수 함수는 다음과 같습니다.

f(x)=xβ+b,

여기서는 다음을 조건으로 합니다.

  • x는 (X의 행에 대응하는)관측값입니다.

  • 벡터 β는 초평면에 대한 직교 벡터를 정의하는 계수(Mdl.Beta에 대응)를 포함합니다. 분리 가능한 데이터에 대해 최적의 마진 길이는 2/β.입니다.

  • b는 (Mdl.Bias에 대응하는) 편향 항입니다.

특정 계수에 대한 f(x)의 근은 초평면을 정의합니다. 특정 초평면에 대해 f(z)는 점 z에서 초평면까지의 거리입니다.

이 알고리즘은 양성 클래스(y = 1)와 음성 클래스(y = –1)의 관측값을 분리된 상태로 유지하면서 최대 마진 길이를 탐색합니다.

  • 분리 가능한 클래스인 경우, 모든 j = 1,..,n에 대해 yjf(xj) ≥ 1을 만족하는 β 및 b에 대해 β를 최소화하는 것이 목적입니다. 이것은 분리 가능한 클래스에 대한 원문제(Primal) 형식화입니다.

  • 분리가 불가능한 클래스에 대해 이 알고리즘은 여유 변수(ξj)를 사용하여 해당 클래스의 마진 경계를 교차하는 관측값의 목적 함수에 벌점을 적용합니다. 해당 클래스의 마진 경계를 교차하지 않는 관측값에 대해서는 ξj = 0이고, 그렇지 않은 경우 ξj ≥ 0입니다.

    모든 j = 1,..,n에 대해, 그리고 양의 스칼라 상자 제약 조건 C에 대해 yjf(xj)1ξjξj0을 만족하는 β, b, ξj에 대해 0.5β2+Cξj를 최소화하는 것이 목적입니다. 이것은 분리가 불가능한 클래스에 대한 원문제(Primal) 형식화입니다.

이 알고리즘은 목적 함수를 최적화하기 위해 라그랑주 승수 방법을 사용합니다. 여기에는 n개의 계수 α1,...,αn(Mdl.Alpha에 대응)이 사용됩니다. 선형 SVM의 쌍대 문제 형식화는 다음과 같습니다.

  • 분리 가능한 클래스에 대해 다음을 최소화합니다.

    0.5j=1nk=1nαjαkyjykxjxkj=1nαj

    이는 α1,...,αn에 대해 수행되고 αjyj=0, 모든 j = 1,...,n에 대해 αj ≥ 0 및 카루쉬-쿤-터커(KKT) 상보성 조건이 적용됩니다.

  • 분리가 불가능한 클래스의 경우, 목적은 분리 가능한 클래스와 동일하되 모든 j = 1,..,n에 대해 0αjC라는 추가 조건이 적용됩니다.

결과로 생성되는 점수 함수는 다음과 같습니다.

f^(x)=j=1nα^jyjxxj+b^.

b^는 편향에 대한 추정값이고 α^j는 벡터 α^, j = 1,...,n에 대한 j번째 추정값입니다. 이렇게 작성된 점수 함수는 원문제 형식화의 결과로 β의 추정값을 생성하지 않습니다.

SVM 알고리즘은 sign(f^(z)).를 사용하여 새 관측값 z를 분류합니다.

비선형 경계가 클래스를 분리하는 경우가 있습니다. 비선형 SVM은 변환된 예측 변수 공간에서 동작하여 최적의 분리 초평면을 찾습니다.

비선형 SVM의 쌍대 문제 형식화는 다음과 같습니다.

0.5j=1nk=1nαjαkyjykG(xj,xk)j=1nαj

이는 α1,...,αn에 대해 수행되고 αjyj=0, 모든 j = 1,..,n에 대해 0αjC 및 KKT 상보성 조건이 적용됩니다. G(xk,xj)는 그람 행렬의 요소입니다. 결과로 나타나는 점수 함수는 다음과 같습니다.

f^(x)=j=1nα^jyjG(x,xj)+b^.

자세한 내용은 서포트 벡터 머신 이해하기, [1] 항목 및 [3] 항목을 참조하십시오.

  • 데이터 세트가 크지 않다면 항상 예측 변수를 표준화하도록 하십시오(Standardize 참조). 표준화를 수행하면 예측 변수가 측정되는 척도에 영향을 받지 않게 됩니다.

  • KFold 이름-값 쌍의 인수를 사용하여 교차 검증을 수행하는 것이 좋습니다. 교차 검증 결과를 통해 SVM 분류기가 얼마나 잘 일반화되는지 확인할 수 있습니다.

  • 단일 클래스 학습의 경우:

    • 이름-값 쌍 인수 Alpha의 디폴트 설정을 사용하는 경우 훈련 시간이 길어질 수 있습니다. 훈련 속도를 높이려면 Alpha를 대부분 0으로 구성된 벡터로 설정하십시오.

    • 더 적은 서포트 벡터가 생성되도록 이름-값 쌍의 인수 Nu0에 더 가까운 값으로 설정하십시오. 그러면 더 매끄럽지만 엄격한 결정 경계가 생성됩니다.

  • 서포트 벡터의 희소성은 SVM 분류기에 있어서는 이상적인 속성입니다. 서포트 벡터의 개수를 줄이려면 BoxConstraint를 큰 값으로 설정하십시오. 단, 이 동작을 수행하면 훈련 시간이 증가합니다.

  • 최적의 훈련 시간을 위해 CacheSize를 컴퓨터의 메모리 제한이 허용하는 한 최대한 높게 설정하십시오.

  • 훈련 세트에서 서포트 벡터의 개수가 관측값보다 훨씬 적을 거라 예상되는 경우, 이름-값 쌍의 인수 'ShrinkagePeriod'를 사용하여 활성 세트를 축소함으로써 수렴되는 속도를 상당히 높일 수 있습니다. 'ShrinkagePeriod',1000을 지정하는 것이 좋습니다.

  • 결정 경계에서 멀리 떨어진 중복된 관측값은 수렴에 영향을 미치지 않습니다. 그러나, 결정 경계 가까이에 있는 중복된 관측값은 몇 개만 있더라도 수렴되는 속도가 상당히 느려질 수 있습니다. 다음과 같은 경우 'RemoveDuplicates',true를 지정하여 수렴되는 속도를 높이십시오.

    • 데이터 세트에 중복된 관측값이 많이 있는 경우.

    • 몇 개의 중복된 관측값이 결정 경계 가까이에 있다고 의심되는 경우.

    훈련 중에 원래 데이터 세트를 유지하기 위해 fitcsvm 함수는 원래 데이터 세트와 중복된 관측값을 제거한 두 개의 데이터 세트를 일시적으로 별도로 저장해야 합니다. 따라서, 몇몇 중복된 관측값을 포함하는 데이터 세트에 대해 true를 지정할 경우 fitcsvm 함수는 원래 데이터 메모리의 두 배에 가까운 메모리를 사용합니다.

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

알고리즘

  • SVM 이진 분류 알고리즘의 수학적 공식은 이진 분류를 위한 서포트 벡터 머신 항목과 서포트 벡터 머신 이해하기 항목을 참조하십시오.

  • NaN, <undefined>, 빈 문자형 벡터(''), 빈 string형(""), <missing> 값은 누락값을 나타냅니다. fitcsvm은 누락값인 응답 변수에 대응되는 데이터의 전체 행을 제거합니다. 총 가중치를 계산할 때(다음 글머리 기호 항목 참조), fitcsvm은 누락값인 예측 변수를 하나라도 갖는 관측값에 대응되는 가중치를 모두 무시합니다. 이 동작은 균형 클래스 문제에서 불균형 사전 확률을 초래할 수 있습니다. 따라서, 관측값 상자 제약 조건은 BoxConstraint와 일치하지 않을 수 있습니다.

  • Cost, PriorWeights 이름-값 인수를 지정할 경우 출력 모델 객체는 지정된 값을 각각 Cost, PriorW 속성에 저장합니다. Cost 속성이 사용자가 지정한 비용 행렬(C)을 수정 없이 저장합니다. Prior 속성과 W 속성은 각각 정규화한 후의 사전 확률 및 관측값 가중치를 저장합니다. 모델 훈련 시, 소프트웨어는 비용 행렬에 있는 벌점을 통합하도록 사전 확률과 관측값 가중치를 업데이트합니다. 자세한 내용은 오분류 비용 행렬, 사전 확률 및 관측값 가중치 항목을 참조하십시오.

    CostPrior 이름-값 인수는 2-클래스 학습에 사용됩니다. 단일 클래스 학습의 경우 CostPrior 속성은 각각 01을 저장합니다.

  • 2-클래스 학습의 경우, fitcsvm은 상자 제약 조건을 훈련 데이터의 각 관측값에 할당합니다. 관측값 j의 상자 제약 조건에 대한 공식은 다음과 같습니다.

    Cj=nC0wj,

    여기서 C0은 초기 상자 제약 조건이고(BoxConstraint 이름-값 인수 참조), wj*는 관측값 j에 대해 CostPrior에 의해 조정된 관측값 가중치입니다. 관측값 가중치에 대한 자세한 내용은 오분류 비용 행렬에 대한 사전 확률 및 관측값 가중치 조정하기 항목을 참조하십시오.

  • Standardizetrue로 지정하고 Cost, Prior 또는 Weights 이름-값 인수를 설정하면 fitcsvm이 대응되는 가중 평균과 가중 표준편차를 사용하여 예측 변수를 표준화합니다. 즉, fitcsvm은 다음을 사용하여 예측 변수 j(xj)를 표준화합니다.

    xj=xjμjσj,

    여기서 xjk는 예측 변수 j(열)의 관측값 k(행)이며 다음이 성립됩니다.

    μj=1kwk*kwk*xjk,(σj)2=v1v12v2kwk*(xjkμj)2,v1=jwj*,v2=j(wj*)2.

  • p가 훈련 데이터에서 사용자가 예상하는 이상값 비율이고 'OutlierFraction',p를 설정한다고 가정합니다.

    • 단일 클래스 학습의 경우, 소프트웨어가 훈련 데이터에 포함된 관측값의 100p%가 음의 점수를 가지도록 편향 항을 훈련시킵니다.

    • 2-클래스 학습의 경우 소프트웨어가 로버스트 학습을 구현합니다. 다시 말해, 최적화 알고리즘이 수렴될 때 소프트웨어가 관측값의 100p%를 제거한다는 의미입니다. 제거되는 관측값은 크기가 큰 기울기에 해당합니다.

  • 예측 변수 데이터에 범주형 변수가 포함된 경우 소프트웨어가 일반적으로 이러한 변수에 대해 전체 가변수 인코딩을 사용합니다. 소프트웨어는 각 범주형 변수의 각 수준마다 하나의 가변수를 생성합니다.

    • PredictorNames 속성은 원래 예측 변수 이름마다 하나의 요소를 저장합니다. 예를 들어, 세 개의 예측 변수가 있고, 그중 하나가 세 개 수준을 갖는 범주형 변수라고 가정해 보겠습니다. 그러면 PredictorNames는 예측 변수의 원래 이름을 포함하는 문자형 벡터로 구성된 1×3 셀형 배열이 됩니다.

    • ExpandedPredictorNames 속성은 가변수를 포함하여 예측 변수마다 하나의 요소를 저장합니다. 예를 들어, 세 개의 예측 변수가 있고, 그중 하나가 세 개 수준을 갖는 범주형 변수라고 가정해 보겠습니다. 그러면 ExpandedPredictorNames는 예측 변수 이름 및 새 가변수의 이름을 포함하는 문자형 벡터로 구성된 1×5 셀형 배열이 됩니다.

    • 마찬가지로, Beta 속성은 가변수를 포함하여 예측 변수마다 하나의 베타 계수를 저장합니다.

    • SupportVectors 속성은 가변수를 포함하여 서포트 벡터에 대한 예측 변수 값을 저장합니다. 예를 들어, m개의 서포트 벡터와 세 개의 예측 변수가 있고, 그중 하나가 세 개의 수준을 갖는 범주형 변수라고 가정해 보겠습니다. 그러면 SupportVectors는 n×5 행렬이 됩니다.

    • X 속성은 훈련 데이터를 원래 입력된 대로 저장하고 가변수는 포함하지 않습니다. 입력값이 테이블인 경우, X는 예측 변수로 사용된 열만 포함합니다.

  • 테이블에 지정된 예측 변수에 대해 변수 중 하나가 순서가 지정된(순서형) 범주를 포함하는 경우 소프트웨어는 이러한 변수에 대해 순서형 인코딩(Ordinal Encoding)을 사용합니다.

    • 순서가 지정된 k개의 수준을 갖는 변수에 대해 소프트웨어는 k – 1개의 가변수를 생성합니다. j번째 가변수는 j 수준까지는 –1이 되고, j + 1에서 k까지의 수준에서는 +1이 됩니다.

    • ExpandedPredictorNames 속성에 저장된 가변수의 이름은 값 +1을 갖는 첫 번째 수준을 나타냅니다. 소프트웨어는 수준 2, 3, ..., k의 이름을 포함하여 가변수에 대해 k – 1개의 추가 예측 변수 이름을 저장합니다.

  • 모든 솔버는 L1 소프트 마진(Soft-Margin) 최소화를 구현합니다.

  • 단일 클래스 학습의 경우, 소프트웨어는 다음을 만족하는 라그랑주 승수 α1,...,αn을 추정합니다.

    j=1nαj=nν.

대체 기능

ocsvm 함수를 사용하여 이상 감지를 위한 단일 클래스 SVM 모델을 훈련시킬 수도 있습니다.

  • ocsvm 함수는 fitcsvm 함수보다 간단하고 선호되는 이상 감지 워크플로를 제공합니다.

    • ocsvm 함수는 OneClassSVM 객체, 이상 표시자, 이상 점수를 반환합니다. 출력값을 사용하여 훈련 데이터의 이상을 식별할 수 있습니다. OneClassSVMisanomaly 객체 함수를 사용하여 새 데이터에서 이상을 찾을 수 있습니다. isanomaly 함수는 새 데이터에 대한 이상 표시자와 점수를 반환합니다.

    • fitcsvm 함수는 단일 클래스 및 이진 분류를 모두 지원합니다. 클래스 레이블 변수에 클래스가 한 개만 포함된 경우(예: 1로 구성된 벡터) fitcsvm은 단일 클래스 분류에 대해 모델을 훈련시키고 ClassificationSVM 객체를 반환합니다. 이상을 식별하려면 먼저 ClassificationSVMresubPredict 또는 predict 객체 함수를 사용하여 이상 점수를 계산한 다음 음수 점수를 갖는 관측값을 찾아 이상을 식별해야 합니다.

    • 큰 양의 이상 점수는 ocsvm의 이상을 나타내고, 음의 점수는 ClassificationSVMpredict의 이상을 나타냅니다.

  • ocsvm 함수는 SVM의 원문제 식을 기반으로 결정 경계를 찾는 반면 fitcsvm 함수는 SVM의 쌍대 문제 식을 기반으로 결정 경계를 찾습니다.

  • ocsvm의 솔버는 대규모 데이터 세트(대규모 n)에 대해 fitcsvm의 솔버보다 계산 비용이 저렴합니다. fitcsvm의 솔버는 n×n 그람 행렬의 계산을 필요로 하지만, ocsvm의 솔버는 n×m 크기의 행렬만 형성하면 됩니다. 여기서 m은 확장된 공간의 차원 수이며 일반적으로 빅데이터의 경우 n보다 훨씬 작습니다.

참고 문헌

[1] Christianini, N., and J. C. Shawe-Taylor. An Introduction to Support Vector Machines and Other Kernel-Based Learning Methods. Cambridge, UK: Cambridge University Press, 2000.

[2] Fan, R.-E., P.-H. Chen, and C.-J. Lin. “Working set selection using second order information for training support vector machines.” Journal of Machine Learning Research, Vol. 6, 2005, pp. 1889–1918.

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

[4] Kecman V., T. -M. Huang, and M. Vogt. “Iterative Single Data Algorithm for Training Kernel Machines from Huge Data Sets: Theory and Performance.” Support Vector Machines: Theory and Applications. Edited by Lipo Wang, 255–274. Berlin: Springer-Verlag, 2005.

[5] Scholkopf, B., J. C. Platt, J. C. Shawe-Taylor, A. J. Smola, and R. C. Williamson. “Estimating the Support of a High-Dimensional Distribution.” Neural Comput., Vol. 13, Number 7, 2001, pp. 1443–1471.

[6] Scholkopf, B., and A. Smola. Learning with Kernels: Support Vector Machines, Regularization, Optimization and Beyond, Adaptive Computation and Machine Learning. Cambridge, MA: The MIT Press, 2002.

확장 기능

버전 내역

R2014a에 개발됨

모두 확장