본문 바로가기
  • 조금 느려도, 꾸준히
Artificial Intelligence/Machine Learning

핸즈온 머신러닝(6) - 서포트 벡터 머신 2

by chan 2020. 1. 27.
반응형

# SVM 회귀

기존 분류에 적용: 일정한 마진 오류 안에서 두 클래스 간의 도로 폭이 가능한 한 최대가 되도록 함

 

회귀에 적용: 제한된마진 오류 안에서 도로 안에 가능한 한 많은 샘플이 들어가도록 함

-> 도로의 폭은 하이퍼파라미터 $\varepsilon$ 으로 조절

* 허용오차의 하이퍼파라미터와 다름. SVR과 LinearSVR에서 허옹오차는 tol, 도로의 폭은 epsilon 매개변수로 지정

 

 

 

from sklearn.svm import LinearSVR


np.random.seed(42)
m = 50
X = 2 * np.random.rand(m, 1)
y = (4 + 3 * X + np.random.randn(m, 1)).ravel()

svm_reg = LinearSVR(epsilon=1.5, random_state=42) #epsilon 1.5, 0.5
svm_reg.fit(X,y)

 

 

위 그래프는 무작위로 생성한 선형 데이터셋에 사이킷런의 LinearSVR 모델을 사용하여 epsilon 매개변수를 각각 1.5, 0.5로 해서 훈련시킨 회귀 모델을 나타낸 것이다.

 

마진 안에서는 훈련 샘플이 추가되어도 모델의 예측에는 영향이 없다. 따라서 이 모델은 $\varepsilon$ 에 민감하지 않다($\varepsilon$-insensitive) 라고 한다.

 

 

 

비선형 회귀 작업을 처리하려면 커널 SVM 모델을 사용한다. 

 

SVR 은 SVC 의 회귀 버전이고 LinearSVR은 LinearSVC 의 회귀 버전이다. 

 

SVC와 같이 LinearSVR은 계산 복잡도가 훈련 세트의 크기에 선형적으로 늘어나며, SVR 은 훈련 세트가 커지면 훨씬 늘어난다.

 

 

from sklearn.svm import SVR


np.random.seed(42)
m = 100
X = 2 * np.random.rand(m, 1) - 1
y = (0.2 + 0.1 * X + 0.5 * X**2 + np.random.randn(m, 1)/10).ravel()


svm_poly_reg = SVR(kernel='poly', gamma='auto', degree=2, C=100, epsilon=0.1)
svm_poly_reg.fit(X,y)

 

이미지 출저: handson-ML 옮긴이 github

반응형

댓글