ClassificationSVM

단일 클래스 및 이진 분류용 서포트 벡터 머신(SVM)

설명

ClassificationSVM은 단일 클래스 학습 및 2-클래스 학습에 사용할 수 있는 서포트 벡터 머신(SVM) 분류기입니다. 훈련된 ClassificationSVM 분류기는 훈련 데이터, 모수 값, 사전 확률, 서포트 벡터, 알고리즘 구현 정보를 저장합니다. 이러한 분류기를 사용하여 점수-사후 확률 변환 함수 피팅(fitPosterior 참조) 및 새 데이터에 대한 레이블 예측(predict 참조)과 같은 작업을 수행할 수 있습니다.

생성

ClassificationSVM 객체는 fitcsvm을 사용하여 생성할 수 있습니다.

속성

모두 확장

SVM 속성

이 속성은 읽기 전용입니다.

훈련된 분류기 계수로, sx1 숫자형 벡터로 지정됩니다. s는 훈련된 분류기에 포함된 서포트 벡터의 개수, 즉 sum(Mdl.IsSupportVector)입니다.

Alpha는 쌍대 문제에서의 훈련된 분류기 계수, 즉 추정된 라그랑주 승수를 포함합니다. fitcsvmRemoveDuplicates 이름-값 쌍의 인수를 사용하여 중복 항목을 제거할 경우, 관측값 중 서포트 벡터에 해당하는 중복 관측값의 집합에 대해 Alpha는 이 집합 전체에 대응하는 하나의 계수를 포함합니다. 즉, MATLAB®은 중복된 값의 집합에서 하나의 관측값에 0이 아닌 계수를 지정하고 이 집합에 있는 다른 모든 중복된 관측값에 계수 값을 0으로 지정합니다.

데이터형: single | double

이 속성은 읽기 전용입니다.

선형 예측 변수 계수로, 숫자형 벡터로 지정됩니다. Beta의 길이는 모델을 훈련시킬 때 사용되는 예측 변수의 개수와 같습니다.

MATLAB은 전체 가변수 인코딩을 사용하여 예측 변수 데이터에서 범주형 변수를 확장합니다. 즉, MATLAB은 각 범주형 변수의 각 수준마다 하나의 가변수를 생성합니다. Beta는 가변수를 포함하여 각 예측 변수마다 하나의 값을 저장합니다. 예를 들어, 예측 변수가 3개 있고 그중 하나가 3개 수준을 갖는 범주형 변수인 경우 Beta는 5개 값을 포함하는 숫자형 벡터입니다.

KernelParameters.Function'linear'이면 관측값 x에 대한 분류 점수는 다음과 같습니다.

f(x)=(x/s)β+b.

Mdl은 속성 Beta, Bias, KernelParameters.Scale에 각각 β, b, s를 저장합니다.

분류 점수를 수동으로 추정하려면 먼저 훈련 중에 적용된 예측 변수 데이터에 변환을 적용해야 합니다. 구체적으로 말해, fitcsvm을 사용할 때 'Standardize',true를 지정할 경우 평균 Mdl.Mu 및 표준편차 Mdl.Sigma를 사용하여 예측 변수 데이터를 수동으로 표준화한 후 그 결과를 Mdl.KernelParameters.Scale에 지정된 커널 스케일로 나눠야 합니다.

모든 SVM 함수(예: resubPredictpredict)는 필요한 모든 변환을 적용한 후 추정을 수행합니다.

KernelParameters.Function'linear'가 아니면 Beta는 비어 있습니다([]).

데이터형: single | double

이 속성은 읽기 전용입니다.

편향 항으로, 스칼라로 지정됩니다.

데이터형: single | double

이 속성은 읽기 전용입니다.

상자 제약 조건으로, 상자 제약 조건으로 구성된 nx1 숫자형 벡터로 지정됩니다. n은 훈련 데이터의 관측값 개수입니다(NumObservations 속성 참조).

fitcsvmRemoveDuplicates 이름-값 쌍의 인수를 사용하여 중복 항목을 제거할 경우 주어진 중복된 관측값의 집합에 대해 MATLAB은 상자 제약 조건의 합을 구한 후 이 합을 하나의 관측값에 지정합니다. 그런 다음 MATLAB은 이 집합의 다른 모든 관측값에 상자 제약 조건을 0으로 지정합니다.

데이터형: single | double

이 속성은 읽기 전용입니다.

캐시 정보로, 구조체형 배열로 지정됩니다. 캐시 정보는 다음 표에 설명되어 있는 필드를 포함합니다.

필드설명
크기

소프트웨어에서 SVM 분류기 훈련을 위해 예약하는 캐시 크기(단위: MB)입니다. 자세한 내용은 'CacheSize'를 참조하십시오.

알고리즘

최적화 중에 소프트웨어가 사용하는 캐시 알고리즘입니다. 현재, 사용 가능한 캐시 알고리즘은 Queue뿐입니다. 따라서 캐시 알고리즘을 설정할 수 없습니다.

점 표기법을 사용하여 CacheInfo의 필드를 표시할 수 있습니다. 예를 들어, Mdl.CacheInfo.Size는 캐시 크기의 값을 표시합니다.

데이터형: struct

이 속성은 읽기 전용입니다.

서포트 벡터 표시자로, 예측 변수 데이터 행렬에서 대응하는 관측값이 서포트 벡터인지 여부를 나타내는 nx1 논리형 벡터로 지정됩니다. n은 훈련 데이터의 관측값 개수입니다(NumObservations 참조).

fitcsvmRemoveDuplicates 이름-값 쌍의 인수를 사용하여 중복 항목을 제거할 경우, 관측값 중 서포트 벡터에 해당하는 중복 관측값의 집합에 대해 IsSupportVector는 하나의 관측값만 서포트 벡터로 지정합니다.

데이터형: logical

이 속성은 읽기 전용입니다.

커널 모수로, 구조체형 배열로 지정됩니다. 커널 모수 속성은 다음 표에 나와 있는 필드를 포함합니다.

필드설명
함수

그람 행렬(Gram Matrix)의 요소를 계산하는 데 사용되는 커널 함수입니다. 자세한 내용은 'KernelFunction'을 참조하십시오.

스케일

모델 훈련이 이루어지는 예측 변수 데이터의 모든 요소를 스케일링하는 데 사용되는 커널 스케일 모수입니다. 자세한 내용은 'KernelScale'을 참조하십시오.

KernelParameters의 값을 표시하려면 점 표기법을 사용하십시오. 예를 들어, Mdl.KernelParameters.Scale은 커널 스케일 모수 값을 표시합니다.

소프트웨어는 KernelParameters를 입력값으로 받으며 이를 수정하지 않습니다.

데이터형: struct

이 속성은 읽기 전용입니다.

단일 클래스 학습 모수 ν로, 양의 스칼라로 지정됩니다.

데이터형: single | double

이 속성은 읽기 전용입니다.

훈련 데이터의 이상값 비율로, 숫자형 스칼라로 지정됩니다.

데이터형: double

이 속성은 읽기 전용입니다.

SVM 분류기를 훈련시키는 데 사용되는 최적화 루틴으로, 'ISDA', 'L1QP' 또는 'SMO'로 지정됩니다. 자세한 내용은 'Solver'를 참조하십시오.

이 속성은 읽기 전용입니다.

서포트 벡터 클래스 레이블로, sx1 숫자형 벡터로 지정됩니다. s는 훈련된 분류기에 포함된 서포트 벡터의 개수, 즉 sum(Mdl.IsSupportVector)입니다.

SupportVectorLabels의 값이 +1이면 대응하는 서포트 벡터가 양성 클래스에 속함을 나타냅니다(ClassNames{2}). 값이 –1이면 대응하는 서포트 벡터가 음성 클래스에 속함을 나타냅니다(ClassNames{1}).

fitcsvmRemoveDuplicates 이름-값 쌍의 인수를 사용하여 중복 항목을 제거할 경우, 관측값 중 서포트 벡터에 해당하는 중복 관측값의 집합에 대해 SupportVectorLabels는 하나의 고유한 서포트 벡터 레이블을 포함합니다.

데이터형: single | double

이 속성은 읽기 전용입니다.

훈련된 분류기에 포함된 서포트 벡터로, sxp 숫자형 행렬로 지정됩니다. s는 훈련된 분류기에 포함된 서포트 벡터의 개수, 즉 sum(Mdl.IsSupportVector)이며, p는 예측 변수 데이터에 포함된 예측 변수의 개수입니다.

SupportVectors는 MATLAB이 서포트 벡터로 간주하는 예측 변수 데이터 X의 행을 포함합니다. fitcsvm을 사용하여 SVM 분류기를 훈련시킬 때 'Standardize',true를 지정할 경우 SupportVectorsX의 표준화된 행을 포함합니다.

fitcsvmRemoveDuplicates 이름-값 쌍의 인수를 사용하여 중복 항목을 제거할 경우, 관측값 중 서포트 벡터에 해당하는 중복 관측값의 집합에 대해 SupportVectors는 하나의 고유한 서포트 벡터를 포함합니다.

데이터형: single | double

기타 분류 속성

이 속성은 읽기 전용입니다.

범주형 예측 변수의 인덱스로, 양의 정수로 구성된 벡터로 지정됩니다. CategoricalPredictors는 범주형 예측 변수 예측 변수를 포함하는 예측 변수 데이터로 구성된 열에 대응되는 인덱스 값을 포함합니다. 범주형 예측 변수가 없는 경우 이 속성은 비어 있습니다([]).

데이터형: single | double

이 속성은 읽기 전용입니다.

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

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

이 속성은 읽기 전용입니다.

오분류 비용으로, 숫자형 정사각 행렬로 지정됩니다. 여기서 Cost(i,j)는 어떤 점의 실제 클래스가 i인 경우 이 점을 j 클래스로 분류하는 데 드는 비용입니다.

훈련 중에 소프트웨어가 비용 행렬에 있는 벌점을 통합하여 사전 확률을 업데이트합니다.

  • 2-클래스 학습의 경우, Cost의 형식은 i ~= j이면 항상 Cost(i,j) = 1이고 i = j이면 항상 Cost(i,j) = 0입니다. 행은 실제 클래스에 대응되고, 열은 예측 클래스에 대응됩니다. Cost의 행과 열 순서는 ClassNames의 클래스 순서와 일치합니다.

  • 단일 클래스 학습의 경우, Cost = 0입니다.

자세한 내용은 알고리즘을 참조하십시오.

데이터형: double

이 속성은 읽기 전용입니다.

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

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

데이터형: cell

이 속성은 읽기 전용입니다.

훈련 데이터 기울기 값으로, 숫자형 벡터로 지정됩니다. Gradient의 길이는 관측값의 개수와 같습니다(NumObservations 참조).

데이터형: single | double

이 속성은 읽기 전용입니다.

ClassificationSVM 모델 훈련에 사용되는 모수로, 구조체형 배열로 지정됩니다. ModelParameters는 모수 값(예: SVM 분류기 훈련에 사용되는 이름-값 쌍의 인수)을 포함합니다. ModelParameters는 추정된 모수를 포함하지 않습니다.

점 표기법을 사용하여 ModelParameters의 필드에 액세스할 수 있습니다. 예를 들어, Mdl.ModelParameters.Alpha를 사용하여 Alpha를 추정하는 데 사용할 초기값을 액세스할 수 있습니다.

데이터형: struct

이 속성은 읽기 전용입니다.

예측 변수 평균으로, 숫자형 벡터로 지정됩니다. fitcsvm을 사용하여 SVM 분류기를 훈련시킬 때 'Standardize',1 또는 'Standardize',true를 지정하는 경우 Mu의 길이는 예측 변수 개수와 같습니다.

MATLAB은 전체 가변수 인코딩을 사용하여 예측 변수 데이터에서 범주형 변수를 확장합니다. 즉, MATLAB은 각 범주형 변수의 각 수준마다 하나의 가변수를 생성합니다. Mu는 가변수를 포함하여 각 예측 변수마다 하나의 값을 저장합니다. 그러나, MATLAB은 범주형 변수를 포함하는 열을 표준화하지 않습니다.

fitcsvm을 사용하여 SVM 분류기를 훈련시킬 때 'Standardize',false를 설정하는 경우 Mu는 빈 벡터([])입니다.

데이터형: single | double

이 속성은 읽기 전용입니다.

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

데이터형: single | double

이 속성은 읽기 전용입니다.

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

데이터형: cell

이 속성은 읽기 전용입니다.

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

2-클래스 학습의 경우, 비용 행렬을 지정하면 소프트웨어가 비용 행렬에 설명된 벌점을 통합하여 사전 확률을 업데이트합니다.

자세한 내용은 알고리즘을 참조하십시오.

데이터형: single | double

이 속성은 읽기 전용입니다.

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

데이터형: char

이 속성은 읽기 전용입니다.

ClassificationSVM 모델 피팅에 사용되는 원래 데이터 X의 행으로, 논리형 벡터로 지정됩니다. 모든 행이 사용되는 경우 이 속성은 비어 있습니다.

데이터형: logical

점수 변환 방식으로, 문자형 벡터 또는 함수 핸들로 지정됩니다. ScoreTransform은 내장 변환 함수 또는 예측된 분류 점수를 변환하는 데 사용하는 함수 핸들을 나타냅니다.

예를 들어, 점수 변환 함수를 function으로 변경하려면 점 표기법을 사용하십시오.

  • 내장 함수의 경우 문자형 벡터를 입력합니다.

    Mdl.ScoreTransform = 'function';

    다음 표에는 사용 가능한 내장 함수에 대한 설명이 나와 있습니다.

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

  • MATLAB 함수나 사용자가 직접 정의하는 함수의 경우, 이에 대한 함수 핸들을 입력하십시오.

    Mdl.ScoreTransform = @function;

    function은 행렬(원래 점수)을 받아 동일한 크기의 행렬(변환된 점수)을 반환합니다.

데이터형: char | function_handle

이 속성은 읽기 전용입니다.

예측 변수 표준편차로, 숫자형 벡터로 지정됩니다.

fitcsvm을 사용하여 SVM 분류기를 훈련시킬 때 'Standardize',true를 지정하는 경우 Sigma의 길이는 예측 변수 개수와 같습니다.

MATLAB은 전체 가변수 인코딩을 사용하여 예측 변수 데이터에서 범주형 변수를 확장합니다. 즉, MATLAB은 각 범주형 변수의 각 수준마다 하나의 가변수를 생성합니다. Sigma는 가변수를 포함하여 각 예측 변수마다 하나의 값을 저장합니다. 그러나, MATLAB은 범주형 변수를 포함하는 열을 표준화하지 않습니다.

fitcsvm을 사용하여 SVM 분류기를 훈련시킬 때 'Standardize',false를 설정하는 경우 Sigma는 빈 벡터([])입니다.

데이터형: single | double

이 속성은 읽기 전용입니다.

SVM 분류기를 훈련시키는 데 사용되는 관측값 가중치로, nx1 숫자형 벡터로 지정됩니다. n은 관측값의 개수입니다(NumObservations 참조).

fitcsvm은 특정 클래스 내의 W 요소의 합이 해당 클래스의 사전 확률이 되도록 'Weights' 이름-값 쌍의 인수에 지정된 관측값 가중치를 정규화합니다.

데이터형: single | double

이 속성은 읽기 전용입니다.

SVM 분류기를 훈련시키는 데 사용되는 표준화되지 않은 예측 변수로, 숫자형 행렬 또는 테이블로 지정됩니다.

X의 각 행은 하나의 관측값에 대응되고, 각 열은 하나의 변수에 대응됩니다.

MATLAB은 하나 이상의 결측값을 포함하는 관측값을 제외시키고, Y에서 대응되는 요소를 제거합니다.

데이터형: single | double

이 속성은 읽기 전용입니다.

SVM 분류기를 훈련시키는 데 사용되는 클래스 레이블로, categorical형 배열이나 문자형 배열, 논리형 벡터나 숫자형 벡터, 또는 문자형 벡터로 구성된 셀형 배열로 지정됩니다. Yfitcsvm의 입력 인수 Y와 데이터형이 같습니다. (소프트웨어는 string형 배열을 문자형 벡터로 구성된 셀형 배열로 처리합니다.)

Y의 각 행은 이에 대응되는 X 행의 관측된 분류를 나타냅니다.

MATLAB은 결측값을 포함하는 요소를 제외시키고, X에서 대응되는 관측값을 제외합니다.

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

수렴 제어 속성

이 속성은 읽기 전용입니다.

수렴 정보로, 구조체형 배열로 지정됩니다.

필드설명
Converged알고리즘이 수렴되는지 여부를 나타내는 논리형 플래그(1은 수렴을 나타냄)
ReasonForConvergence소프트웨어가 수렴을 감지하는 데 사용하는 기준을 나타내는 문자형 벡터
Gap쌍대 문제 목적 함수와 원문제 목적 함수 간 스칼라 실현가능성 격차
GapTolerance스칼라 실현가능성 격차 허용오차. 예를 들어, fitcsvm의 이름-값 쌍의 인수 'GapTolerance',1e-2를 사용하여 이 허용오차를 1e-2로 설정할 수 있습니다.
DeltaGradient상한 이탈값과 하한 이탈값 간의 스칼라로 계산된 기울기 차이
DeltaGradientTolerance상한 이탈값과 하한 이탈값 간의 기울기 차이에 대한 스칼라 허용오차. 예를 들어, fitcsvm의 이름-값 쌍의 인수 'DeltaGradientTolerance',1e-2를 사용하여 이 허용오차를 1e-2로 설정할 수 있습니다.
LargestKKTViolation최대 스칼라 카루쉬-쿤-터커(KKT: Karush-Kuhn-Tucker) 위반 값
KKTTolerance최대 KKT 위반에 대한 스칼라 허용오차. 예를 들어, fitcsvm의 이름-값 쌍의 인수 'KKTTolerance',1e-3을 사용하여 이 허용오차를 1e-3으로 설정할 수 있습니다.
History

설정된 최적화 반복에서의 수렴 정보를 포함하는 구조체형 배열. 필드는 다음과 같습니다.

  • NumIterations: 소프트웨어가 수렴 정보를 기록하는 반복에 대한 인덱스로 구성된 숫자형 벡터

  • Gap: 반복에서의 Gap 값으로 구성된 숫자형 벡터

  • DeltaGradient: 반복에서의 DeltaGradient 값으로 구성된 숫자형 벡터

  • LargestKKTViolation: 반복에서의 LargestKKTViolation 값으로 구성된 숫자형 벡터

  • NumSupportVectors: 반복에서의 서포트 벡터 개수를 나타내는 숫자형 벡터

  • Objective: 반복에서의 Objective 값으로 구성된 숫자형 벡터

Objective쌍대 문제 목적 함수의 스칼라 값

데이터형: struct

이 속성은 읽기 전용입니다.

수렴을 달성하기 위해 최적화 루틴에 필요한 반복 횟수로, 양의 정수로 지정됩니다.

예를 들어, 반복 횟수 제한을 1000으로 설정하려면 fitcsvm을 사용하여 SVM 분류기를 훈련시킬 때 'IterationLimit',1000을 지정하십시오.

데이터형: double

이 속성은 읽기 전용입니다.

활성 세트 감소 간의 반복 횟수로, 음이 아닌 정수로 지정됩니다.

예를 들어, 축소 기간을 1000으로 설정하려면 fitcsvm을 사용하여 SVM 분류기를 훈련시킬 때 'ShrinkagePeriod',1000을 지정하십시오.

데이터형: single | double

초모수 최적화 속성

이 속성은 읽기 전용입니다.

초모수에 대한 교차 검증 최적화와 관련된 설명으로, BayesianOptimization 객체 또는 초모수 및 관련 값으로 구성된 테이블로 지정됩니다. fitcsvm'OptimizeHyperparameters' 이름-값 쌍의 인수가 생성 시 비어 있지 않은 경우, 이 속성은 비어 있지 않습니다. HyperparameterOptimizationResults의 값은 생성 시 fitcsvmHyperparameterOptimizationOptions 구조체 내 Optimizer 필드의 설정에 따라 결정됩니다(다음 표의 설명 참조).

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

객체 함수

compactReduce size of support vector machine (SVM) classifier
compareHoldoutCompare accuracies of two classification models using new data
crossvalCross-validate support vector machine (SVM) classifier
discardSupportVectorsDiscard support vectors for linear support vector machine (SVM) classifier
edgeFind classification edge for support vector machine (SVM) classifier
fitPosteriorFit posterior probabilities for support vector machine (SVM) classifier
lossFind classification error for support vector machine (SVM) classifier
marginFind classification margins for support vector machine (SVM) classifier
predict서포트 벡터 머신(SVM) 분류기를 사용하여 관측값 분류
resubEdgeFind classification edge for support vector machine (SVM) classifier by resubstitution
resubLossFind classification loss for support vector machine (SVM) classifier by resubstitution
resubMarginFind classification margins for support vector machine (SVM) classifier by resubstitution
resubPredictClassify observations in support vector machine (SVM) classifier
resumeResume training support vector machine (SVM) classifier

예제

모두 축소

피셔(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'


  Properties, Methods

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

classOrder = SVMModel.ClassNames
classOrder = 2x1 cell array
    {'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

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

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

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

load ionosphere

SVM 분류기를 훈련시키고 교차 검증합니다. 예측 변수 데이터를 표준화하고 클래스의 순서를 지정합니다.

rng(1);  % For reproducibility
CVSVMModel = fitcsvm(X,Y,'Standardize',true,...
    'ClassNames',{'b','g'},'CrossVal','on')
CVSVMModel = 
  classreg.learning.partition.ClassificationPartitionedModel
    CrossValidatedModel: 'SVM'
         PredictorNames: {1x34 cell}
           ResponseName: 'Y'
        NumObservations: 351
                  KFold: 10
              Partition: [1x1 cvpartition]
             ClassNames: {'b'  'g'}
         ScoreTransform: 'none'


  Properties, Methods

CVSVMModelClassificationPartitionedModel의 교차 검증된 SVM 분류기입니다. 기본적으로 소프트웨어는 10겹 교차 검증을 구현합니다.

또는, 훈련된 ClassificationSVM 분류기를 crossval로 전달하여 교차 검증할 수 있습니다.

점 표기법을 사용하여 훈련된 겹 중 하나를 검사합니다.

CVSVMModel.Trained{1}
ans = 
  classreg.learning.classif.CompactClassificationSVM
             ResponseName: 'Y'
    CategoricalPredictors: []
               ClassNames: {'b'  'g'}
           ScoreTransform: 'none'
                    Alpha: [78x1 double]
                     Bias: -0.2209
         KernelParameters: [1x1 struct]
                       Mu: [1x34 double]
                    Sigma: [1x34 double]
           SupportVectors: [78x34 double]
      SupportVectorLabels: [78x1 double]


  Properties, Methods

각각의 겹은 데이터의 90%에 대해 훈련된 CompactClassificationSVM 분류기입니다.

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

genError = kfoldLoss(CVSVMModel)
genError = 0.1168

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

세부 정보

모두 확장

알고리즘

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

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

  • fitcsvm은 가중치 또는 사전 확률이 0인 관측값을 제거합니다.

  • 2-클래스 학습의 경우, 비용 행렬 C(Cost 참조)를 지정하면 소프트웨어가 C에 설명되어 있는 벌점을 적용하는 방식으로 클래스 사전 확률 p(Prior 참조)를 pc로 업데이트합니다.

    구체적으로, fitcsvm은 다음 단계를 완료합니다.

    1. pc=pC.를 계산합니다.

    2. 업데이트된 사전 확률의 합이 1이 되도록 pc*를 정규화합니다.

      pc=1j=1Kpc,jpc.

      K는 클래스 개수입니다.

    3. 비용 행렬을 다음과 같이 디폴트 값으로 재설정합니다.

      C=[0110].

    4. 훈련 데이터에서 사전 확률이 0인 클래스에 대응되는 관측값을 제거합니다.

  • 2-클래스 학습의 경우, fitcsvm은 모든 관측값 가중치(Weights 참조)의 합이 1이 되도록 정규화합니다. 그런 다음, 정규화된 가중치를 합이 관측값이 속하는 클래스의 업데이트된 사전 확률이 되도록 다시 정규화합니다. 즉, k 클래스의 관측값 j에 대한 총 가중치는 다음과 같습니다.

    wj=wjjClass kwjpc,k.

    wj는 관측값 j에 대한 정규화된 가중치이고, pc,k는 k 클래스의 업데이트된 사전 확률입니다(앞에 나와 있는 글머리 기호 항목 참조).

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

    Cj=nC0wj.

    n은 훈련 표본 크기이고, C0은 초기 상자 제약 조건이며('BoxConstraint' 이름-값 쌍의 인수 참조), wj는 관측값 j의 총 가중치입니다(앞에 나와 있는 글머리 기호 목록 참조).

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

    xj=xjμjσj.

    μj=1kwkkwkxjk.

    xjk는 예측 변수 j(열)의 관측값 k(행)입니다.

    (σj)2=v1v12v2kwk(xjkμj)2.

    v1=jwj.

    v2=j(wj)2.

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

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

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

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

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

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

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

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

    • 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ν.

참고 문헌

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

[2] 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.

[3] 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.

[4] 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에 개발됨