반응형
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))
|
'데이터분석 > 데이터 분류 및 군집화' 카테고리의 다른 글
Pipeline(파이프 라인)의 개념과 활용하기 (1) | 2023.11.25 |
---|---|
Random Forest와 XGBoost(eXtreme Gradient Boosting) (0) | 2023.11.15 |
앙상블(Ensemble)의 기본개념 및 Bagging 예제 (0) | 2023.11.15 |
의사결정나무를 이용한 분류모형 (0) | 2023.10.25 |
분류모형의 성능평가 (0) | 2023.10.22 |