자료를 공개한 저자 오렐리앙 제롱과 강의자료를 지원한 한빛아카데미에게 진심어린 감사를 전합니다.
2부
SVM 회귀
SVM 이론
마진(margin): 클래스를 구분하는 도로의 경계
라지 마진 분류: 마진 폭을 최대로 하는 클래스 분류
왼편 그래프 | 오른편 그래프 | |
---|---|---|
분류기: | 선형 분류 | 라지 마진 분류 |
실선: | 결정 경계 | 결정 경계 |
일반화: | 일반화 어려움 | 일반화 쉬움 |
왼편 그래프 | 오른편 그래프 | |
---|---|---|
이상치: | 타 클래스에 섞임 | 타 클래스에 매우 가까움 |
하드 마진 분류: | 불가능 | 가능하지만 일반화 어려움 |
사이킷런의 선형 SVM 분류기 LinearSVC
활용
svm_clf1 = LinearSVC(C=1, loss="hinge", random_state=42)
C
: 무조건 양수이어야 하며 클 수록 마진 오류를 적게, 즉 도로폭을 작게 만듦.
결국 C가 클 수록 규제를 덜 가하게 되어 모델의 자유도를 올려 과대적합 가능성을 키움.
또한 C=float("inf")
로 지정하면 하드 마진 분류 모델이 됨.hinge
: 힌지 손실. 예측값과 실제 라벨 사이의 차이가 클 수록 큰 손실이 가해짐.dual=True
: 쌍대성(duality) 이용 여부. True가 기본. 하지만 특성 수가 샘플 수보다 작을 때는 False 권장.왼편 그래프 | 오른편 그래프 | |
---|---|---|
C | 작게 | 크게 |
도로폭(마진 오류 수) | 크게 | 작게 |
분류 | 덜 정교하게 | 보다 정교하게 |
LinearSVC
모델의 경우 편향도 규제 대상임.
따라서 평균을 빼서 0으로 편향을 없애는 것이 중요. 하지만 표준화 스케일링을 하면 자연스럽게 해결됨.SVC
모델은 편향을 규제하지는 않음.
그럼에도 불구하고 기본적으로 표준화 스케일링을 진행하는 것이 보다 좋은 성능의 모델을 훈련시킴.선형 분류는 LinearSVC
모델이 제일 빠름. 하지만 'SVC + 선형 커널' 조합도 사용 가능.
SVC(kernel="linear", C=1)
SGDClassifier + hinge 손실함수 활용 + 규제: 규제 강도가 훈련 샘플 수(m
)에 반비례.
SGDClassifier(loss="hinge", alpha=1/(m*C))
SVC
+ 커널 트릭다항 특성 + 선형 회귀(4장): 특성 $x_1$ 하나만 갖는 모델에 새로운 특성 $x_1^2$을 추가한 후 선형회귀 적용
$$\hat y = \theta_0 + \theta_1\, x_1 + \theta_2\, x_1^{2}$$
# 3차 항까지 추가
polynomial_svm_clf = Pipeline([
("poly_features", PolynomialFeatures(degree=3)),
("scaler", StandardScaler()),
("svm_clf", LinearSVC(C=10, loss="hinge", random_state=42))
])
참고 영상: SVM + 다항 커널
<그림 출처: 지오지브라(GeoGebra)>
예제: moons 데이터셋
poly_kernel_svm_clf = Pipeline([
("scaler", StandardScaler()),
("svm_clf", SVC(kernel="poly", degree=3, coef0=1, C=5)) ])
왼편 그래프 | 오른편 그래프 | |
---|---|---|
degree | 3차 다항 커널 | 10차 다항 커널 |
coef0(r) | 높은 차수 강조 조금 | 높은 차수 강조 많이 |
유사도 함수 예제: 가우시안 방사 기저 함수(RBF, radial basis function)
$$ \phi(\mathbf x, \ell) = \exp(-\gamma\, \lVert \mathbf x - \ell \lVert^2) $$
<그림 출처: 데스모스(desmos)>
rbf_kernel_svm_clf = Pipeline([
("scaler", StandardScaler()),
("svm_clf", SVC(kernel="rbf", gamma=0.1, C=0.001)) ])
상단 그래프 | 하단 그래프 | |
---|---|---|
gamma | 랜드마크에 조금 집중 | 랜드마크에 많이 집중 |
왼편 그래프 | 오른편 그래프 | |
---|---|---|
C | 규제 많이 | 규제 적게 |
SVC
의 kernel
기본값은 "rbf"
=> 대부분의 경우 이 커널이 잘 맞음SVC
의 "linear"
커널을 사용할 수 있음
하지만 훈련 세트가 크거나 특성이 아주 많을 경우 LinearSVC
가 빠름분류기 | 시간 복잡도(m 샘플 수, n 특성 수) | 외부 메모리 학습 | 스케일 조정 | 커널 트릭 | 다중 클래스 분류 |
---|---|---|---|---|---|
LinearSVC | $O(m \times n)$ | 미지원 | 필요 | 미지원 | OvR 기본 |
SGDClassifier | $O(m \times n)$ | 지원 | 필요 | 미지원 | 지원 |
SVC | $O(m^2 \times n) \sim O(m^3 \times n)$ | 미지원 | 필요 | 지원 | OvR 기본 |