티스토리 뷰
멀티캠퍼스 AI과정/06 Deep Learning
Deep Learning 04 - SVM (Support Vector Machine)
jhk828 2020. 10. 19. 17:21201019
# %reset
# pip install mlxtend
import numpy as np
from sklearn.svm import SVC
import matplotlib.pyplot as plt
from mlxtend.plotting import plot_decision_regions # Decision Boundary 그리기
import mglearn # 과학 계산용 그래프 그리기 (선 그래프, 히스토그램, 산점도 등)
# training data set 가져오기
x_data, t_data = mglearn.datasets.make_forge()
# x_data # array([[ 9.96346605, 4.59676542], -> 좌표값
# t_data # array([1, 0, 1, 0
# matplotlib을 이용해서 2차 평면에 점을 찍는다.
# - t_data가 0인 경우 red, 1인 경우 blue 점으로 찍는다.
# - 2차 평면에 점을 찍을 때는 scatter라는 함수를 이용한다.
x_data_red = x_data[t_data==0]
x_data_blue = x_data[t_data==1]
plt.scatter(x_data_red[:,0], x_data_red[:,1], color='r')
plt.scatter(x_data_blue[:,0], x_data_blue[:,1], color='b')
plt.show()
## sklearn을 이용하여 model 생성
# model = LogisticRegression()
model = SVC(kernel='linear')
model.fit(x_data, t_data)
# SVM은 support vecotr를 구하고 이를 이용해서 Decision Boundaries를 구한다.
# 학습이 끝나면 SVM에 의해서 구해진 support vector의 index를 알아낸다.
print(model.support_vectors_)
plot_decision_regions(X=x_data,
y=t_data,
clf=model,
legend=2) # clf 분류, legend 범례
plt.show()
201020
SVM (Support Vector Machine)
- Regression - 얼마나 -> sklearn의 SVR
- Classifcation - 어떤 것 -> sklearn의 SVC
- Deep Learning이 나온 후로 위상이 줄긴 했지만, 그래도 좋은 성능과 모델 자체가 가볍다는 장점이 있다.
- SVM의 Decision Boundaries (결정경계) : 데이터를 분류하기 위한 기준선
- 새로운 데이터가 들어왔을 때 기준선을 이용해서 어느 분류에 포함되는가를 예측한다.
- 예측해서 어디 포함되는지 분류 - Classification
- 분류 안의 label의 평균값 - Regression
- 새로운 데이터가 들어왔을 때 기준선을 이용해서 어느 분류에 포함되는가를 예측한다.
- 즉 SVM은 - 데이터를 선형으로 분리하는 최적의 선형 결정 경계를 찾는 알고리즘이다.
- 선형은 직선, 평면, 곡선도 포함하는 개념
- 선형은 1차 함수인가? -> X
- 1차 함수는 선형이다. -> O
- feature (입력되는 데이터, 독립변수)가 3개이면 Decision Boundaries는 평면에 표현된다.
- feature 개수가 증가하면 Decision Boundaries도 고차원으로 표현된다. -> 분리 초평면 (hyperplane)
- support vecotr
- 각 영역에 들어있는 데이터 포인트
- 각각의 group의 support vector들 간의 거리 (Margin)가 최대가 되는 support vector를 구한다.
- 장점 : support vector만 이용하는 기법이기 때문에 시간상 효율적이다.
- 주의점 : 이상치 (outlier)가 존재하면, 이 이상치가 support vector가 될 수 있고 이럴 경우 overfitting(과적합)이 ㅏ발생한다.
- Margin이 작아진다. -> Hard margin
- 결측치는 모두 처리하는게 맞지만 이상치는 모두 처리해야 할 대상이 아니다.
- 이상치가 특별한 상황에서 발생할 수 있는 데이터라면 오히려 중요한 데이터일 수 있다.
- 그렇기때문에 모델을 만들 때, 파라미터를 통해 어느정도 오류를 허용할지 설정한다.
- sklearn에서는 cost라고 표현되는 "C" hyper parmeter를 이용한다.
- C의 기본값은 1
- C 값이 커지면, 다른 범주에 있는 데이터 포인트를 적게 허용한다. -> 자세히 학습됨 -> Overfitting
- Kernel 기법
- 주어진 data를 고차원으로 projection하는 hyper parameter
- sklearn의 kernel 지정값
- linear (직선으로 Decision Boundaries가 구해질 때)
- poly (2D -> 3D)
- rbf (기본값. 고차원으로 사상)
- gamma - hyper parameter
- rbf 값을 이용할 때
- Decision Boundaries를 얼마나 유연하게 그릴지를 표현하는 값
- 데이터들이 영향력을 행사하는 거리
- gamma값이 커지면 구불구불
- 영향력을 행사하는 거리가 줄어든다.
- 정밀하게 Decision Boundaries 형성 -> overfitting
- gamma값이 작아지면 직선 형태
뒤에코드남음
'멀티캠퍼스 AI과정 > 06 Deep Learning' 카테고리의 다른 글
Deep Learning 06 - CNN, pooling (0) | 2020.10.26 |
---|---|
Deep Learning 05 - Decision Tree (0) | 2020.10.22 |
Deep Learning 03 - Tensorflow 2.1 DNN (0) | 2020.10.19 |
Deep Learning 03 - Tensorflow 1.15 DNN (0) | 2020.10.19 |
Deep Learning 02 - DNN, FC (Dense) layer, Back Propagation, Vanishing Gradient , Relu, Dropout (0) | 2020.10.19 |
댓글