[AI] 비선형 서포트 벡터 머신(SVM) 분류

2026. 4. 5. 11:09·AI/Machine Learning
반응형

들어가며

저번에는 선형 데이터를 SVM을 활용하여 분류하는 방법을 알아보았다면

이번에는 비선형 데이터를 SVM으로 다루는 방식에 대하여 알아볼 것이다

우리가 실제 상황에서 마주하는 데이터들은 선형일 때보다 비선형일 경우가 많을 것이므로

꼭 알아두어야 할 알고리즘 모델이다

 

비선형 SVM 분류

다항 특성

비선형 데이터를 다루는 한 가지 방법으로는 다항 특성을 추가하는 방법이 있다

다항 특성이란 원래 데이터셋에 다항식(제곱, 세제곱 등)의 항을 특성으로 추가하여

복잡한 데이터 패턴을 학습할 수 있도록 한다

 

예를 들면 원래 특성이 [x1, x2] 였을 때

다항 특성을 추가하게 되면 [x1, x2, x1^2, x1*x2, x2^2] 로 변환된다

 

이렇게 특성을 추가하게 되면 데이터를 선형적으로 구분되는 데이터셋이 만들어질 수 있다

왼쪽 그래프는 데이터를 선형적으로 구분할 수 없는 상태이다

하지만 다항 특성을 적용한다면 오른쪽 그래프와같이 선형적으로 구분될 수 있게 된다

오른쪽 그래프는 x2 = (x1)^2 특성이 적용된 것을 알 수 있다

 

사이킷런에서 다항 특성을 구현할 수 있도록 PolynomialFeatures 변환기를 제공해준다

from sklearn.datasets import make_moons
from sklearn.preprocessing import PolynomialFeatures

X, y = make_moons(n_samples=100, noise=0.15, random_state=42)

polynomial_svm_clf = make_pipeline(
    PolynomialFeatures(degree=3),
    StandardScaler(),
    LinearSVC(C=10, max_iter=10_000, dual=True, random_state=42)
)
polynomial_svm_clf.fit(X, y)

PolynomialFeatures 변환기와 StandardScaler(), LinearSVC()를 파이프라인으로 연결해서

다항 특성을 적용시킨 SVM 분류 모델을 구현할 수 있다

 

다항식 커널

다항 특성을 추가하는 방식은 SVM뿐만 아니라 다른 알고리즘 모델에서도 잘 작동하지만

낮은 차수의 다항식은 복잡한 데이터셋을 만들어 내지 못하고 높은 차수의 다항식은 너무 많은 특성을 추가해 모델을 느리게한다

 

이 때 SVM에서는 커널 트릭이라는 방식을 사용하여 이 문제를 해결할 수 있다

커널 트릭은 실제로는 특성이 추가되는 것은 아니지만 다항 특성이 많이 추가된 것과 같은 결과를 얻게해준다

다항식 커널을 사용하게되면 고차항 변환이 필요없어 계산량 측면에서 효율적이고 메모리도 절약할 수 있다

 

이 방식은 사이킷런에 SVC 클래스로 구현이 되어있다

from sklearn.svm import SVC

poly_kernel_svm_clf = make_pipeline(StandardScaler(),
                                    SVC(kernel="poly", degree=3, coef0=1, C=5))
poly_kernel_svm_clf.fit(X, y)

위 코드는 3차 다항식 커널을 사용하여 SVM 분류기를 훈련시킨다

coef0 매개변수는 모델이 높은 차수와 낮은 차수에 얼마나 영향을 받을지를 조절하는 하이퍼파라미터이다

 

유사도 특성

비선형 데이터를 다루는 또 다른 방법은 유사도 특성을 활용하는 방법이다

예전 글에서 알아보았던 방사 기저 함수(RBF)를 유사도 함수로 정의해서 새로운 특성을 만들어낸다

 

왼쪽 그래프는 x1 = -2, x1 = 1일 때를 랜드마크로 지정하여 RBF를 표현한 것으로 종모양으로 나타난다

오른쪽 그래프는 RBF를 활용하여 변환된 데이터셋을 보여주는 것으로 선형적으로 구분이 가능한 모습이다

 

위 그래프에서 x로 지정한 데이터는 왼쪽 그래프에서 보면 x2 함수에서는 0.74에 x3 함수에서는 0.3에 걸쳐있다

그래서 오른쪽 그래프에서 (0,74, 0.3)으로 위치가 표현된 것을 알 수 있다

 

유사도 특성도 다항 특성과 마찬가지로 데이터셋이 규모가 큰 경우 연산 비용이 많이 든다

이 때 여기서도 커널 트릭을 활용하여 유사도 특성을 추가하는 것은 아니지만

유사도 특성을 추가하는 것과 같은 결과를 얻을 수 있게된다

rbf_kernel_svm_clf = make_pipeline(StandardScaler(),
                                   SVC(kernel="rbf", gamma=5, C=0.001))
rbf_kernel_svm_clf.fit(X, y)

적절한 gamma 값과 C값을 조절하여 오차를 어느정도 허용하며 균형있는 모델을 만드는 것이 중요하다

마치며

이번 글에서는 비선형 데이터를 SVM을 활용하여 어떻게 처리할 수 있는 지에 대해 알아보았다

커널 트릭이라는 개념 자체가 신기하게 다가왔고 수학적인 기교가 들어간 개념같았다

rbf함수도 적용되는 것을 보고 이게 된다고?라고 생각하며 조금 놀랐다

커널 트릭의 구조에 대해 이해해보려고 하였으나 수학적인 부분이 개인적으로 아직 이해하기어려운 수준이라서

조금더 머신러닝에 대한 이해도를 올린 후 수학적 구조에 대하여 알아볼 계획이다

반응형

'AI > Machine Learning' 카테고리의 다른 글

[AI] 앙상블 알고리즘(투표 기반 분류기, 배깅과 페이스팅)  (0) 2026.04.19
[AI] 결정 트리(Decision Tree)  (0) 2026.04.15
[AI] 서포트 벡터 머신(SVM) 회귀  (0) 2026.03.31
[AI] 선형 서포트 벡터 머신(SVM) 분류  (0) 2026.03.30
[AI] 로지스틱 회귀(logistic regression)  (0) 2026.03.17
'AI/Machine Learning' 카테고리의 다른 글
  • [AI] 앙상블 알고리즘(투표 기반 분류기, 배깅과 페이스팅)
  • [AI] 결정 트리(Decision Tree)
  • [AI] 서포트 벡터 머신(SVM) 회귀
  • [AI] 선형 서포트 벡터 머신(SVM) 분류
20puddle
20puddle
20puddle 님의 블로그 입니다.
  • 20puddle
    20puddle 님의 블로그
    20puddle
  • 전체
    오늘
    어제
    • 분류 전체보기 (100)
      • Spring boot (5)
      • git & github (5)
      • algorithm (47)
        • theory (3)
        • 배열 (7)
        • 연결 리스트 (3)
        • 스택 (5)
        • 큐 (3)
        • 덱 (2)
        • 기초 코드 (19)
        • BFS (5)
      • AI (43)
        • Machine Learning (35)
        • Deep Learning (8)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    Aimers
    Spring Boot
    ML
    홀드아웃 검증
    주성분변환
    게시판
    알고리즘
    AI
    DL
    오프라인 학습
    백준
    git
    github
    연결리스트
    Java
    list
    그레디언트 클리핑
    머신러닝
    인공지능
    딥러닝
  • 최근 댓글

  • 최근 글

  • 반응형
  • hELLO· Designed By정상우.v4.10.3
20puddle
[AI] 비선형 서포트 벡터 머신(SVM) 분류
상단으로

티스토리툴바