본문 바로가기
Machine Learning

Support Vector Machine, SVM

by Nowkeeh Ahc

 서포트 벡터 머신 (Support Vector Machine, SVM)은 클래스(범주)를 가장 효율적으로 분류할 수 있는 초평면 (Hyperplane) 또는 결정 경계 (Decision Boundary)를 찾는 모형이다. 예를 들어, 아래 그림과 같이 두 클래스를 분류하는 3가지 선형 결정 경계를 만든다고 가정해보자. 1번의 경우 클래스를 제대로 분류하지 못했고, 3번의 경우 두 클래스를 제대로 분류했지만, 결정 경계선과 관측 데이터가 매우 가깝기 때문에 추후 새로운 데이터를 분류하려 할 경우 잘못 분류될 가능성이 크다. 한편, 2번 결정 경계는 두 클래스를 제대로 분류했을 뿐만 아니라, 결정 경계선과 두 클래스의 최근접 관측치 사이의 거리가 큰 폭으로 떨어져 있기 때문에 추후 새로운 데이터에 대한 분류에 대해서도 비교적 안정적인 성능을 발휘할 수 있을 것이다. 2번과 같은 최적의 결정 경계를 초평면 (Hyperplane)이라고 하며, SVM은 결국 범주를 효과적으로 분류할 수 있는 초평면을 찾는 모형이다. 

[그림 1] 결정 경계의 유형

 

 SVM은 각 클래스의 최외각에 위치한 관측치인 서포트 벡터 (Support Vector)를 토대로 초평면을 설정한다. 아래 그림에서 각 클래스의 최외각에 위치한 서포트 벡터들을 연결하는 두 개의 평행선을 그었을 때 이 두 개의 평행선 중앙에 놓인 가상의 선이 초평면에 해당한다. 이 초평면과 각 클래스의 서포트 벡터간의 거리를 마진 (Margin)이라고 한다. 한편, 두 클래스를 구분하는 마진 사이에 오류를 허용하지 않는 SVM을 하드마진 SVM (Hard Margin SVM)이라 하고, 마진 사이에 어느 정도의 오류를 허용하는 SVM을 소프트마진 SVM (Soft Margin SVM)이라고 한다.

 

[그림 2] SVM 모형의 개념적 표현

 

 

 SVM은 분류 및 수치 예측 문제뿐 아니라 이상치를 탐색하는 목적에도 사용되는 다목적 알고리즘이다. SVM은 학습용 데이터 세트의 일부분만 가지고 모형을 만들 수 있기 때문에 메모리가 절약되는 장점도 있는 반면, 분류가 수행된 결과에 대해 확률적 해석을 하기 어렵다는 단점도 있다. SVM의 장단점을 정리하면 다음과 같다.

 [표 1] SVM의 장단점

장점 비교적 적은 수의 서포트 벡터에 의존하여 메모리가 절약된다.
고차원 데이터에서도 잘 작동한다.
여러 유형의 데이터에 적응시킬 수 있어 다양한 용도로 사용이 가능하다.
단점 결과에 대해 직접적으로 확률적 해석을 할 수 없어 설명력이 떨어진다.
모형 구축 시간이 비교적 오래 걸린다.
최적 SVM 모형을 만들기 위해 커널 (Kernel)과 인자 설정을 반복적으로 해야하는 경우가 많다. 

 

 

 SVM은 분류 예측에서도 분류 유형에 따라 선형 분류와 비선형 분류로 구분할 수 있다. 이번에는 이러한 선형 SVM과 비선형 SVM 모형의 이론을 다루고, 수치 예측 문제에 사용하는 SVR (Support Vector Regression) 모형의 개념을 포스팅 하고자 한다.

 

[1] 선형 SVM

 선형 SVM (Linear SVM)은 클래스를 분리하는 직선의 초평면을 찾는 모형으로서 마진의 오류를 허용하느냐에 따라 하드마진 SVM과 소프트마진 SVM으로 구분한다. 여기에서 마진 오류 (Margin Violation)란 다른 클래스를 가진 데이터가 마진 영역 사이에 있거나 초평면의 반대쪽에 있는 경우를 말한다. 하드마진 SVM (Hard Margin SVM)은 이러한 마진 오류를 허용하지 않는 SVM이고, 소프트마진 SVM (Soft Margin SVM)은 마진 오류를 허용하는 SVM이다. Scikit-Learn의 SVM( ) 함수는 소프트마진 SVM을 기반으로 구현되어 있고, 인자 C (Cost)를 통해 마진 오류의 범위를 결정한다. 아래 그림은 인자 C의 수준에 따라 변화되는 SVM 모형의 개념을 표현한 것이다. 

[그림 3] 인자 C에 따른 모형 차이

 왼쪽 그림은 인자 C를 낮게 설정했을 경우인데, 이때는 비록 데이터를 잘못 분류하는 경우가 생기지만 조금 더 여유로운 마진을 갖는 일반화된 초평면을 설정한다. 한편, 오른쪽 그림과 같이 인자 C를 높게 설정했을 때는 주어진 데이터에 대해 완벽하게 분류가 되었지만, 마진 폭이 작아 과잉적합의 우려가 존재한다. 즉, 인자 C는 얼마나 많은 데이터 샘플이 다른 클래스에 놓이는 것(마진 오류)을 허용하는지를 결정한다.

 

[2] 비선형 SVM

 상기 예시와 같이 선형 초평면으로 클래스의 분리가 효과적이지 못할 경우 비선형 SVM 모형을 사용해야 한다. 가령, 아래 그림의 경우는 선형 SVM 모형으로는 효과적인 분류를 하기 어렵다. 

[그림 4] 비선형 분류 문제의 예시

 이러한 경우에 사용하는 SVM 모형을 비선형 SVM이라 하는데, 비선형 SVM의 원리는 비선형곡선을 직접 데이터에 적용하는 것이 아니라, 커널 (Kernel)이라는 특수 함수를 사용하여 데이터를 고차원의 특정 공간으로 재배치시켜 선형 초평면을 사용할 수 있도록 해주는 것이다.

 

(1) 커널 기법

 커널 기법이란 커널 함수를 이용하여 주어진 데이터를 고차원 공간으로 변환하여 선형 분류 혹은 수치 예측을 가능하게 해주는 방법이다. 즉, 커널 기법을 적용한다는 것은 벡터 간의 내적을 커널 함수로 대체한다는 의미이다. 

[그림 5] 커널의 개념

 상기 그림과 같이 기존의 차원에서는 불가능했던 선형 분류가 커널 함수를 통해 데이터를 3차원의 공간으로 재배치시키면 새로운 초평면을 발견할 수 있고, 이는 다시 아래 그림과 같이 원래의 2차원 공간상에서 비선형적인 결정 경계로 분류를 수행한 것과 동일한 효과를 얻게 되는 것이다. 

[그림 6] 커널 기법을 통한 분류 결과

 

(2) 커널 함수의 종류

 SVM에서 사용하는 커널 함수는 선형 커널, 다항식 커널, 시그모이드 커널, 가우시안 커널, 쌍곡탄젠트 커널 등 매우 다양한 커널 함수가 존재한다. 본서에서는 비선형 SVM에서 자주 사용하는 다항식 커널과 가우시안 RBF 커널을 중심으로 소개하고자 한다. 

 

1) 다항식 커널

 다항식 커널 (Polynomial Kernel)은 입력변수들의 가능한 모든 조합, 즉 벡터의 내적을 지정된 차수까지 계산하는 커널이다. 다항식 커널의 일반적인 모형은 다음과 같다.

 다항식 커널에서는 계수 (Coefficient), 비용 (Cost), 그리고 차원 수 (Dimension)를 인자로 지정해줄 수 있다. 비용 인자(C)는 앞서 선형 SVM에서 설명한 인자 C와 같은 의미이며, 차원 수(d) 역시 인자 C와 유사한 역할을 한다. 즉, 차원이 높을수록 모형의 복잡도가 증가하면서 주어진 학습 데이터를 엄격하게 분리하려는 특성이 발생하므로 과잉적합 될 가능성이 커지고, 반대로 차원이 낮아질수록 모형이 단순해져 과소적합 될 가능성이 커진다. 한편, 다항식 커널의 계수는 모형이 높은 차수와 낮은 차수에 대해 얼마나 많은 영향을 받을 것인지를 결정하는 값으로서 기본적으로 0을 갖는다. 

 

2) 가우시안 커널

 가우시안 커널 (Gaussian Kernel)은 성능이 우수해 가장 자주 활용되는 커널 기법으로서 RBF (Radial Basis Function) 커널이라고도 부른다. 가우시안 커널은 데이터를 무한한 다항식 차원으로 재포지셔닝할 수 있는 방법으로서 일반적인 모형은 다음과 같다.  

 이 모형은 결국 두 개의 데이터 xixj의 거리를 가우시안 커널에 의해 표현한 것인데, 여기에서 (Gamma)는 하나의 데이터 샘플이 영향력을 행사하는 거리를 결정하는 매우 중요한 인자다. 가 클수록 데이터 포인트들이 영향력을 행사하는 거리가 짧아지고 가 작을수록 데이터 포인트들이 영향력을 행사하는 거리가 멀어진다. 다음 그래프는 SVM( ) 함수의 비용 인자 C값은 1로 동일한 상태에서 의 값을 0.1부터 10까지 변화를 준 것을 표현한 것이다. 

[그림 7] RBF 커널의 영향

가 작을 때는 초평면 인근의 데이터의 영향력이 크기 때문에 두 클래스를 구분하는 결정 경계가 둔탁하지만, 가 점점 증가하면서, 데이터들의 영향력이 미치는 거리가 짧아져 결정 경계가 점차 민감하게 움직일 수 있다는 것을 알 수 있다. 즉, 값은 결정 경계(초평면)의 곡률을 조정해주는 역할을 하게 된다. 따라서, 인자 C와 마찬가지로 가 너무 작으면 과소적합 될 가능성이 생기고, 너무 크면 과잉적합의 위험이 존재한다. 

 

[3] 회귀 SVM 

 수치 예측(회귀)에 적용할 수 있는 SVM 모형을 SVR (Support Vector Regression)이라고 하며, 서포트 벡터와 초평면을 도출하는 방식은 유사하지만 클래스를 결과값으로 출력하는 것이 아니라, 연속적인 수치의 값을 출력하는 SVM 모형이다. SVR에서는 SVM에서의 인자 C와 유사한 무감도 손실함수 (Insensitive Loss Function)인 (Epsilon)을 사용하여 마진폭 내에 포함될 수 있는 샘플의 양을 결정함으로써 최적의 초평면을 도출한다. 수치 예측을 함에 있어서 선형 회귀모형에서는 추정된 회귀선에 의한 오차를 최대한 줄이는 방향으로 최적 회귀선을 도출하는 반면, SVR에서는 적절한 값으로 초평면과 +, - 마진폭에서 가능한 많은 샘플을 포함할 수 있는 예측선(초평면)을 도출하려 한다. 은 Scikit-Learn 라이브러리에서 SVR( ) 함수의 인자 ‘epsilon’으로 조절할 수 있다. 

[그림 8] SVR에서의 의 영향 

위 그림을 보면 이 작을수록 마진의 폭이 작아지며, 이 커질수록 마진의 폭이 증가하여 더 많은 데이터들을 포함하게 된다. SVR에서는 클래스를 분류하는 목적이 아니라 초평면을 중심으로 +, - 마진폭 내에 많은 샘플을 포함하여 그 범위 내에서 새로운 데이터의 수치를 예측하는 것이므로 오른쪽 그림이 더 좋은 SVR 모형이라고 할 수 있다. 한편, SVR 역시 기본 커널 함수로 RBF 커널을 사용하며, 인자 gamma로 커널 계수를 조정할 수 있다.

 

그동안은 분류 예측을 주로 했으니 이번 SVM으로는 수치 예측 실습을 하고자 한다.

 

연습

 

1) 변수 지정 및 전처리

SVR 모형에 이용할 독립변수와 종속변수를 지정하고 모형 학습 및 평가를 위한 데이터 분할, 표준화 및 원핫인코딩 등의 전처리 과정을 거친다.

#1. 모듈 및 함수 불러오기
import numpy as np

#2. 변수 지정 및 종속변수 로그 변환
X =df[['변수1', '변수2', '변수3', '변수4', '변수5', '변수6']]
Y = np.log1p(df['종속변수'])

#3. 데이터 분할(학습용/평가용 데이터 세트)
X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=0.3, random_state=0)

#4. 표준화 및 원핫인코딩
ct = ColumnTransformer([(‘scaling’, StandardScaler(), ['변수1', '변수2', '변수3', '변수4']), (‘onehot’, OneHotEncoder(sparse = False),['변수5', '변수6'])])
ct.fit(X_train)
X_train=ct.transform(X_train)
X_test=ct.transform(X_test)

 

2) 모형 학습 및 예측

#1. 모듈 및 함수 불러오기
from sklearn.svm import SVR

#2. 모형 생성
model = SVR(C = 10, gamma =0.01, epsilon = 0.1)

#3. 모형 학습 및 예측 
model.fit(X_train, Y_train)
Y_pred = model.predict(X_test)
print('평가용 데이터 세트에 대한 예측값\n', Y_pred)

▶ SVR( ) 함수와 SVC( ) 함수의 인자는 거의 동일하다. 본 실습에서 오류의 범위를 정하는 인자 C의 값을 10으로 지정하고, RBF( ) 함수의 커널 계수를 뜻하는 gamma를 0.01로 지정하였다. 그리고 SVR에서만 사용하는 인자 epsilon은 0.1로 설정하였다. 

SVR( ) 함수에 대한 자세한 설명은 아래 URL에서 확인할 수 있다.

https://scikit-learn.org/stable/modules/generated/sklearn.svm.SVR.html 

 

3) 모형 평가

생략

 


 

This post was written based on what I read and studied the book below.

http://www.kyobobook.co.kr/product/detailViewKor.laf?mallGb=KOR&ejkGb=KOR&barcode=9791195511747

댓글