데이터분석/데이터 분류 및 군집화

서포트 벡터 머신(SVM)을 활용한 분류모형

상선약수64 2023. 11. 24. 15:30
반응형

Support Vector Machine(SVM)은 머신러닝 분야에서 가장 인기가 높은 데이터 분류 방법으로 알려져 있다. SVM은 두 데이터 그룹을 나누는 평면 중에서 폭이 가장 넗은 것을 찾는 방법으로 분리평면을 "결정 경계"라고 합니다.

결정경계와 서포트 벡터 사이의 거리를 magrin이라고 하고, Hard margin과 Soft Margin이 있습니다.

  • 하드 마진(Hard margin) : 어떠한 데이터도 마진내에 들어오지 않는데, 엄격하게 지켜져야 하는 마진을 하드마진이라 부름
  • 소프트(Soft margin) :  분리 평면을 찾을 수 있도록 일부 데이터가 마진 내에 들어오도록 허용하는 것 임

아래의 그림은 데이터A와 데이터B는 소프트 마진에 관한 그림입니다.

 

출처 :  으뜸 데이터 분석과 머신러닝, 생능출판사, 박동규, 강영민 저

 

 

  • 마진은 점이 닿기 전까지의 선형 분류기의 width로서 마진을 최대로 만들어 주는 것이 좋은 분류입니다. 즉 d(x)를 최대로 해주는 것입니다.  그리고 Support Vectors는 마진과 닿은 점들 입니다.

 

붓꽃 데이터 셑을 이용한 SVM 모형 실습

  • 붓꽃데이터 셑을 불러옵니다.
#사용할 데이터 셑을 가져옴
import pandas as pd
from sklearn import datasets
from sklearn.model_selection import train_test_split
iris = datasets.load_iris() #iris 데이터를 불러옴
print(iris.DESCR)
  •  학습 70%과 검증 30%로 데이터를 나눕니다.
# iris 데이터 셑을 학습용과 검증용 데이터 셑으로 나눔
X, y = iris.data, iris.target
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=2222)

 

  • StandardScaler로 표준화를 진행합니다.
from sklearn.svm import SVC
from sklearn.preprocessing import StandardScaler

# 정규화 스케일링을 합니다.
scaler = StandardScaler()
scaler.fit(X)
X = scaler.transform(X)

 

  • SVM 모델을 생성합니다. SVC 인자 목록입니다.
    • kernel : 커널 함수 종류를 지정, 'linear', 'poly', 'rbf', 'sigmoid', 'precomputed' 중에서 지정 가능하며, 기본 값은 'rbf'로 설정
    • degree : kernel이 'poly'일 때만 유효함. 커널 함수를 몇차 함수로 지정할지를 결정
    • random_state : 다른 머신러닝 모델과 마찬가지로 seed를 지정하여 실행시마다 결과를 고정하는 역할
    • gamma : 'scale'과 'auto' 중에서 지정. 커널 함수가 'rbf', 'poly', 'sigmoid' 인 경우에 유효
    • C : regularization의 정도를 지정. 클수록 L2 panelty가 증가하고, 기본 값은 1.0으로 설정 됨.
# SVM 모델 생성
svc = SVC(kernel='poly', C = 3, degree = 3)
svc.fit(X_train, y_train)

 

  • SVM 성능 평가

성능평가를 한 결과 정확도는 98%입니다. 

from sklearn import metrics
y_pred = svc.predict(X_test) # 예측 라벨
print(metrics.classification_report(y_test, y_pred))