Data Scientist/Machine Learning
[ML] 서포트 벡터 머신 SVM
아리멤모장
2021. 4. 14. 17:48
- 지도학습
- 분류를 위한 기준선(결정경계- Decision Boundary)을 정의하는 모델
- 결정경계는 데이터군에서 최대한 멀리 떨어지는 게 좋음.
- 매우 빠르다.
- SVM은 허용가능한 오류 범위 내에서 가능한 최대 마진을 만들려고 함.
위 그림을 보면 실선은 결정경계, 마진은 그 실선으로부터 두 점선이다. 최적의 결정경계는 마진을 최대화하는 것이다. 마진을 최대화하는 과정에서 이상치(outlier)를 잘 다루는 것이 중요하다. 그러기 위해서는 마진의 기준을 잘 세워야한다.
- 마진(margin): 결정경계와 서포트 벡터 사이의 거리
- 하드 마진: 기준이 까다롭고 마진이 너무 작다. 다 놓치지 않겠어! -> 오버피팅 발생가능
- 소프트 마진: 마진이 크고 너그럽다. 대충대충 -> 언더피팅 발생 가능
간단한 코딩 예제)
1. 함수 및 모델 라이브러리 불러오기
import numpy as np
import matplotlib.pyplot as plt
from sklearn import svm, datasets
2. 파이썬에 내재되어 있는 iris 데이터 불러오기
iris=datasets.load_iris()
X=iris.data[:,:2]
y=iris.target
C=1
clf=svm.SVC(kernel='linear',C=C)
clf.fit(X,y)
- 여기서 파라미터 C는 SVM모델이 오류를 어느정도 허용할 것인지 알 수 있다. 기본 값은 1이고, C값이 클수록 하드마진, 작을수록 소프트마진이다. 이건 데이터에 따라 여러 C값을 넣어보면서 모델을 검증해야한다.
- kernel은 'linear' 즉 선형으로 결정경계 선을 긋는 것으로 선택했다.
- 아래는 데이터가 어떻게 생겼는지 대략적으로 보기 위해 넣었습니다. - 붓꽃데이터는 3가지의 품종으로 클래스를 분류하는 문제임
'target_names': array(['setosa', 'versicolor', 'virginica'], dtype='<U10') # 붓꽃 종
'feature_names': ['sepal length (cm)', 'sepal width (cm)', 'petal length (cm)', 'petal width (cm)']
'data': array([[5.1, 3.5, 1.4, 0.2],
[4.9, 3. , 1.4, 0.2],
[4.7, 3.2, 1.3, 0.2],
[4.6, 3.1, 1.5, 0.2],
[5. , 3.6, 1.4, 0.2],
....])
3. 오차행렬 만들기
from sklearn.metrics import confusion_matrix
y_pred=clf.predict(X)
confusion_matrix(y,y_pred)
- confusion metrix(오차행렬): training을 통한 prediction 성능을 측정하기 위해 예측 value와 실제 value를 비교하기 위한 표
4. 시각화 하기
커널 서포트 벡터 머신 — 데이터 사이언스 스쿨
커널 사용의 장점 커널을 사용하면 베이시스 함수를 하나씩 정의하는 수고를 덜 수 있을뿐더러 변환과 내적에 들어가는 계산량이 줄어든다. 예를 들어, 다음과 같은 기저함수의 경우 \[ \phi(x_i) =
datascienceschool.net