서포트 벡터 머신이란?
Le 지원 벡터 머신(SVM) 매우 강력한 지도 ML 알고리즘입니다. 분류 및 회귀용. 중심 아이디어는 다음을 찾는 것입니다.초평면 그 클래스를 다음과 같이 분리합니다. 최대 마진 가능한. 초평면에 가장 가까운 점, 전화하다 지원 벡터, 결정 경계를 정의하는 사람들은 다음과 같습니다. 나머지 데이터는 초평면의 위치와 관련이 없습니다.
이 속성은 SVM을 특히 강력하게 만듭니다. 모델은 작은 변수에만 의존합니다. 훈련 데이터의 하위 집합. 게다가 덕분에 커널 트릭, SVM은 다음을 수행할 수 있습니다. 데이터를 고차원 공간에 투영하여 비선형 분리를 처리합니다. 선형적으로 분리 가능합니다.
이 기사에서 배울 내용
- 초평면의 개념과 최대 마진
- 하드 마진 대 소프트 마진: 내결함성
- 비선형 분리를 위한 커널 트릭
- C 및 감마 초매개변수: 조정 방법
- 일대휴식을 갖춘 멀티클래스 SVM
- scikit-learn을 사용한 실제 구현
최대 마진 및 지원 벡터
이진 분류 문제에는 두 클래스를 분리할 수 있는 초평면이 무한히 많습니다. SVM은 다음과 같은 것을 선택합니다. 최대 마진: the distance between the hyperplane and the points 각 반에서 가장 가까운 곳. 마진을 최대화하면 모델의 일반화가 향상됩니다. 이전에 볼 수 없었던 데이터에 대해 정확히 여백에 있는 점은 i입니다. 지원 벡터.
L'하드 마진 SVM에서는 점이 여백 내부 또는 잘못된 쪽에 위치하지 않아야 합니다. 이는 완벽하게 분리 가능한 데이터에서만 작동합니다. 그만큼 소프트 마진 SVM은 매개변수 C 이는 마진 최대화와 위반 최소화 사이의 균형을 제어합니다. 높은 C는 위반에 심각한 처벌을 가하고(좁은 마진), 낮은 C는 더 많은 오류를 허용합니다. (큰 여백, 더 많은 정규화).
from sklearn.svm import SVC, LinearSVC
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import accuracy_score, classification_report
from sklearn.pipeline import Pipeline
# Dataset
data = load_breast_cancer()
X, y = data.data, data.target
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.2, random_state=42
)
# Pipeline con scaling (FONDAMENTALE per SVM!)
svm_pipeline = Pipeline([
('scaler', StandardScaler()),
('svm', SVC(kernel='linear', C=1.0, random_state=42))
])
svm_pipeline.fit(X_train, y_train)
y_pred = svm_pipeline.predict(X_test)
print(f"Accuracy: {accuracy_score(y_test, y_pred):.3f}")
print(f"\n{classification_report(y_test, y_pred, target_names=data.target_names)}")
# Numero di support vectors per classe
svm_model = svm_pipeline.named_steps['svm']
print(f"Support vectors per classe: {svm_model.n_support_}")
print(f"Totale support vectors: {sum(svm_model.n_support_)} su {len(X_train)} campioni")
커널 트릭: 비선형 분리
데이터가 선형 분리가 불가능한 경우 커널 트릭 데이터를 하나로 투영 분리가 가능한 고차원 공간. 비결은 이 투영이 발생한다는 것입니다. 명시적으로 좌표를 계산하지 않고 커널 함수를 통해 암시적으로 고차원 공간.
가장 일반적인 커널은 다음과 같습니다. RBF(방사형 기준 함수), 가장 다재다능한, 가우시안으로서 점 간의 유사성을 측정합니다. 다항식, 정말 좋은 일이야 특정 수준까지 기능 간의 상호 작용; 시그모이드, 신경망과 유사 a 한 수준. 커널 선택은 데이터의 기하학적 구조에 따라 달라집니다.
from sklearn.svm import SVC
from sklearn.model_selection import GridSearchCV, cross_val_score
from sklearn.preprocessing import StandardScaler
from sklearn.pipeline import Pipeline
from sklearn.datasets import make_moons
import numpy as np
# Dataset non linearmente separabile
X, y = make_moons(n_samples=500, noise=0.2, random_state=42)
# Confronto kernel
kernels = {
'linear': {'svm__C': [0.1, 1, 10]},
'rbf': {'svm__C': [0.1, 1, 10], 'svm__gamma': ['scale', 'auto', 0.1, 1]},
'poly': {'svm__C': [0.1, 1, 10], 'svm__degree': [2, 3, 4]}
}
for kernel, params in kernels.items():
pipeline = Pipeline([
('scaler', StandardScaler()),
('svm', SVC(kernel=kernel, random_state=42))
])
grid = GridSearchCV(pipeline, params, cv=5, scoring='accuracy', n_jobs=-1)
grid.fit(X, y)
print(f"Kernel {kernel:<8s} - Best accuracy: {grid.best_score_:.3f}")
print(f" Best params: {grid.best_params_}")
초매개변수 조정
SVM에는 두 가지 중요한 하이퍼파라미터가 있습니다. C (정규화) 전자 범위 (RBF 및 폴리 커널용) C 마진/오류 균형을 확인하세요. C의 높은 값을 찾으세요. 각 훈련 포인트를 올바르게 분류하려면(과적합 위험) 낮은 값이 더 관대합니다. 더 큰 차이로 오류가 발생합니다(과소적합 위험).
범위 각 지원 벡터의 영향 반경을 제어합니다. 감마가 높을수록 단일 점(과적합)에 민감한 모델, 낮은 감마로 인해 결정 경계가 더 커집니다. 부드럽습니다(과소적합). C와 감마의 최적 조합은 다음과 같이 발견됩니다. 그리드 검색 o 무작위 검색 교차 검증으로.
필수 확장: SVM은 기능 규모에 민감합니다. 기능이라면 0에서 1로, 또 다른 0에서 1000으로 이동하며 두 번째가 거리 계산을 지배합니다. 항상 사용 SVM 이전의 StandardScaler 또는 MinMaxScaler. 이는 SVM에서 가장 흔히 발생하는 실수입니다.
다중클래스 SVM 및 회귀
SVM은 기본적으로 바이너리이지만 scikit-learn은 전략을 통해 다중 클래스 분류를 지원합니다. 일대휴식(OvR): N개의 클래스에 대해 N개의 분류기가 훈련되어 각각 하나를 구별합니다. 다른 모든 수업에서. 예측된 클래스는 가장 높은 점수를 받은 클래스입니다.
회귀의 경우, SVR(지원 벡터 회귀) use the same principle but look for a 가장 많은 수의 점을 포함하는 튜브(엡실론-튜브)입니다. 튜브 외부의 지점이 지지대가 됩니다. 벡터. 여기서도 커널 트릭은 비선형 회귀를 허용합니다.
SVM을 사용해야 하는 경우
SVM은 넓은 공간에서 중간 크기의 데이터 세트(최대 수만 개의 샘플)에 탁월합니다. 높은 차원, 클래스가 명확한 여백으로 잘 구분되어 있는 경우. 데이터 세트에는 적합하지 않습니다. 잡음이 매우 많은 데이터세트의 경우 매우 큼(훈련 복잡성은 2차적으로 확장됨) 보정된 확률이 필요한 경우(기본 SVM은 확률을 생성하지 않으므로 추가 보정이 필요함)
핵심 사항
- SVM은 클래스 간 마진이 최대인 초평면을 찾습니다.
- 서포트 벡터는 결정 경계를 정의하는 지점입니다.
- 커널 트릭은 고차원 공간에서 명시적인 계산 없이 비선형 분리를 처리합니다.
- C는 마진/오류 균형을 제어하고 감마는 서포트 벡터의 영향 반경을 제어합니다.
- SVM을 사용하기 전에 기능 확장이 필수입니다.
- 교차 검증을 통한 그리드 검색은 최상의 하이퍼파라미터를 찾는 표준 방법입니다.







