일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 라쏘회귀 #엘라스틱넷 #조기종료
- Chap4 #ML #배치경사하강법 #경사하강법 #핸즈온머신러닝 #핸즈온
- Chap4 #릿지회귀 #정규방정식 #확률적경사하강법 #SGD #규제가있는선형모델
- adp #데이터분석전문가 #데이터분석자격증 #adp후기 #adp필기
- 키워드추출 #그래프기반순위알고리즘 #RandomSurferModel #MarcovChain #TextRank #TopicRank #EmbedRank
- 티스토리 #수학수식 #수학수식입력 #티스토리블로그 #수식입력
- 핸즈온머신러닝 #handson
- Chap4 #다항회귀 #PolynomialRegression #ML #머신러닝
- 티스토리블로그 #티스토리 #PDF #블로그PDF저장
- python #파이썬 #pandas #dataframe #dataframe생성 #valueerror
- Chap4
- 선형회귀 #정규방정식 #계산복잡도 #LinearRegression #Python #ML
- Chap4 #핸즈온머신러닝 #머신러닝 #핸즈온머신러닝연습문제
- 인덱싱 #슬라이싱 #python #파이썬 #수정및삭제 #원소의수정 #객체의함수 #keys#values#items#get#len#append#sort#sorted
- Chap4 #ML #미니배치경사하강법 #경사하강법 #머신러닝 #핸즈온머신러닝
- IDE #spyder
- ML #핸즈온머신러닝 #학습곡선 #편향분산트레이드오프
- 경사하강법 #핸즈온머신러닝 #머신러닝 #ML
- 파이썬 #Python #가상환경 #anaconda #python설치 #python가상환경
- 객체의종류 #리스트 #튜플 #딕셔너리 #집합 #Python #파이썬 #list #tuple #dictionary #set
- 확률적경사하강법 #경사하강법 #머신러닝 #선형회귀 #ML #Chap4
- python #dataframe #파생변수 #map #lambda #mapping
- Today
- Total
StudyStudyStudyEveryday
[파이썬머신러닝] 선형 서포트 벡터 머신 (SVM) 분류 본문
서포트 벡터 머신 (Support Vector Machine, SVM)
서포트 벡터 머신 : 매우 강력하고 선형/비선형/분류/회귀/이상치 탐색 등에 사용할 수 있는 다목적 머신러닝 모델이다.
머신러닝에서 가장 인기있는 모델에 속하며, SVM은 특히 복잡한 분류 문제에 잘 맞으며 작거나 중간 크기의 데이터셋에 적합하다.
선형 SVM 분류
위 그림을 보면 두 클래스가 직선으로 나뉜 것을 볼 수 있다. (선형적으로 구분)
- 왼쪽 그래프 : 점선으로 나타난 결정 경계를 만든 모델은 클래스를 적절히 분류하지 못하고 있다. 다른 두 모델은 잘 작동하지만, 결정 경계가 샘플에 너무 가까워 새로운 샘플에 대해서는 잘 작동하지 못할 것이다.
- 오른쪽 그래프 : 실선은 SVM 분류기의 결정 경계로 두 클래스를 잘 나눌 뿐 아니라 제일 가까운 훈련 샘플로부터 가능한 멀리 떨어져 있다.
=> 즉, SVM 분류기를 클래스 사이 가장 폭이 넓은 도로를 찾는 것으로 생각할 수 있다. 그래서 라지 마진 분류(large margin classification)이라고 한다.
=> 도로 바깥쪽에 훈련 샘플을 더 추가해도 결정 경계에 영향을 끼치지 않으며, 도로 경계에 위치한 샘플에 전적으로 결정된다. 이런 샘플을 서포트 벡터(support vector)라고 한다.
SVM은 특성의 스케일에 민감하다. StandardScaler 등을 이용해 특성의 스케일을 조정하면 오른쪽 그래프와 같이 결정 경계가 훨씬 좋아진다.
소프트 마진 분류
하드 마진 분류 (hard margin classification) : 모든 샘플이 도로 바깥쪽에 올바르게 분류되어 있음
- 하지만, 데이터가 선형적으로 구분될 수 있어야 제대로 작동함
- 이상치에 민감함
왼쪽 그래프는 하드 마진을 찾을 수 없으며, 오른쪽 그래프의 결정 경계는 이상치가 없던 결정 경계와 매우 다르고 일반화가 힘들다.
따라서, 이러한 하드 마진 분류의 문제를 피하려면 좀 더 유연한 모델이 필요하다.
소프트 마진 분류 (soft margin classification)
- 도로 폭을 가능한 넓게 유지
- 샘플이 도로 중간이나 반대쪽에 있는 등의 마진 오류(margin violation) 사이에 적절한 균형 유지
- 어느 정도 오류를 허용하는 형태임
사이킷런의 SVM 모델에 필요한 하이퍼파라미터 C를 낮게 설정하면 왼쪽 그림과 같은 모델을 만들고, 높게 설정하면 오른쪽 그림과 같은 모델을 만든다. 마진 오류는 일반적으로 적은 것이 좋지만 이 경우 왼쪽 모델에 마진 오류가 많지만 일반화가 더 잘 되었다.
* SVM 모델이 과대적합이면 C를 감소시켜 모델을 규제할 수 있다.
사이킷런으로 SVM 모델 훈련
import numpy as np
from sklearn import datasets
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.svm import LinearSVC
# 데이터 로드
iris = datasets.load_iris()
X = iris["data"][:, (2, 3)] # 꽃잎 길이, 꽃잎 너비
y = (iris["target"] == 2).astype(np.float64) # Iris virginica
# 특성 스케일 변경 및 데이터 훈련
svm_clf = Pipeline([
("scaler", StandardScaler()),
("linear_svc", LinearSVC(C=1, loss="hinge", random_state=42)),
])
svm_clf.fit(X, y)
svm_clf.predict([[5.5, 1.7]])
SVM 분류기는 로지스틱 회귀 분류기와 다르게 클래스에 대한 확률을 제공하지 않는다.
LinearSVC 클래스 대신 선형 커널을 사용하는 SVC로 대체할 수 있다.
SVC(kernel="linear", C=1)
* 해당 포스팅은 머신러닝 학습 중 핸즈온 머신러닝 2판을 참고하여 작성하였습니다. *
'DataScience > 핸즈온 머신러닝 Hands-on ML' 카테고리의 다른 글
[파이썬머신러닝] SVM 회귀 (0) | 2022.04.04 |
---|---|
[파이썬머신러닝] 비선형 서포트 벡터 머신 (SVM) 분류 (0) | 2022.04.02 |
[파이썬머신러닝] 로지스틱 회귀 (Logistic Regression) (0) | 2022.03.31 |
[파이썬머신러닝] 규제가 있는 선형 모델 - 릿지 회귀 / 라쏘 회귀 / 엘라스틱 넷 (0) | 2022.03.26 |
성능 측정 - 학습 곡선 (0) | 2022.03.25 |