머신러닝

본문 바로가기
사이트 내 전체검색


머신러닝
머신러닝

12. 서포트 벡터 머신

페이지 정보

작성자 관리자 댓글 0건 조회 2,780회 작성일 20-03-09 13:09

본문

12. 서포트 벡터 머신

퍼셉트론은 가장 단순하고 빠른 판별 함수 기반 분류 모형이지만 판별 경계선(decision hyperplane)이 유니크하게 존재하지 않는다는 특징이 있다. 서포트 벡터 머신(SVM: support vector machine)은 퍼셉트론 기반의 모형에 가장 안정적인 판별 경계선을 찾기 위한 제한 조건을 추가한 모형이라고 볼 수 있다.



1.PNG


서포트와 마진


다음과 같이 N개의 학습용 데이터가 있다고 하자.



2.PNG

판별함수모형에서 y는 +1, −1 두 개의 값을 가진다 

3.PNG

x 데이터 중에서 y값이 +1인 데이터를 x+ , y값이 -1인 데이터를 x 라고 하자.


판별함수 모형에서 직선인 판별 함수 f(x)는 다음과 같은 수식으로 나타낼 수 있다.

4.PNG


판별함수의 정의에 따라 y값이 +1인 그 데이터 x+에 대한 판별함수 값은 양수가 된다.
5.PNG


반대로 y값이 −1인 그 데이터 x에 대한 판별함수 값은 음수가 된다.
6.PNG


y값이 +1인 데이터 중에서 판별 함수의 값이 가장 작은 데이터를 x+라고 하고 y값이 −1인 데이터 중에서 판별함수의 값이 가장 큰 데이터를 x라고 하자.
이 데이터들은 각각의 클래스에 속한 데이터 중에서 가장 경계선에 가까이 붙어있는 최전방(most front)의 데이터들이다.
이러한 데이터를 서포트(support) 혹은 서포트 벡터(support vector)라고 한다. 물론 이 서포트에 대해서도 부호 조건은 만족되어야 한다.
 

7.PNG


서포트에 대한 판별 함수의 값 f(x+), f(x)값은 부호 조건만 지키면 어떤 값이 되어도 괜찮다.
따라서 다음과 같은 조건을 만족하도록 판별 함수를 구한다. 


8.PNG


다음 그림은 서포트벡터의 판별함수 값을 나타낸다.
 

9.PNG


이렇게 되면 모든 x+, x+ 데이터에 대해 판별함수의 값의 절대값이 1보다 커지므로 다음 부등식이 성립한다. 

10.PNG

판별 경계선 wTx−w0=0과 점 x+, x 사이의 거리는 다음과 같이 계산할 수 있다. 


11.PNG


이 거리의 합을 마진(margin)이라고 하며 마진값이 클 수록 더 경계선이 안정적이라고 볼 수 있다. 그런데 위에서 정한 스케일링에 의해 마진은 다음과 같이 정리된다. 

12.PNG


마진 값이 최대가 되는 경우는 ‖w‖ 즉, ‖w‖2 가 최소가 되는 경우와 같다.
즉 다음과 같은 목적함수를 최소화하면 된다. 

13.PNG


또한 모든 표본 데이터에 대해 분류는 제대로 되어야 하므로 모든 데이터 xi,yi(i=1,…,N)에 대해 다음 조건을 만족해야 한다. 위에서 스케일링을 사용하여 모든 데이터에 대해 f(xi)=wTxi−wo 가 1보다 크거나 -1보다 작게 만들었다는 점을 이용한다. 

14.PNG

15.PNG


라그랑주 승수법을 사용하면 최소화 목적함수를 다음과 같이 고치면 된다. 

16.PNG


여기에서 ai은 각각의 부등식에 대한 라그랑주 승수이다.
이 최적화 문제를 풀어 w, w0, a를 구하면 판별함수를 얻을 수 있다.


KKT(Karush–Kuhn–Tucker) 조건에 따르면 부등식 제한 조건이 있는 경우에는 등식 제한조건을 가지는 라그랑주 승수 방법과 비슷하지만 i번째 부등식이 있으나 없으나 답이 같은 경우에는 라그랑지 승수의 값이 ai=0이 된다.
이 경우는 판별함수의 값 wTxi−wo 이 −1보다 작거나 1보다 큰 경우이다. 

17.PNG


학습 데이터 중에서 최전방 데이터인 서포트 벡터가 아닌 모든 데이터들에 대해서는 이 조건이 만족되므로 서포트 벡터가 아닌 데이터는 라그랑지 승수가 0이라는 것을 알 수 있다. 

18.PNG


듀얼 형식


최적화 조건은 목적함수 L을 w, w0로 미분한 값이 0이 되어야 하는 것이다.  


19.PNG


이 식을 풀어서 정리하면 다음과 같아진다.


20.PNG

즉, 

21.PNG


이 두 수식을 원래의 목적함수에 대입하여 w, w0 을 없애면 다음과 같다. 

22.PNG

즉, 

23.PNG


이 때 a는 다음 조건을 만족한다. 

24.PNG

25.PNG


이 문제는 w를 구하는 문제가 아니라 a만을 구하는 문제로 바뀌었으므로 듀얼형식(dual form)이라고 한다. 듀얼형식으로 바꾸면 수치적으로 박스(Box)제한 조건이 있는 이차프로그래밍(QP; quadratic programming) 문제가 되므로 원래의 문제보다는 효율적으로 풀 수 있다.


듀얼형식 문제를 풀어 함수 L를 최소화하는 a를 구하면 예측 모형을 다음과 같이 쓸 수 있다. 

26.PNG

w0 

27.PNG

또는 

28.PNG

또는 

29.PNG

로 구한다.


라그랑주 승수 값이 0 즉, ai=0이면 해당 데이터는 예측 모형, 즉 w계산에 아무런 기여를 하지 않으므로 위 식을 실제로는 다음과 같다. 

30.PNG


여기에서 xTx+는 x와 x+사이의 (코사인)유사도, xTx는 x와 x사이의 (코사인)유사도이므로 결국 두 서포트 벡터와의 유사도를 측정해서 값이 큰 쪽으로 판별하게 된다.



Scikit-Learn의 서포트 벡터 머신


Scikit-Learn의 svm 서브페키지는 서포트 벡터 머신 모형인 SVC (Support Vector Classifier) 클래스를 제공한다.


실습.


from sklearn.datasets import make_blobs
import matplotlib.pyplot as plt
import matplotlib.font_manager as fm
path = 'C:\\Windows\\Fonts\\나눔고딕.ttf'
fontprop = fm.FontProperties(fname=path, size=18)

X, y = make_blobs(n_samples=50, centers=2, cluster_std=0.5, random_state=4)
y = 2 * y - 1

plt.scatter(X[y == -1, 0], X[y == -1, 1], marker='o', label="-1 class")
plt.scatter(X[y == +1, 0], X[y == +1, 1], marker='x', label="+1 class")
plt.xlabel("x1", fontproperties=fontprop)
plt.ylabel("x2", fontproperties=fontprop)
plt.legend()
plt.title("학습용 데이터", fontproperties=fontprop)
plt.show()


결과.


31.PNG


SVC 클래스는 커널(kernel)을 선택하는 인수 kernel과 슬랙변수 가중치(slack variable weight)를 선택하는 인수 C를 받는데 지금까지 공부한 서포트 벡터 머신을 사용하려면 인수를 다음처럼 넣어준다. 이 인수들에 대해서는 곧 설명한다.
 

SVC(kernel='linear', C=1e10)



SVC를 사용하여 모형을 구하면 다음과 같은 속성값을 가진다.

  • n_support_: 각 클래스의 서포트의 개수
  • support_: 각 클래스의 서포트의 인덱스
  • support_vectors_: 각 클래스의 서포트의 x 값. x+x+xx
  • coef_: ww 벡터
  • intercept_: w0w0
  • dual_coef_: 각 원소가 aiyiaiyi로 이루어진 벡터

 

댓글목록

등록된 댓글이 없습니다.


개인정보취급방침 서비스이용약관 모바일 버전으로 보기 상단으로

TEL. 063-469-4551 FAX. 063-469-4560 전북 군산시 대학로 558
군산대학교 컴퓨터정보공학과

Copyright © www.leelab.co.kr. All rights reserved.