Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Tags more
Archives
Today
Total
관리 메뉴

StudyStudyStudyEveryday

[파이썬머신러닝] SVM 회귀 본문

DataScience/핸즈온 머신러닝 Hands-on ML

[파이썬머신러닝] SVM 회귀

따듯한붕어빵 2022. 4. 4. 00:35

SVM 알고리즘은 선형, 비선형 분류뿐 아니라 선형, 비선형 회귀도 사용할 수 있다.

 

SVM 회귀 (SVR, Support Vector Regression)

  • SVR의 목적 : 제한된 마진 오류 (즉, 도로 밖 샘플) 안에서 도로 안에 가능한 많은 샘플이 들어가도록 학습한다.
  • 도로 폭은 \(\varepsilon \)으로 조절한다.

 

다음은 사이킷런의 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 회귀 모델 적합
from sklearn.svm import LinearSVR

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

svm_reg1 = LinearSVR(epsilon=1.5, random_state=42)
svm_reg2 = LinearSVR(epsilon=0.5, random_state=42)
svm_reg1.fit(X, y)
svm_reg2.fit(X, y)

def find_support_vectors(svm_reg, X, y):
    y_pred = svm_reg.predict(X)
    off_margin = (np.abs(y - y_pred) >= svm_reg.epsilon)
    return np.argwhere(off_margin)

svm_reg1.support_ = find_support_vectors(svm_reg1, X, y)
svm_reg2.support_ = find_support_vectors(svm_reg2, X, y)

eps_x1 = 1
eps_y_pred = svm_reg1.predict([[eps_x1]])

왼쪽 그래프의 경우 margin을 크게하고, 오른쪽 그래프의 경우 margin을 작게 하였다.

margin 안에서는 훈련 샘플이 추가되어도 모델의 예측에는 영향이 없다. 그래서 SVM 회귀 모델을  \(\varepsilon \)에 민감하지 않다고 한다.

 

 

다음은 사이킷런의 SVR을 이용한 코드 예제이다.

# 2차 다항 커널을 사용한 SVM 회귀
from sklearn.svm import SVR

svm_poly_reg1 = SVR(kernel="poly", degree=2, C=100, epsilon=0.1, gamma="scale")
svm_poly_reg2 = SVR(kernel="poly", degree=2, C=0.01, epsilon=0.1, gamma="scale")
svm_poly_reg1.fit(X, y)
svm_poly_reg2.fit(X, y)

비선형 회귀 작업 처리 시에는 커널 SVM 모델을 사용한다.

왼쪽 그래프의 경우 규제가 거의 없고 (C가 큼), 오른쪽 그래프의 경우 규제가 훨씬 많다. (C가 작음)

 

 

SVR도 SVC와 같은 특징을 가진다.

파이썬 클래스 시간 복잡도 외부 메모리 학습 지원  스케일 조정의 필요성 커널 트릭
LinearSVR \(O(m \times n)\) 아니오 아니오
SGDClassifier \(O(m \times n)\) 아니오
SVR \(O(m^{2} \times n)\) ~ \(O(m^{3} \times n)\) 아니오

 

SVR에 대한 내용은 아래 포스팅을 참고하면 좋다.

 

https://eundong64.tistory.com/19

 

[파이썬머신러닝] 비선형 서포트 벡터 머신 (SVM) 분류

5.2 비선형 SVM 분류 5.2.1 다항식 커널 5.2.2 유사도 특성 5.2.3 가우시안 RBF 커널 5.2.4 계산 복잡도 (추가) SVC와 SVR의 차이 선형 SVM 분류기가 효율적이고 많은 경우 잘 작동하지만, 선형적으로 분류할

eundong64.tistory.com

 

 

 

 


* 해당 포스팅은 머신러닝 학습 중 핸즈온 머신러닝 2판을 참고하여 작성하였습니다. *

 

 

Comments