서포트 벡터 머신(SVM)이란? AI에서 마진으로 분류 경계를 학습하는 방법
TL;DR
서포트 벡터 머신(Support Vector Machine, SVM)은 클래스 사이의 마진과 분류 손실을 함께 고려해 결정 경계를 학습하는 모델입니다. 경계를 결정하는 학습 표본을 서포트 벡터라고 부르며, 커널을 쓰면 원래 특징 공간에서 비선형 경계도 만들 수 있습니다. C와 gamma의 역할, 점수와 확률의 차이, 전처리와 계산 비용을 구분해서 읽는 것이 중요합니다.
핵심 3줄 요약
- 핵심 1
마진을 확보하는 경계를 찾습니다. 학습 사례를 맞히는 것과 경계 주변에 여유를 두는 것을 함께 고려합니다. - 핵심 2
커널로 비선형 관계를 다룹니다. 변환된 공간의 내적을 계산해 원래 좌표에서 굽은 경계를 표현합니다. - 핵심 3
설정과 출력의 의미를 확인합니다. C는 규제와 손실의 절충, gamma는 RBF 영향 범위에 관여하며 결정 점수는 확률이 아닙니다.
이 글에서 다룰 내용
- SVM의 한 문장 정의
- 고객 문의 분류로 이해하는 마진과 서포트 벡터
- 소프트 마진·커널·결정 함수의 작동 흐름
- C·gamma·클래스 가중치의 역할
- SVC·LinearSVC·SVR·군집화와의 차이
- 실전 사용처와 전처리·평가 체크리스트
- 확률 해석·계산 비용·데이터 누수의 주의점
서포트 벡터 머신을 한 문장으로 정의하면 무엇인가요?
서포트 벡터 머신은 라벨이 붙은 데이터에서 클래스 사이의 여유인 마진을 크게 확보하면서 마진 위반에 따른 손실을 줄이는 분류 경계를 찾는 지도학습 방법입니다.
한국어로 서포트 벡터 머신 또는 지원 벡터 기계라고 부릅니다. 이 글은 분류를 중심으로 설명합니다. 같은 원리를 확장한 회귀 방식은 SVR이며, 이상 탐지에 쓰는 One-Class SVM도 있지만 학습 목표와 라벨 조건이 같지는 않습니다.
특징이 두 개라면 직선이 평면을 나누는 모습을 떠올릴 수 있습니다. 특징이 더 많아지면 그 역할을 하는 경계를 초평면이라고 부릅니다. 커널 SVM은 변환된 특징 공간에서 이런 경계를 찾으므로 원래 입력 공간에서는 경계가 곡선처럼 보일 수 있습니다.
한 줄 정리: SVM은 데이터를 나누는 아무 선이나 찾지 않고, 마진과 학습 손실을 기준으로 경계를 고릅니다.
쉬운 예시로 이해해 볼까요?
감자나라ai님이 고객 문의를 배송과 환불로 분류한다고 가정해 보겠습니다. 이미 담당자가 정답을 붙인 문의가 있고 각 문서를 숫자 특징으로 바꿨습니다. 이해를 돕기 위한 가상 사례이며 실제 분류 성능을 측정한 결과는 아닙니다.
두 종류의 문의를 구분하는 선은 여러 개 그을 수 있습니다. 어느 한쪽 문의에 바짝 붙은 선보다 양쪽의 가까운 사례 사이에 여유를 확보한 선을 고르는 것이 마진의 직관입니다. 새 문의의 표현이 조금 달라져도 같은 쪽에 남기를 기대하는 것입니다.
현실에서는 배송 취소 뒤 환불을 묻는 문장처럼 두 범주가 겹칩니다. 모든 문의를 완벽히 맞히려고 경계를 복잡하게 만들면 애매한 라벨까지 따라갈 수 있습니다. 소프트 마진 SVM은 일부 마진 위반을 허용하고 그 손실과 경계의 복잡성을 함께 고려합니다.
경계 학습에 직접 기여하는 표본이 서포트 벡터입니다. 단순히 각 클래스의 대표 문서를 뽑은 목록은 아닙니다. 마진 안쪽에 있거나 잘못 분류된 사례도 포함될 수 있으므로 서포트 벡터를 모두 이상치라고 읽지 않습니다.
쉬운 예시: 두 무리 사이에 통로를 내되, 겹치는 사례 때문에 통로를 끝없이 구부리지 않도록 여유와 위반 비용을 함께 정하는 방식입니다.
왜 AI에서 서포트 벡터 머신이 중요한가요?
특징이 많은 데이터의 비교 모델이 됩니다
문서를 단어별 숫자로 바꾸면 특징 수가 많아집니다. scikit-learn 가이드는 SVM이 고차원 공간에서도 유용하다고 설명합니다. 다만 표본보다 특징이 훨씬 많으면 커널과 규제를 신중하게 골라야 합니다. 고차원을 처리한다는 사실이 과적합을 막아 주지는 않습니다.
선형과 비선형 경계를 같은 관점에서 이해합니다
선형 경계로 충분한 문제와 더 복잡한 관계가 필요한 문제를 커널 선택으로 비교할 수 있습니다. 기본 선형 모델과 RBF 커널 모델을 같은 데이터 분할에서 평가하면 복잡한 경계가 실제로 필요한지 살펴보기 좋습니다. 늘 비선형 모델부터 시작할 이유는 없습니다.
학습에 기여한 사례와 결과 점수를 확인합니다
SVC는 서포트 벡터와 그 인덱스를 제공합니다. 어떤 문의가 경계에 영향을 주었는지 원문을 되짚어 볼 단서가 됩니다. 결정 점수도 얻을 수 있지만 그 값만으로 정답 확률이나 업무상 위험을 확정할 수는 없습니다.
핵심 인사이트: SVM의 핵심은 마진을 이용한 경계 학습입니다. 문서를 생성하거나 근거를 검색하는 LLM·RAG와는 맡는 역할이 다릅니다.
서포트 벡터 머신은 어떤 순서로 작동하나요?
1. 숫자 특징과 정답 라벨을 준비합니다
입력 X의 각 행에는 사례 하나를, 각 열에는 특징 하나를 놓습니다. 정답 y에는 같은 행의 클래스를 기록합니다. 고객 ID와 라벨의 행 순서가 어긋나면 학습은 실행돼도 다른 문제를 풀게 됩니다. 문서 원문은 먼저 벡터로 표현해야 합니다.
2. 마진과 위반 손실을 함께 최적화합니다
선형 SVM은 가중치와 편향으로 경계를 나타냅니다. 마진을 크게 확보하려는 항과 마진 위반을 벌점으로 다루는 항을 함께 줄입니다. 힌지 손실에서는 틀린 사례뿐 아니라 맞았어도 경계에 너무 가까운 사례가 손실에 기여합니다.
데이터를 완전히 나눌 수 있다고 전제하는 하드 마진과 달리 소프트 마진은 위반을 허용합니다. C는 그 위반 비용의 비중을 조절합니다. 단순히 오분류한 건수만 최소화하는 규칙과는 다릅니다.
3. 필요하면 커널로 관계를 계산합니다
커널은 변환된 특징 공간에서 두 표본의 내적에 해당하는 값을 계산합니다. 변환 좌표를 모두 직접 만들지 않고도 그 공간에서 경계를 학습하게 하는 것이 커널 트릭입니다. RBF 커널은 표본 간 거리가 커질수록 관계가 약해지는 형태를 씁니다.
원래 공간에서 직선으로 나뉘지 않던 데이터도 커널에 따라 분리하기 쉬워질 수 있습니다. 다만 커널을 쓴다고 어떤 라벨 구조든 새 데이터에서 잘 맞히는 것은 아닙니다. 입력 척도와 커널 설정이 함께 결과를 바꿉니다.
4. 새 표본의 점수와 클래스를 계산합니다
학습한 SVC는 새 입력과 서포트 벡터의 커널 값을 계수와 결합해 결정 함수를 계산합니다.
predict
는 클래스 라벨을,
decision_function
은 경계에 관한 점수를 반환합니다. 원본 학습과 같은 특징 순서와 전처리를 적용해야 합니다.
실전 팁: SVC의
support_는 학습 입력의 행 인덱스입니다. 원본 ID를 따로 보관해야 전처리·분할 뒤에도 해당 문서나 기록을 정확히 찾을 수 있습니다.
C와 gamma는 무엇을 뜻하나요?
C는 마진 위반 비용과 규제의 절충입니다
C가 커지면 마진을 위반한 학습 사례의 손실을 더 무겁게 다룹니다. C가 작아지면 상대적으로 규제가 강해져 더 많은 위반을 받아들이더라도 단순한 경계를 선호합니다. C가 크다고 검증 정확도가 반드시 올라가지는 않습니다.
gamma는 RBF 커널의 영향 범위에 관여합니다
RBF에서 gamma가 크면 한 표본의 영향이 가까운 영역에 집중되고, 작으면 더 멀리까지 퍼집니다. 너무 크면 학습점 주변만 따라가는 경계가, 너무 작으면 복잡한 구분을 놓치는 경계가 생길 수 있습니다. C와 gamma는 같은 설정이 아니므로 함께 비교합니다.
scikit-learn 공식 RBF 예제는 두 값을 바꾸면서 경계와 교차 검증 점수를 살핍니다. 좋은 값은 특징의 척도와 데이터에 따라 달라집니다. 다른 프로젝트에서 잘됐던 숫자를 표준값처럼 복사하지 않습니다.
클래스 가중치는 범주별 위반 비용을 바꿉니다
class_weight
는 클래스마다 C에 곱할 가중치를 정합니다. 적게 등장하는 범주를 더 중요하게 다룰 때 후보가 됩니다. 가중치 조정은 데이터를 새로 만드는 작업도, 정답 비율을 바꾸는 작업도 아닙니다. 조정 뒤 각 클래스의 재현율과 오탐을 확인합니다.
서포트 벡터 머신과 헷갈리는 용어는 무엇이 다른가요?
SVM과 SVC의 차이
SVM은 방법의 이름이고 SVC는 서포트 벡터 분류를 뜻합니다. scikit-learn의 SVC는 libsvm을 이용하는 분류 클래스이며 여러 커널을 지원합니다. 클래스가 여러 개면 내부적으로 클래스 쌍마다 학습하는 일대일 방식을 사용합니다.
SVC의
decision_function_shape="ovr"
는 반환 점수의 모양을 일대나머지 형태로 바꾸는 옵션입니다. 내부 학습까지 일대나머지로 바뀐다는 뜻은 아닙니다. API 이름만 보고 학습 방식과 출력 형식을 혼동하지 않습니다.
LinearSVC와 선형 커널 SVC의 차이
LinearSVC는 liblinear 기반 선형 분류 구현입니다.
SVC(kernel="linear")
와 달리 기본 손실 함수와 편향의 규제 처리에 차이가 있고, 많은 표본에서 더 효율적인 선택이 될 수 있습니다. 두 모델의 결과가 정확히 같다고 기대하면 안 됩니다.
LinearSVC에는 SVC와 같은
support_
속성이 없습니다. 대신 가중치와 편향을 확인합니다. 다중 클래스 기본 전략도 일대나머지이므로 이름에 SVC가 들어간다는 이유로 결과 배열과 속성을 같은 코드로 읽지 않습니다.
SVR과 분류 SVM의 차이
SVR은 범주 대신 연속적인 숫자를 예측합니다. 대표적인 엡실론 SVR은 예측과 실제값의 차이가 정해진 허용 폭 안이면 손실을 부과하지 않고 그 밖의 오차를 다룹니다. 이 허용 폭은 분류 확률도 예측 구간의 포함률 보장도 아닙니다.
군집화와 지도 분류의 차이
군집화는 정답 라벨 없이 비슷한 사례의 묶음을 찾습니다. 이 글의 분류 SVM은 이미 붙인 정답을 바탕으로 새 사례의 클래스를 예측합니다. 이상 탐지용 One-Class SVM은 별도 목적의 방법이므로 일반 SVC에 라벨을 빼고 넣으면 같은 작업을 한다고 생각하지 않습니다.
비교 정리: SVM은 방법의 범주, SVC는 분류, SVR은 회귀입니다. LinearSVC와 SVC의 선형 커널은 구현과 기본 학습 조건이 다릅니다.
실전에서는 어디에 쓰이나요?
문서와 고객 문의의 범주 분류
문서를 단어 특징이나 임베딩으로 바꾸고 사람이 붙인 주제 라벨을 학습하는 후보 모델로 사용할 수 있습니다. 배송·환불을 고르는 분류와 문의에 답장을 작성하는 생성은 별개입니다. 분류 성능은 라벨 기준과 입력 표현에 맞춰 평가합니다.
이미지·센서 특징의 상태 판별
이미지에서 추출한 특징이나 센서 측정값으로 상태를 나누는 데 검토할 수 있습니다. SVM 자체가 원시 이미지의 의미를 자동으로 읽는다는 뜻은 아닙니다. 특징 추출 과정과 분류기를 함께 검증하고 서로 다른 장비·촬영 조건에서 성능을 확인합니다.
새 모델과 비교할 기준 모델
복잡한 신경망을 도입하기 전에 선형 SVM과 커널 SVM의 성능·실행 시간을 비교할 수 있습니다. 어느 쪽이 항상 우수한지는 데이터 없이는 결정할 수 없습니다. 같은 테스트 사례와 평가 지표를 사용해 추가 계산 비용에 맞는 이득이 있는지 봅니다.
서포트 벡터 머신을 적용할 때 어떤 순서로 확인하나요?
1. 라벨과 데이터 분리 기준을 정합니다
한 고객의 반복 문의나 복제 문서가 학습과 테스트에 동시에 들어가지 않았는지 확인합니다. 시간에 따라 환경이 바뀌는 문제라면 실제 배포 순서에 맞게 나눕니다. 설정을 선택할 검증 데이터와 최종 평가 데이터도 구분합니다.
2. 전처리를 학습 구간에만 맞춥니다
SVM은 특징의 척도에 민감합니다. 표준화의 평균·표준편차 계산 원리를 확인하고 학습 데이터에서 구한 변환을 검증·테스트에도 그대로 적용합니다. 교차 검증에서는 Pipeline 안에 전처리를 넣어 각 학습 분할에서만 맞춥니다.
공식 RBF 시각화 예제도 전체 데이터를 먼저 스케일링한 부분은 설명 편의를 위한 단순화라고 밝힙니다. 그림을 그리는 예제를 실제 성능 평가 절차로 그대로 복사하지 않습니다. 희소 문서 특징에는 희소 구조를 보존하는 전처리가 필요한지도 확인합니다.
3. 커널과 설정을 검증 데이터에서 비교합니다
선형 모델을 기준으로 삼고 필요할 때 RBF의 C와 gamma 후보를 비교합니다. 정확도 하나만 보지 말고 드문 클래스의 재현율, 혼동 행렬과 오류 비용을 함께 봅니다. 검증 점수의 작은 차이가 데이터 분할에 따라 뒤집히는지도 살펴봅니다.
4. 학습·예측 비용과 결과 형식을 기록합니다
SVC의 학습 시간은 표본 수가 늘 때 적어도 제곱 수준으로 커질 수 있다고 공식 API가 경고합니다. 큰 데이터에서는 LinearSVC나 커널 근사 같은 대안을 검토합니다. 서포트 벡터 수, 학습 시간, 예측 지연, 메모리와 수렴 경고를 함께 기록합니다.
한 줄 정리: 라벨·분리·전처리·커널·평가·실행 비용을 묶어 기록해야 같은 모델을 다시 만들고 비교할 수 있습니다.
사용할 때 무엇을 주의해야 하나요?
첫째, 결정 점수를 확률로 읽지 않습니다.
decision_function
이 0.8이라고 정답 확률이 80%인 것은 아닙니다. 확률이 필요하면 별도의 확률 보정과 평가를 거칩니다. 점수 크기를 서로 다른 모델 사이에서 같은 척도로 비교하는 것도 주의합니다.
둘째, 오래된 확률 옵션 예제를 그대로 복사하지 않습니다. 확인한 scikit-learn SVC API는
probability
옵션의 사용 중단 예고를 표시하고
CalibratedClassifierCV(SVC(), ensemble=False)
사용을 안내합니다. 설치한 버전의 API를 확인하고 확률 보정 비용까지 평가합니다.
셋째, 서포트 벡터를 잘못된 데이터로 단정하지 않습니다. 경계에 필요한 정상 사례도 포함됩니다. 해당 사례를 일괄 삭제하면 학습 문제가 바뀝니다. 원문과 라벨을 확인하고 수정 근거가 있을 때만 데이터를 고칩니다.
넷째, 복잡한 커널을 무조건 좋은 모델로 보지 않습니다. 큰 gamma와 약한 규제는 학습 사례를 지나치게 따라갈 수 있습니다. 학습 점수만 높고 새 데이터에서 성능이 떨어진다면 특징·라벨·검증 설계부터 다시 살펴봅니다.
다섯째, 점수만으로 자동 처리를 확정하지 않습니다. 중요한 분류에는 오탐과 누락의 비용을 따로 정합니다. 운영 데이터가 달라지면 전처리와 경계가 유효한지 다시 확인하고, 사람 검토가 필요한 사례를 남깁니다.
주의: 마진이 크거나 검증 정확도가 높다는 사실이 공정성·안전성·개별 예측의 무오류를 보장하지는 않습니다. 실제 업무의 실패 사례와 집단별 성능을 따로 확인하세요.
자주 묻는 질문
Q1. SVM은 딥러닝인가요?
일반적인 SVM은 깊은 신경망을 학습하는 딥러닝과 다른 방법입니다. 다만 신경망으로 추출한 이미지·문서 특징을 SVM의 입력으로 사용할 수는 있습니다. 특징을 만드는 모델과 마지막 분류기를 나눠 이해하면 됩니다.
Q2. 서포트 벡터는 경계선 위의 점만 뜻하나요?
그렇지 않습니다. 소프트 마진에서는 마진 안쪽이나 잘못 분류된 표본도 서포트 벡터가 될 수 있습니다. 모든 점이 결정 경계 위에 놓여야 한다고 해석하면 안 됩니다.
Q3. C와 gamma를 모두 크게 하면 정확해지나요?
그렇지 않습니다. 두 값은 서로 다른 역할을 하며 학습 데이터에 지나치게 맞출 위험도 있습니다. 전처리를 고정한 뒤 검증 데이터에서 설정 조합을 비교하고 마지막 테스트는 선택 과정과 분리합니다.
Q4. 클래스가 여러 개여도 사용할 수 있나요?
가능합니다. scikit-learn SVC는 내부적으로 클래스 쌍별 일대일 학습을 사용하고 LinearSVC는 기본적으로 일대나머지를 사용합니다. 출력 점수의 모양만으로 내부 학습 전략을 판단하지 않습니다.
Q5. LinearSVC가 선형 커널 SVC와 똑같나요?
아닙니다. 둘 다 선형 경계를 만들지만 사용하는 라이브러리, 기본 손실과 편향 규제 등에 차이가 있습니다. 같은 C를 넣었다고 같은 경계와 같은 서포트 벡터 속성을 얻지는 않습니다.
Q6. SVM을 쓰려면 항상 표준화해야 하나요?
입력의 척도를 점검하고 적절히 스케일링하는 것이 일반적인 권장입니다. 이미 정규화한 특징이나 희소 문서 벡터처럼 입력 조건에 따라 방법은 달라집니다. 모든 데이터에 같은 변환을 강제하기보다 학습 구간에서 맞춘 전처리를 일관되게 적용합니다.
출처
마무리
서포트 벡터 머신은 마진과 학습 손실을 함께 고려해 분류 경계를 찾는 방법입니다. 커널은 비선형 관계를 다루게 하고, C와 gamma는 서로 다른 방식으로 결과에 영향을 줍니다. 서포트 벡터는 경계를 학습하는 데 기여한 사례이며 대표 문서나 이상치 목록과는 다릅니다.
처음 접한다면 마진과 오분류, 결정 점수와 확률, SVC와 LinearSVC를 구분하세요. 라벨과 데이터 분리를 먼저 점검하고 전처리를 학습 구간에서만 맞춘 뒤, 검증 성능과 실행 비용을 함께 비교하면 SVM을 적절한 분류 후보로 평가할 수 있습니다.
