⭐ 매우 강력하고 선형이나 비선형 분류, 회귀, 이상치 탐색에도 사용 가능한 다목적 머신러닝 모델
-> 특히 복잡한 분류 모델에 잘 들어맞으며 작거나 중간 크기의 데이터셋에 적합
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의 회귀 버전
'인공지능(AI) > 머신러닝' 카테고리의 다른 글
[핸즈온 머신러닝] 7장 앙상블 학습과 랜덤 포레스트 (0) | 2022.01.22 |
---|---|
[핸즈온 머신러닝] 6장 결정 트리 (0) | 2022.01.18 |
[핸즈온 머신러닝] 4장 모델 훈련 (0) | 2022.01.17 |
[핸즈온 머신러닝] 3장 분류 (0) | 2022.01.11 |
[핸즈온 머신러닝] 2장 머신러닝 프로젝트 처음부터 끝까지 (0) | 2022.01.08 |
댓글