본문 바로가기
인공지능(AI)/머신러닝

[핸즈온 머신러닝] 5장 서포트 벡터 머신

by hyezzisss 2022. 1. 18.

⭐ 매우 강력하고 선형이나 비선형 분류, 회귀, 이상치 탐색에도 사용 가능한 다목적 머신러닝 모델

     -> 특히 복잡한 분류 모델에 잘 들어맞으며 작거나 중간 크기의 데이터셋에 적합

1. 선형 SVM 분류

  • 라지 마진 분류 : 훈련 샘플로부터 가능한 멀리 떨어진 것으로 폭이 넓은 도로를 찾는 것으로 생각할 수 있음
    • 도로 경계에 위치한 샘플에 의해 전적으로 결정됨 -> 이러한 샘플을 서포트 벡터라고 함

1) 소프트 마진 분류

  • 하드 마진 분류: 모든 샘플이 도로 바깥쪽에 올바르게 분류되어 있는 경우
    • 데이터가 선형적으로 구분될 수 있어야 제대로 작동하며 이상치에 민감 -> 좀 더 유연한 모델이 필요
  • 소프트 마진 분류: 도로의 폭을 가능한 넓게 유지하는 것과 마진 오류 사이에 적절한 균형을 잡아야 함
  • 하이퍼파라미터
    • C : 낮게 설정하면 마진이 넓고 높게 설정하면 마진이 좁음 -> 과대 적합이라면 C를 감소시켜 모델 규제 가능
  • LinearSVC 클래스를 대신 선형 커널을 사용하는 SVC 클래스로 대체 가능
SVC(kernel="linear", C=1)
    • 규제에 편향을 포함시키므로 훈련 세트에서 평균을 빼서 중앙에 맞춰야 함 -> StandardScaler를 사용하여 데이터 스케일을 맞추면 자동으로 이렇게 됨
    • loss 매개변수를 "hinge"로 지정해야 함
    • 훈련 샘플보다 특성이 많지 않다면 성능을 높이기 위해 dual 매개변수를 False로 지정해야 함

2. 비선형 SVM 분류

1) 다항식 커널

  • 커널 트릭이라는 수하적 기교 적용 가능
    • 커널 트릭은 실제로는 특성을 추가하지 않으면서 다항식 특성을 많이 추가한 것과 같은 결과를 얻을 수 있음
# 3차 다항식 커널을 이용해 SVM 분류기 훈련
from sklearn.svm import SVC
poly_kernel_clf = Pipeline([
		("scaler", StandardScaler()),
        ("svm_clf", SVC(kernel="poly", degree=3, coef0=1, C=5))
        ])
  • coef0: 모델이 높은 차수와 낮은 차수에 얼마나 영향을 받을지 조절

2) 유사도 특성

  • 비선형 특성을 다루는 또 다른 기법으로 특정 랜드마크와 얼마나 닮았는지 측정하는 유사도 함수로 계산한 특성을 추가하기
  • 랜드 마크를 선택하는 간단한 방법은 데이터셋에 있는 모든 샘플 위치에 랜드마크를 설정하는 것 -> 그러나 훈련 세트가 매우 클 경우 동일한 크기의 아주 많은 특성이 만들어짐

3) 가우시안 RBF 커널

  • 추가 특성을 모두 계산하려면 연산 비용이 많이 듦 -> 커널 트릭이 한 번 더 SVM을 이용함 -> 유사도 특성을 많이 추가하는 것과 비슷한 결과를 얻을 수 있음
# 가우시안 RBF 커널을 사용한 SVC 모델
rbf_kernel_svm_clf = Pipeline([
		"scaler", StandardScaler()),
        "svm_clf", SVC(kernel="rbf", gamma=5, C=0.001))
        ])
  • gamma를 증가시키면 각 샘플의 영향 범위가 작아짐
  • gamma를 감소시키면 샘플이 넓은 범위에 걸쳐 영향을 주므로 결정 경계가 더 부드러워짐

⭐ 커널 선택법 : 먼저 linear을 적용 후 (LinearSVC가 SVC(kernel="linear") 보다 훨씬 빠름) RBF 등 다른 커널들 적용해보기

4) 계산 복잡도

LinearSVC

  • O(m*n)
  • 커널 트릭을 지원하지 않지만 훈련 샘플과 특성 수에 거의 선형적으로 늘어남
  • 정밀도를 높이면 알고리즘의 수행 시간이 길어짐

SVC

  • O(m^2*n) ~ O(m^3*n)
  • 복잡하지만 작거나 중간 규모의 훈련 세트에 이 알고리즘이 잘 맞음
  • 특성의 개수에는 특히 희소 특성인 경우 잘 확장됨

3. SVM 회귀

  • 제한된 마진 오류 안에서 도로 안에 가능한 많은 샘플이 들어가도록 학습
  • SVR : SVC의 회귀 버전
  • LinearSVR : LinearSVC의 회귀 버전

 

 

 

댓글