티스토리 뷰

201019

 

 

# %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값이 작아지면 직선 형태

뒤에코드남음

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/11   »
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
글 보관함