Support Vector Machine (SVM)

Support Vector Machine (SVM)이란?

Support Vector Machine (SVM)은 한 클래스의 데이터 점을 다른 클래스의 데이터 점으로부터 가장 잘 분리하는 초평면을 찾는 지도 머신러닝 알고리즘입니다.

Support Vector Machine (SVM)의 작동 방식

Support Vector Machine (SVM)은 신호 처리, NLP(자연어 처리), 음성 및 영상 인식과 같은 응용 분야의 분류 문제와 회귀 문제에 자주 사용되는 지도 머신러닝 알고리즘입니다. SVM 알고리즘의 목표는 한 클래스의 데이터 점을 다른 클래스의 데이터 점으로부터 가능한 한 가장 잘 구분해내는 초평면을 찾는 것입니다. 이 초평면은 2차원 공간에서는 선이 될 수 있고 n차원 공간에서는 평면이 될 수 있습니다. 여기서 n은 데이터셋의 각 관측값에 대한 특징의 수입니다. 데이터에서 클래스를 분리하는 초평면은 여러 개가 존재할 수 있습니다. SVM 알고리즘에 의해 파생되는 최적의 초평면은 두 클래스 간의 마진을 최대화하는 초평면입니다.

마진은 내부에 데이터 점이 없는 초평면에 평행인 슬래브의 최대 너비입니다. 이 평행 슬래브의 경계를 표시하며 분리 초평면에 가장 가까운 데이터 점들이 서포트 벡터입니다. 서포트 벡터는 분리 초평면의 위치를 식별하는 훈련 관측값 중 일부를 가리킵니다.

Support Vector Machine (SVM)이 식별한 초평면을 보여주는 그림으로, 서포트 벡터, 마진 및 두 클래스로 분리된 데이터 점들이 함께 보입니다.

SVM 알고리즘을 사용해 플러스와 마이너스로 표현되는 두 클래스를 초평면으로 분리하여 이들 사이의 마진 폭을 최대화할 수 있습니다.

SVM 모델링의 워크플로

Support Vector Machine (SVM) 모델을 구축하는 통상적인 워크플로에는 다음과 같은 단계가 포함됩니다.

데이터 전처리

원시 데이터로 SVM 모델을 훈련시키면 누락값과 이상값, 정보 중복성으로 인해 정확도가 낮은 결과가 나올 때가 많습니다. 데이터 정리를 수행하면 누락값 또는 이상값을 처리하고, 특징 추출을 수행하면 데이터에서 올바른 특징 세트를 선택할 수 있습니다.

특징 추출은 원본 데이터셋의 정보를 유지하면서 원시 데이터를 처리 가능한 숫자형 특징으로 변환합니다. PCA(주성분 분석)와 같은 차원 축소 기법은 가장 중요한 정보를 유지하면서 특징의 수를 줄입니다. 이 접근법을 통해 Support Vector Machine (SVM) 모델이 강인해지며 복잡한 데이터셋을 처리할 수 있습니다.

데이터를 처리한 후에는 데이터를 훈련 세트와 테스트 세트로 나눕니다. 교차 검증을 사용하여 데이터를 최적으로 분할할 수 있습니다. SVM 모델은 훈련 데이터셋으로 훈련되며, 테스트 데이터셋은 처음 보는 데이터에 대한 모델의 성능을 평가하는 데 사용됩니다.

커널 선택

데이터 분포를 기준으로 적절한 커널 함수(선형, 다항식, RBF 등)를 선택합니다. 선형 분리가 불가능한 경우, 커널 함수는 데이터를 더 높은 차원 공간으로 변환하여 클래스를 더 쉽게 분리할 수 있게 합니다.

SVM에 적합한 커널 선택하기

SVM의 종류 머서 커널 설명
가우스 또는 RBF(방사형 기저 함수) \( K({x_1},{x_2})=exp(−‖{x_1}−{x_2}‖^2/2{σ^2}) \) 단일 클래스 학습. \( σ \)는 커널의 너비입니다.
선형 \( K({x_1},{x_2})={x_1}T{x_2} \) 2-클래스 학습.
다항식 \( K({x_1},{x_2})=({x_1}T{x_2}+1)ρ \) \( ρ \)는 다항식의 차수입니다.
시그모이드 \( K({x_1},{x_2})=tanh({β_0}{x_1}T{x_2}+{β_1}) \) 특정 \( β_0 \) 및 \( β_1 \) 값의 경우에만 머서 커널이 됩니다.

SVM 모델 훈련

훈련 데이터셋을 사용해 SVM 모델을 구축하고 훈련시킬 수 있습니다. Support Vector Machine (SVM)을 훈련시키는 것은 클래스 간 마진을 최대화하는 초평면에 피팅되도록 2차 최적화 문제를 푸는 것에 상응합니다. Support Vector Machine (SVM) 알고리즘은 서포트 벡터를 식별하고 최적의 초평면을 파악할 수 있습니다. 이 최적의 초평면을 기준으로, 훈련된 모델을 사용해 처음 보는 새로운 데이터 점을 분류할 수 있습니다.

SVM 모델 평가

테스트 데이터셋을 사용해 모델을 테스트할 수 있습니다. 정확도, 혼동행렬, 정밀도, F1 점수 또는 재현율 등의 메트릭을 사용해 모델 성능을 평가할 수 있습니다.

하이퍼파라미터 조정

하이퍼파라미터를 조정해 모델 성능을 개선할 수 있습니다. 확률 모델을 사용하는 베이즈 최적화 같은 검색 기법을 사용해 최적의 하이퍼파라미터를 찾을 수 있습니다.

SVM 분류기의 유형

선형 Support Vector Machine (SVM)

선형 SVM은 정확히 두 클래스로 선형적으로 분리할 수 있는 데이터에 사용됩니다. 이 유형의 Support Vector Machine (SVM) 알고리즘은 선형 결정 경계를 사용해 두 클래스의 모든 데이터 점을 분리합니다.

SVM 알고리즘은 선형적으로 분리할 수 있는 문제에 대해서만 이러한 초평면을 찾을 수 있습니다. 데이터를 분리할 수 없는 대부분의 복잡한 작업의 경우, Support Vector Machine (SVM)은 소프트 마진을 사용하는데, 이는 모든 데이터 점을 분리하지는 않더라도 많은 데이터 점을 분리하는 초평면을 의미합니다. 이 알고리즘은 소프트 마진을 최대화하여 적은 수의 오분류를 허용합니다.

1개의 오분류를 허용하여 클래스를 분리할 수 있는 소프트 마진이 포함된 Support Vector Machine (SVM)을 보여주는 MATLAB 플롯.

소프트 마진 SVM은 클래스 -1(파란색)에서 데이터 점 1개의 오분류를 허용합니다. (MATLAB 문서 보기.)

비선형 Support Vector Machine (SVM)

SVM은 비선형 분류 및 회귀 작업에도 사용됩니다. 비선형적으로 분리할 수 있는 데이터에 대해 비선형 Support Vector Machine (SVM)은 커널 함수를 사용해 특징을 변환합니다. 변환된 특징의 개수는 서포트 벡터의 개수에 따라 정해집니다.

커널 함수는 데이터를 다른 공간으로 매핑하는데 종종 고차원 공간으로 매핑하곤 합니다. 이러한 변환은 복잡한 비선형 결정 경계를 매핑된 고차원 특징 공간에 있는 선형 경계로 간소화하여 클래스를 더 쉽게 분리할 수 있도록 합니다. 흔히 커널 트릭이라고 하는 이 과정에서는 계산 집약적인 데이터의 명시적인 변환 작업이 필요하지 않습니다. 비선형 데이터에 대한 커널 함수로는 다항식, 방사형 기저 함수(가우스), 다층 퍼셉트론 또는 시그모이드(신경망) 등이 있습니다.

데이터 점을 두 클래스로 분리하는 초평면이 있는 Support Vector Machine (SVM)을 보여주는 MATLAB 산점도 플롯.

MATLAB에서 가우스 커널 함수로 훈련된 비선형 SVM 분류기. (코드 보기.)

서포트 벡터 회귀

SVM은 주로 분류 작업에 사용되지만, 회귀 작업에도 적용할 수 있습니다. SVM 회귀는 커널 함수를 활용하므로 비모수적 기법으로 간주됩니다. 응답(출력값) 변수와 예측(입력값) 변수 간의 관계가 알려진 선형 회귀와 달리, SVR(서포트 벡터 회귀)의 목표는 이러한 관계를 찾는 것입니다. SVR은 예측 오차를 최소한으로 유지하는 동시에 지정된 허용오차 마진(통상 '마진'이라고 함) 내에서 데이터에 가장 적합한 초평면을 식별하여 이를 수행합니다.

SVR은 이산 클래스 대신 연속 값을 예측하는 것을 목표로 한다는 점을 제외하고, SVR의 작동 원리는 Support Vector Machine (SVM) 분류기의 작동 원리와 동일합니다. SVR은 서로 다른 커널 유형을 사용해 선형 및 비선형 데이터를 처리할 수 있습니다. 커널 트릭을 사용하면 데이터를 고차원 공간으로 매핑하여 비선형 회귀를 수행할 수 있습니다.

Support Vector Machine (SVM)이 중요한 이유

SVM의 이점

SVM은 머신러닝인공 지능에서 가장 널리 사용되는 지도 학습 알고리즘으로, 고차원 데이터 및 복잡한 결정 경계를 효과적으로 처리할 수 있기 때문입니다. Support Vector Machine (SVM)의 주요 이점은 다음과 같습니다.

  • 데이터 다용성. SVM은 고차원 데이터셋과 비정형 데이터셋을 처리할 때 특히 효과적입니다. Support Vector Machine (SVM)은 선형 및 비선형 데이터에 다 사용할 수 있으므로, 많은 응용 사례에서 유용합니다.
  • 강인성. SVM은 훈련 데이터에 대한 낮은 오차율 실현과 가중치 노름 최소화 사이의 장단점을 절충하는 정규화 파라미터로 인해 특히 고차원 공간에서 과적합이 발생할 가능성이 낮습니다.
  • 해석 가능성. 선형 SVM 분류기에서 생성한 결정 경계는 명확하고 해석 가능하므로, 모델 예측을 이해하고 정보에 입각한 결정을 내리는 데 도움이 됩니다.
  • 정확도. SVM은 특히 차원 수가 표본 수를 초과하는 경우 작은 데이터셋에 대해 매우 정확하고 효과적입니다.

SVM 응용 사례

앞서 언급한 이점으로 인해 Support Vector Machine (SVM)은 광범위한 응용 사례에서 데이터 모델링에 매력적인 선택지가 됩니다.

  • 자연어 처리. SVM은 텍스트를 범주로 분류하여 스팸 감지 및 감성 분석 같은 NLP 작업에 폭넓게 사용됩니다.
  • 컴퓨터 비전. SVM은 손글씨 인식 및 얼굴 또는 객체 검출 같은 영상 분류 작업에 사용되며, 종양의 유무를 나타낼 수 있는 MRI 영상을 분류하는 의료 진단 툴로 사용됩니다.
  • 신호 처리. SVM은 이상 감지, 음성 인식 및 생체신호 분석 등의 작업을 위한 신호 데이터에도 적용됩니다.
  • 이상 감지. SVM을 이상 데이터에서 정상 데이터를 분리하는 초평면을 찾도록 훈련시킬 수 있습니다.
  • 생물정보학. SVM은 단백질 분류 및 유전자 발현 프로파일 분석을 위해 생물학 데이터 분류에 적용됩니다.
Ground truth 지도 및 SVM 분류 맵이 있는 초분광 RGB 영상.

SVM 분류기를 사용해 분류한 초분광 영상. (MATLAB 코드 보기.)

SVM의 단점

모든 머신러닝 모델과 마찬가지로, Support Vector Machine (SVM)에도 한계가 있습니다.

  • 대규모 데이터셋. SVM은 높은 계산 비용 및 메모리 요구사항으로 인해 대규모 데이터셋을 처리하는 데 적합하지 않습니다. 커널 트릭을 사용하면 Support Vector Machine (SVM)으로 비선형 데이터를 처리할 수 있지만, 계산하는 데 많은 비용이 듭니다. SVM은 2차 최적화 문제를 풀어야 합니다. 대규모 데이터셋의 경우, 커널 행렬도 규모가 커지며 메모리 요구사항이 증가하게 됩니다.
  • 잡음이 있는 데이터. SVM은 클래스 간의 마진을 최대화하는 것이 목표이므로 잡음이 있는 데이터에는 적합하지 않습니다.
  • 해석 가능성. 선형 SVM은 해석 가능하지만, 비선형 SVM은 그렇지 않습니다. 비선형 SVM에 수반되는 복잡한 변환은 결정 경계를 해석하기 어렵게 만듭니다.
x축에는 해석 가능성, y축에는 예측 검정력이 플로팅된 머신러닝 알고리즘들을 보여주는 그래프. SVM은 해석 가능성이 낮지만 예측 검정력이 높습니다.

널리 사용되는 머신러닝 알고리즘의 예측 검정력과 해석 가능성 비교.

MATLAB을 사용한 Support Vector Machine (SVM)

MATLAB®Statistics and Machine Learning Toolbox™를 사용해 분류 및 회귀에 SVM 모델로 훈련, 평가, 예측을 수행할 수 있습니다. 특징 선택 및 하이퍼파라미터 조정부터 교차 검증 및 성능 메트릭에 이르기까지, MATLAB은 효율적인 Support Vector Machine (SVM)을 구축하기 위한 툴을 제공합니다. MATLAB의 로우코드 머신러닝 앱을 사용하면 코드를 직접 작성하지 않고도 SVM을 대화형 방식으로 훈련 및 평가하고, C/C++ 코드를 생성하며, CPU 및 마이크로컨트롤러에 배포할 수 있습니다.

데이터 전처리

정확한 결과를 보장하려면 데이터에 이상값이 없어야 하며 모델 훈련에 사용할 준비가 되어 있어야 합니다. MATLAB을 사용하면 누락값 및 이상값 처리, 데이터 정규화, 데이터 평활화 같은 정리 작업을 수행할 수 있습니다. 데이터 전처리 라이브 편집기 작업 또는 데이터 정리기 앱을 사용하면 데이터를 대화형 방식으로 전처리할 수 있습니다. 이러한 앱을 통해 코드를 생성할 수도 있습니다.

MATLAB은 시계열 데이터, 텍스트, 영상, 오디오 등의 다양한 데이터 유형을 지원합니다. Audio Toolbox™Signal Processing Toolbox™ 같은 특화된 툴박스는 특징 추출 기능을 제공하여 사용자는 다양한 영역에서 두드러진 특징을 측정하고, 중간 계산을 재사용할 수 있습니다.

SVM 모델 훈련

fitcsvmfitrsvm 함수를 사용하여 이진 또는 다중클래스 분류 및 회귀 작업에 대해 SVM 모델을 훈련시킬 수 있습니다. 비선형 Support Vector Machine (SVM)의 경우, 여러 가지 커널 함수(예: 선형, 다항식, RBF)가 지원됩니다. 또는 사용자 지정 커널 함수(예: 시그모이드)를 생성하고 지정할 수 있습니다.

또한, 분류 학습기 앱회귀 학습기 앱을 사용하여 SVM 모델을 대화형 방식으로 훈련시킬 수 있습니다. 이러한 앱을 활용하면 코드를 작성하지 않고도 훈련에서 조정에 이르는 SVM 모델에 대한 전체 워크플로를 수행할 수 있습니다. 이러한 앱을 사용하면 데이터를 탐색하고, 특징을 선택하고, 자동화된 훈련을 수행하고, 하이퍼파라미터를 최적화하고, 결과를 평가할 수 있습니다.

선형 SVM 모델에 의해 모델링된 전리층 데이터 모델의 검증 혼동행렬로 여러 가지 SVM 모델의 검증 정확도를 보여주는 스크린샷.

분류 학습기 앱을 사용해 생성된 검증 혼동행렬. (MATLAB 코드 보기.)

이 앱은 C/C++ 코드를 생성할 수 있고 SVM 모델을 내보낼 수 있으므로, 사용자는 손쉽게 결과를 공유하고 앱 외부에서 이러한 결과를 추가로 살펴볼 수 있습니다. 예를 들어, 분류 학습기 앱 또는 회귀 학습기 앱에서 Support Vector Machine (SVM) 모델을 내보낸 후 이를 실험 관리자 앱으로 가져와서 훈련 데이터 변경, 하이퍼파라미터 검색 범위 조정, 사용자 지정 훈련 실험 실행 등의 추가 작업을 수행할 수 있습니다.

예측 수행

SVM 모델을 훈련시킨 후 예측 함수를 사용하여 레이블을 예측할 수 있습니다. ClassificationSVM Predict 또는 RegressionSVM Predict 블록을 사용하여 Simulink에서 훈련된 SVM 모델을 시뮬레이션할 수 있습니다.

결과 평가

confusionchartrocmetrics 같은 함수를 사용하여 프로그래밍 방식으로 또는 대화형 방식으로 SVM 모델의 성능을 평가할 수 있습니다. 머신러닝 앱을 사용하면 다양한 모델의 성능을 비교하여 데이터에 가장 적합한 모델을 찾을 수 있습니다.

분류 학습기 앱에서 분류기를 훈련시킨 후 정확도를 기준으로 모델을 비교하고, 클래스 예측을 플로팅하여 분류기 결과를 시각화하며, 혼동행렬, ROC 곡선 또는 정밀도-재현율 곡선을 사용하여 성능을 확인할 수 있습니다.

이와 마찬가지로 회귀 학습기 앱에서는 모델 메트릭을 기준으로 모델을 비교하고, 응답 플롯에서 또는 실제 응답 대비 예측 응답을 플로팅하여 회귀 결과를 시각화하며, 잔차 플롯을 사용하여 모델을 평가할 수 있습니다.

선 주위에 분산되어 있는 실제 응답 점과 함께 Support Vector Machine (SVM)의 예측 응답을 선으로 보여주는 플롯.

회귀 학습기 앱에서 훈련된 회귀 모델에 대한 예측 응답과 실제 응답을 보여주는 플롯. 점이 선에 더 가까울수록 예측이 향상됩니다. (MATLAB 코드 보기.)