Download as pdf or txt
Download as pdf or txt
You are on page 1of 28

SVM ( Support Vector Machine ) - D4R6

SVM계산을 어떻게 하는 것인가, SVM 은 기본적으로 최적화 제약이 있는 constraint optimization problem 이다. SVM 을
풀기 위해서는 제약이 있는 최적화를 풀어야 하는데, 이 때 사용 가능한 방법론 중에 가장 일반적인 방법이 라그랑지 방법이 있다.
라그랑지 방법을 SVM 에 적용을 해서 실제로 SVM 을 풀어보는 것으로 구성.

SVM 이란?
이항 분류기 Binary Classifier)
독립변수 xi 개체가 주어졌을 때, yj 가 −1, 1 혹은 A, B 두 개의 어떤 가능한 집단이 있고 어디에 속하는지 예측하는
그러한 머신으로 예측.
Binary Classification 의 대표적인 것이 Logistic Reg 은 Bernoulli Dist 에 근거 해서 그 기대 값인 1이 될 확률이 되
는 logit 변환을 xˉ 에 대한 선형 함수로 가정해서 푸는 방법.
SVM 은 통계하고는 상관이 없는 Computer Scientist 가 일종의 최적화 ( geometric ) 알고리즘으로서 먼저 제안을
했고, 좋은 성능을 판명되어서 많은 분야에 쓰게 되고, 통계 연구로 SVM 은 Logistic Regression 과 그리 멀리 떨어져
있지 않다. Ridge, LASSO 와도 연관이 있다.
굉장히 대표적으로 중요한 방법론 중의 하나.

기본적인 아이디어 와 SVM


통계학이 가지고 있는 기본적인 아이디어
통계학에서 출발을 하였다. 통계학에서의 가장 기본적인 정리는 데이터 라는 것이 확률 분포로부터 나왔다. 그 분포함수
를 찾는 것이 목표. 데이터가 나온 모분포를 알게 되면, 실제 모집단을 알고 그것을 가지고 의사 결정을 하는 것.

SVM

확률, 통계적 근간에서 나온 것이 아니라 xˉ 라는 독립변수를 다차원 공간상에 뿌렸을 때, 반응 변수의 값에 따라서 두 개
의 집단으로 분류가 된다. 공간상에 xˉ 들을 뿌려놓으면,

2차원의 x1 , x2 이면
빨간색은 y 가 −1 인 , 파란색은 y 가 1 인 그러한 값으로 보면, xˉ 들 상에서 두 개를 집단을 잘 분리하는 어떤 직선 하나
를 긋는 문제로 받아드릴 수 있다. 그럼 이 분류 경계가

SVM ( Support Vector Machine ) - D4R6 1


β0 + β1 x1 + β2 x2 = 0

로 표현이 될 것이다. 그럼 이항 분류 문제를 이 직선을 찾는 문제로 표현할 수 있다. 이 geometric 상에 여기 x 점 들을


기하적으로 가장 잘 분류하는 하나의 직선을 긋는 문제. 여기에는 어떠한 확률 분포의 가정도 필요가 없다.
통상적으로 통계학에서는 데이터를 Random Variable 로 보지만, Computer Science 에서는 데이터를 숫자로 본다.
이 숫자들의 거리 관계를 가지고 최적화를 하는 형태로 문제를 푼다. SVM 이 이러한 해당 방법론으로 볼 수 있다.

SVM 이론
분류 경계 ( Line / Hyperplane )
2 차원 : Straight Line, 3 차원 : plane, 4차원 이상 : Hyperplane - 어떤 공간의 subspace.
p 차원 공간이 있으면, p 차원에 대한 선형 식으로

ˉ) = β0 + β1 x1 + β2 x2 + ⋯ + βp xp = β0 + βˉT x
f(x ˉ=0

이와 같이 표현이 된다. 이 직선 (제약) 을 만족하는 점들의 모임이 Hyperplane.

위 그림과 같이 변수가 2개 x1 , x2 의 Line 은 이와 같이 된다. 두 집단을 나누는 분류 경계가 된다. 이 분류 경계 (함수)


를 찾는 것이 목적.
ˉ) = β0 + β1 x1 + β2 x2 = 0
f(x

어떤 xˉ 가 있을 때
f(xa ) > 0 → ya = 1
f(xb ) < 0 → yb = −1

우리의 목표는 1, −1 의 두개의 집단 을 구분해주는 하나의 Hyperplane 을 찾는 문제로 binary classification 을 해


석 할 수도 있다.

최적의 해 ( Optimal solution )

SVM ( Support Vector Machine ) - D4R6 2


같은 점인데, 두 집단을 나누는 선을 seperating hyperplane 이라고 부른다.
seperating hyperplane 은 unique 하지 않다. 그럼 이들 중에 가장 좋은 직선, 최적의 hyperplane 을 고민할 필요가 있
다.

이라는 것은 분류에 입각해서 본다면, 두 집단이 최대한 멀리 떨어져 있으면 좋다. 두 집단이 멀리 떨어져 있
Optimal

다는 것은 두 집단을 가르는 경계로부터 각 집단이 멀리 떨어져 있으면 좋은 것이다.

멀다 라는 개념 (distence) 은 직선과 집단 간의 거리를 이용해서 잰다. 그럼 직선과 집단간의 거리는 직선과 각 집


단에서 가장 가까운 점을 고르고, 그것과 선의 projection 된 거리를 잰다. 각 집단에서의 직선과의 거리는 같은 직
선을 고른다. 이 직선을 분류 경계. dashed line 은 일종의 tube 같은 것이다. 이 tube 의 넓이가 두 집단 사이의 거
리로 인식.

가 (a) 보다 훨씬 더 넓어서 좋은 분류 경계라고 볼 수 있다. 집단을 더 확실히 분류하므로.


(b)
수많은 seperating hyperplane 중에서 두 집단 사이의 거리를, tube 의 넓이를 가장 maximize 하는 그런 직선을 찾
는 문제. 그 문제는 결국, 직선과 점 사이의 거리 (직선과 각 집단과의 거리가 같다), 폭을 직선으로 부터의 Margin 이라
고 하는데, M 을 최대화 시키는
β0 + βˉT x
ˉ=0

이 직선을 찾는 문제로 만들 수 있다. 수학적 유도. 이 M 을 β, β0 의 식으로 만들어 본다.

SVM 수식 유도 ( Linear Separable 한 조건 )

SVM ( Support Vector Machine ) - D4R6 3


x∗는 임의의 점으로 β0 + βˉT xˉ = 0ˉ 직선으로 부터 가장 가까이 붙어 있는 점 이라고 해보자. 그럼 원하는 것은 이 점과 파
란색 직선 사이의 거리인 M Margin) 을 계산 하고 싶다. 이 길이를 β0 와 βˉ , xˉ 혹은 y 등 과의 변수로 표현을 해보도록
하자. xˉ, y 는 데이터 이므로.

원리 의 기하학적 해석.
Step 1 - SVM
파란색 직선에 원점에서 그은 수선, βˉ 라는 것을 확인 하는 것. vector 은 0 에서부터 direction 을 의미한다. 그래서 여
기있는 βˉ 는 직선이 가지고 있는 coefficient vector 이다. 이 βˉ 가 결국 이 직선과 수직이다는 것을 먼저 확인할 수 있
다.

기하적으로 βˉ 가 수직이라는 것은 두 vector 간의 inner product (내적) 가 0 이라는 것을 의미하고, 그것을 보이기 위
해서는 임의의 xa, xb 점이 있는데, 이 두 점은 파란색 선 위에 있다. blue line 사이 (xa − xb ) 의 vector 를 의미한다.
이 vector 와 βˉ 는 언제나 수직이다. 따라서 이 vector 와 βˉ 의 내적은
⟨βˉ, xa − xb ⟩ = βˉT (xa − xb ) = βˉT xa − βˉT xb = −β0 + β0 = 0
∵ β0 + βˉT xa = 0, β0 + βˉT xb = 0

xa , xb 모두 직선 상에 있으므로.

SVM ( Support Vector Machine ) - D4R6 4


곱을 계산할 때 row, column 인것 처럼 vector 끼리의 곱을 한 것.
inner product : Matrix

즉, (xa − xb ) 의 직선과 βˉ 는 수직이므로 언제나 독립(indenpendent) 이다.


관찰할 수 있는 수리적인 사실.
β0 + βˉT x
ˉ = 0 :  blue line ⊥βˉ

기하학, β 가 직선에 대한 Normal 이고, Normal → 이 직선의 intercept 를 제외한 coefficient 값. 그래서 Normal
과 직선은 언제나 수직.

Step 2 - MGeometric Margin) 을 구하기 위한 수리적 유도

βˉ 는 방향이 상관있지, 길이는 길어질 수도 있고 짧아질 수도 있다.


θ : 이 βˉ 와 x
ˉ∗ 가 이루는 방향 vector.
이것을 직각 삼각형으로 본다면, cos(θ) 의 정의로 본다면 전자

M ⟨x ˉ βˉ⟩
ˉ∗ − x
cos(θ) = ∣∣xˉ∗ − xˉ∣∣
= ∣∣xˉ∗ − xˉ∣∣∣∣βˉ∣∣

기하학 ( Vector 공간 ) 에서는 이렇게 정의 후자 를 한다.


즉, 중등 수학과 의 정의를 비교하면,

M ⟨x ˉ βˉ⟩
ˉ∗ − x ⟨x ˉ, βˉ⟩
ˉ∗ − x βˉT xˉ∗ − βˉT xˉ βˉT xˉ∗ +β0
∣∣xˉ∗ − xˉ∣∣
= ∣∣xˉ∗ − xˉ∣∣∣∣βˉ∣∣
⇒M = ∣∣βˉ∣∣
= ∣∣βˉ∣∣
= ∣∣βˉ∣∣

는 점 위의 직선이 아니다. β0 이유는 참조. M 을 β 에 대한 식으로 바꾸었다.


ˉ∗
x
여기서 βˉ 는 방향에 대해서 이야기 하지, 길이에 대해서는 아무런 이야기가 없다.
길이에 대한 이야기가 없으면, βˉ 는 굉장히 많다.

SVM ( Support Vector Machine ) - D4R6 5


Step 3 - M Geometric Margin) 을 구해보자. → ∣∣β∣∣ = 1 로 표준화 시킴.
(1, 1), (2, 2) vector 는 똑같다. 따라서 거기에 대한 직선도 하지 않다. xa + xb = 0 과 2xa + 2xb = 0 이
Unique

같은 직선 인 것 처럼, vector 의 길이만 다르다. 따라서 길이를 딱 specify 하지 않으면 vector 가 unique 하지 않다.
그래서 vector 를 하나로 표현하기 위해서 "βˉ" 의 길이를 편의상 1 로 가정하자. 그러면 결국, M 이라는 것은
βˉT x
ˉ ∗ + β0
∣∣βˉ∣∣ = 1, M= = βˉT x
ˉ ∗ + β0
∣∣βˉ∣∣

길이 이므로, 아래와 같이 나눠서 볼 수 있다.

M ( Margin )은 항상 > 0 이다.


ˉ
x∗
가 직선 ( blue line ) 의 오른쪽에 있다면
β0 + βˉT x
ˉ∗ > 0 → M = β0 + βˉT x
ˉ∗ , y∗ = 1

ˉ∗
x 가 직선 ( blue line ) 의 왼쪽에 있다면
M 은 길이 이기 때문에 0 보다 작으면 안된다.

β0 + βˉT x
ˉ∗ < 0 → M = −(β0 + βˉT x
ˉ∗ ), y∗ = −1

위 두 식을 취합하게 되면 ( ∣∣βˉ∣∣ = 1 이라는 가정 ) Margin 은


∴ M = y∗ (β0 + βˉT x
ˉ∗ )

이고, Margin (M) 을 βˉ 와 데이터 로 표현하였다. 그래서 주어진 자료


(x1 , y1 ), ⋯ , (xn , yn ) 이 있으면 이 때, yi 값에 따라서 1 인 집단과 −1 인 집단이 직선 " β0 + βˉT x
ˉ = 0 " 으로 완
벽히 나누어 진다고 하면 Linearly Separable 하다고 말할 수 있다. 계속 이야기 하는 그 상황.

SVM ( Support Vector Machine ) - D4R6 6


은 직선과 데이터 사이의 거리를 나타내므로 Linearly Separable 하다는 것은 이런 경우를 보면 이 말은 무슨
Margin
말 이냐면 Margin 이 항상 0 보다 큰 것을 의미한다.
yi (β0 + βˉT x
ˉi ) > 0, i = 1, 2, ⋯ , n

만약 오른편 (β0 + βˉT xˉ > 0) 에 빨간 점 (yi = −1) 이 있다면, 이 선은 Linearly Separable 하지 않다. yi (β0 +
ˉi ) < 0 이므로. 따라서 Linearly Separable 하다는 것은 위와 같이 Margin 은 항상 0 보다 크다.
βˉT x

즉, f(x) = 0 이라는 직선의 구조에 + 집단은 우측 상단에 있고, - 집단은 좌측 하단에 있다면, 두 집단이 직선으로부
터 완벽히 separable 하다고 하고, M Geometric Margin) 은
β0 + βˉT x
ˉi ,  if yi = 1
Mi = { } = yi (β0 + βˉT x
ˉi )
−(β0 + βˉT x
ˉi ),  if yi = −1

이렇게 정의가 된다. 그럼 어떤 점과 M 과의 거리는 이렇게 정의가 된다.

을 찾자.
Step 4 - Optimal MGeometric Margin)

그럼 M1 , M2 , ⋯ , Mn 이 있을 때, 그 중 제일 작은 녀석 M 이라고 한다면 우리가 계산하고 싶어하는 직선과 그룹 사


이의 거리는 그 가장 작은 Geometric Margin 을 이야기 하는 것.

최적의 직선이라는 것은 집단과 직선 사이의 거리(가장 가까운 데이터와의 거리) 를 최대화 시키는 것. 이 M 을 모
든 데이터로부터의 Geometric Margin 중에 제일 작은 녀석

우리는 이 제일 작은 녀석의 M 을 Maximize 하는 것. 이 개념을 수리적으로 정식화 해보면

SVM ( Support Vector Machine ) - D4R6 7


한 자료 (yi , xˉi ), i = 1, 2, ⋯ n 에 대해서 최적의 직선 (hyperplane) " β0 + βˉT xˉ = 0 " 은
Linearly Separable
다음과 같이 표현할 수 있다.
maxβ0 ,βˉ M,
subject to ∣∣βˉ∣∣ = 1, yi (β0 + βˉT x
ˉi ) ≥ M, i = 1, ⋯ , n

여기서 M 은 제일 가까운 점과의 거리 Geometric Margin


제약 조건은 ∣∣βˉ∣∣ = 1 이고, 모든 점들의 Geometic Margin 의 최소 값이 M 보다 크거나 같아야 한다. 그리고 이 M
을 최대화 시키는 β0 와 βˉ 를 계산을 하면 된다.

여기서 M 은 주어진 Xˉ i 들 중 hyperplane 과 가장 가까운 점과 직선의 거리 ( Geometirc Margin ) 을 나타낸다.


( 따라서 β0 와 β
ˉ 의 함수 이다. )

이것이 SVM 을 푸는 원리. 그런데 M 이라는 것이 복잡해 보이니 간편하게 표현해 보자.

Step 5 - 앞에서 썻던 제약 조건을 바꿔보자. → β 의 길이는 모르겠지만, ∣∣βˉ∣∣ = M1 제약

는 vector 이므로 길이 와는 상관 없이 방향성 이므로, ∣∣ ⋯ ∣∣ Norm 은 어떻게 제약을 잡아줘도 상관이 없으므로,
βˉ
수식상 편하게 썼던 ∣∣βˉ∣∣ = 1 → ∣∣βˉ∣∣ = M1 이라고 바꿔 써보자. 여기서 M 은 바뀌는 숫자.
1 1
∣∣βˉ∣∣ = → ˉ =M
M ∣∣β ∣∣

이 직선과 가장 가까운 데이터(점) 들과의 거리를 M 으로 정의. M 은 직선에 따라서 계속 바뀌는 숫자. 위와 같은 제약
이 있으면 βˉ 가 unique 하게 define 된다. 어떤 하나의 값으로 제약을 주면, 하나의 값으로 고정이 된다.
1 βˉT x
ˉ ∗ + β0
M= ˉ = ˉ → 1 = βˉT x
ˉ ∗ + β0
∣∣β∣∣ ∣∣β∣∣

유도식

SVM ( Support Vector Machine ) - D4R6 8


이렇게 제약식을 바꾸면, 가장 가까운 점과의 M ( Margin ) 이 1 로 표준화가 된다. 직선과 가장 가까운 점의 거리 M
이 항상 1 이 된다.
그리고 cos 의 정의를 이용한 부분을 다시 적용해 보면
M ⟨x ˉ, βˉ⟩
ˉ∗ − x
cos(θ) = = ⇔ 1 = ⟨x ˉ, βˉ⟩
ˉ∗ − x
∣∣x
ˉ −x
∗ ˉ∣∣ ∣∣x∗
ˉ −x ˉ∣∣∣∣βˉ∣∣

 첫 번째 방법에서는 βˉ vector 를 1 로 표준화 시켰다.

 두 번째 방법에서는 βˉ 의 길이는 모르지만, M ( Margin ) 이 1 로 표준화가 된다.

이렇게 바꾸면, 앞의 최적화 식이 M 을 최대화 하는 문제는


1
∣∣βˉ∣∣ = ˉ
M
βˉ 를 최소화 하는 문제와 똑같게 되므로
maxβ0 ,βˉ M,
subject to ∣∣βˉ∣∣ = 1, yi (β0 + βˉT x
ˉi ) ≥ M, i = 1, ⋯ , n

에서
1
max M ⇔ min∣∣βˉ∣∣ ⇔ min∣∣βˉ∣∣2 = βˉT βˉ, minβ0 ,βˉ βˉT βˉ,
2
ˉ 1 ˉ T ˉ
subject to ∣∣β ∣∣ = , yi (β0 + β X i ) ≥ 1, i = 1, ⋯ , n
M

이와 같이 변하게 된다.
min∣∣βˉ∣∣ 를 하거나 min∣∣βˉ∣∣2 을 하는 것은 똑같다.
상수 12 를 곱해 주는 부분도 minimization 에도 아무 문제가 없다.

아까 있던 제약 중에 ∣∣βˉ∣∣ = 1 이라는 제약 자체는 이제 사라집니다. 사실 ∣∣βˉ∣∣ = M1 의 제약도 M 도 고정된 숫자가


아니라 이미 이 관계가 β ( Objective Function ) 안에 들어가 있으므로 βˉ 에 따라 변하는 것이 아니므로, 실상 아래와
사라지는게 맞다. 그러나 설명상 일단 써두기는 한다.

제약식으로 이 optimization 문제로 바뀌게 된다. 굉장히 간단한 문제가 된다.

SVM ( Support Vector Machine ) - D4R6 9


최적화 할 때, 목적함수 ( objective function ) 은 quadratic 이고, constraint linear 는 convex optimization 문제
로 바뀌게 된다. 이 문제를 βˉ & β0 에 대해서 풀면 직선을 구하게 되고, 그 직선은 Maximum Marginal 이 되는 직선을
찾게 된다.

이 과정은 최적의 직선을 구하는 문제를 어떻게 수리적으로 βˉ 에 대한 함수로 표현하느냐에 대한 이야기. 최종적으로 구하고자
하는 β0 와 βˉ 그 직선, Hyperplane 은 이 문제를 풀게 됨 으로써 구해질 수 있다. 이러한 문제를 Maximal Margin Classifier
라고 한다.
우리가 하고자 했던 것은 직선과 데이터 클라우드로부터의 Margin 을 최대화 시키는 그러한 분류 경계를 찾는 것 이기 때문에 그
분류 경계는 결국 Margin 을 Maximize 하는 분류 경계. 따라서 이것을 Maximal Magin Classifier 으로 부르게 된다.
이 문제를 이렇게 정식화 하자!!!
이 문제는 결국, 여기 나와 있는 것 처럼 우리가 가정한 것은 두 데이터 클라우드가 Linearly Separable 한 경우 이렇게 풀면 된
다.

Linearly Separable 한 경우가 아주 strong assumption,이 가정 하에는 쉽게 최적의 직선을 풀 수 있다.

실제 데이터는 사실 Linear Separable 하지 않는 경우가 대부분이다. Linear Separable 하다는 걸 푸는 것은 통계적인 부분 보


다 산수가 맞다. 이런 경우에는 어떻게 하느냐

Linear Separable 하지 않으면?

SVM ( Support Vector Machine ) - D4R6 10


문제가 생기는데, 제약 조건
yi (β0 + βˉT x
ˉi ) ≥ 1, i = 1, ⋯ , n

제일 가까운 것과의 거리가 1 이면, 데이터가 섞여 있으므로 1보다 크게 만족 시킬 수가 없다.

Linear Inseparable 하므로, Separating Hyperplane 이 존재하지 않는다. 즉, 어떤 직선도


yi (β0 + βˉT x
ˉi ) ≱ 1, ∀i

위반) 데이터가 생기기 때문에 separable 하지 않기 때문에 어떤 직선을 긋더라도 특정 몇개 포인트 들은 반대


violation (
에 있으므로 위의 식과 같이 된다. 제약 조건을 만족 시킬 수가 없다. 말은 솔루션이 없다. 이럴때, optimization 문제
cloud
에서 해줄수 있는 간편하고 좋은 방법은 이 제약을 완화시켜주는것.
이 제약에
yi (β0 + βˉT x
ˉi ) ≥ 1, i = 1, ⋯ , n

만족을 못하는 데이터가 있을 수 있으니 ξ 이만큼 위반 해도 되.


yi (β0 + βˉT x
ˉi ) ≥ 1 − ξi , ξi > 0, i = 1, ⋯ , n

ξi : Slack ( 느슨한) variable : 완화 시켜주는 완충 장치.

SVM ( Support Vector Machine ) - D4R6 11


점 때문에, 어떤 직선을 그어도 모든 보라색과 녹색을 완벽한 직선을 아무리 해도 그을 수가 없다. 이것은 위반할
violation
수 밖에 없다. 그래서 ξ1 만큼은 위반해도 된다고 한다. 그 위반해도 되는 정도를 ξi 로 표현한다. 그러면 ξi 이 값에 따라서
0 보다 작은 값을 가져도 되는 것. 이 ξi 라는 값이 내가 위반을 한 정도. 예를 들어서 위반을 안해도 되는 것이면 ξi = 0 . 위
반을 하면 그 길이만큼 ξi 를 빼줘야 이 제약을 만족하기 때문에 ξi 를 빼주게 된다.
n n
1 1
minβ0 ,βˉ ∣∣βˉ∣∣2 + C ∑ ξi = minβ0 ,βˉ βˉT βˉ + C ∑ ξi
2 2
i=1 i=1

그런데, 이렇게 제약을 완화 시킬 때, 한가지 중요한 점은 가능하면 ξi 는 제약을 위반하는 것이기 때문에 가능하면 위반을 안
하게 하는것이 좋으므로, 위반 하는 양에 비례해서 벌점을 부과하게 된다. control 하는 것이 C 이고 C 가 만약에 0 이면, 이
것이 위반을 하던지 말던지 가져가면 되고, 무한대면 위반을 하면 안되는 것이므로 굉장히 strict 한 solution 을 주게 된다.

이전의 Maximal Margin Classifier 에서 non-separable 한 경우에 Maximal Margin Classifier 를 바로 적용할 수 없
기 때문에 이것을 완화 시켜준 이러한 형태의 Object 이 문제를 Soft Margin Classifier 라고 한다. 그리고 이것이 흔히 말
하는 Linear SVM (선형 SVM 이다.

C>0은 제약을 위반할 때 부여하는 비용으로 해석할 수 있으며, LASSO 문제의 λ 와 비슷한 역할을 하는 조율 모수
의 역할을 하며 사용자가 설정하게 된다. Cross-Validation 과 같은 방법을 통해서 C 값을 설정 하는 것.
이 문제를 계산으로 풀 것, Linear SVM 을 직접 계산해서 풀 것인데 거기까지 가는 과정 설명.

Lagrangian (라그랑지) Theory 1 [ Definition ]

SVM ( Support Vector Machine ) - D4R6 12


경제학, 미시경제 예산 최적화 할 때 많이 쓰는 방법. General theroy 를 소개.
일반적인 constrainted optimization problem ( 제약이 있는 최적화 문제 ) 에서 푸는 아주 general 한 방법. 우리가 풀고
자 하는 문제는 다음과 같이
minβ f(β )
subject to hi (β ) ≤ 0, i = 1, ⋯ , n

f 는 목적 함수. β 는 optimization 하는 변수, parameter. 그리고 hi 는 일종의 제약 (constrainted) 이다. 물론 equality


constrainted 도 있다. "=" 으로 되는 것도 있다. 그러나 여기서는 편의 상 뺀다. 제약이 있는 최적화를 풀 때, 라그랑지 함수
라는 것을 정의 할 수 있는데
n
L(β , α) = f(β ) + ∑ αi hi (β )
i=1

목적 함수f 에다가 α 를 곱하고 hi (β ) 선형식의 제약식을 더해준 함수 를 라그랑지 함수 라고 한다. 제약이 있는 최적화 식
에서 라그랑지 함수는 이 함수를 의미한다. 이 때 도입한 αi = (α1 , ⋯ , αm ) ≥ 0 이 변수를 "dual variables" 또는
"Lagrange multiplier" 라고 이야기 한다. 이 때 제약이 있을 때는 "Lagrange multiplier" 는 항상 0 보다 크거나 갔다는
조건이 있다. 이 정의를 라그랑지 함수라고 한다.

Lagrangian (라그랑지) Theory 2 [ Definition ]


Lagrangian dual function : dual variables function. g(α )

n
g(α) = minβ L(β , α) = minβ {f(β ) + ∑ αi hi (β )}
i=1

β 는 primal 문제에 있는 원래의 변수, α 는 dual variable 의 함수. β 에 대해서 minimize. 그러면 원래 β 와 α 로 이루어
진 라그랑지 함수를 β 를 minimization 하게 되면, β 의 role 이 없어진다.
n
minβ {f(β ) + ∑ αi hi (β )} → function of α
i=1

이것을 α 에 대한 함수로 볼 수 있고, 이것을 dual function g(α) 이라고 한다. 그러면 이 때 우리가 무엇을 보일 수 있냐
면,
dual function [g(α )] 는 언제나 primal function f(β ∗ ) 보다 항상 작거나 같다.
g(α) ≤ f(β ∗ )

β∗ 가 우리가 구하고 싶은 constrainted 가 있는 하에서의 optimizer 제약식.

즉, 원래 함수 f(β ) 의 low bound, 하한 값을 제공해 주는 것. 이 둘의 값이 같으려면 성립할 조건은 제일 붙어있는 g(α)


를 선택하면, 같아진다. 같아지려면 g(α) 를 f(β ∗ ) 로 끌어당겨야 한다. 식으로 볼 때, 같게 만드려면 g(α) 를 가능한 크게
만들어야 한다. 따라서 문제를 이와 같이 정의 할 수 있다.

SVM ( Support Vector Machine ) - D4R6 13


Dual Problem.

dual function g(α) 함수를 α 에 대해서 최대화를 시키면, 그것이 원래 목적 함수의 Best lower bound ( 가장 최적의 하
한 ) 인 것이다.
α∗ = argmaxα g(α)

Solution 정리
일반적으로 우리가 f 목적 함수가 convex 인 경우에는 이 두 개가 같아 진다.
그래서 이것을 Dual Problem 이라고 한다.
1 번 방법

이렇게 문제를 바로 풀어도 되지만,

2번 방법
라그랑지 방법을 이용해서 dual function 을 정의 한 후에 아래와 같이 정의 하고 푼다.

SVM ( Support Vector Machine ) - D4R6 14


이 때 제약은 α ≥ 0. 이 문제를 풀어도 된다. α∗ 로 정의가 되고 이 α∗ 로 부터 β ∗ 를 recover 할 수가 있다. 그렇게
풀 수도 있다. constraint optimization 에서는 실제 그냥 있는 그 문제를 그대로 풀어도 되고, dual problem 이라고
해서 그것의 Lagrange dual parameter 에 대한 문제로 새롭게 정의해서 풀 수도 있다.

만약에 이 β ∗ 를 1 번 원래 문제의 Optimize 이고, 이 α∗ 를 Dual 의 Optimize 라고 한다면,


Optimal α ∗ , β ∗

α ∗ = argmaxα g(α ), g(α ) ≤ f(β ∗ )


이것으로 인해서 α∗ 가 정의가 되고, 이 α∗ 로부터 β ∗ 를 recover 할 수가 있다.
β ∗ : original(primal) optimizer , α ∗ : dual optimizer

이 둘 사이에는 어떤 관계가 있는가?, 어떤 조건을 만족해야 하는가?


Let β ∗ and α ∗ are primal and dual problem of 1. They must satisfy
 Stantionary
라그랑지 함수를 미분해서 0 놓고 풀어서 그 솔루션이 α∗ , β ∗
n
▽L(β , α) = ▽f(β ∗ ) + ∑ αi∗ ▽ hi (β ∗ ) = 0
i=1

 Complementary Slackness : 설명이 좀 필요한데, 받아들이면 된다.


αi∗ hi (β ∗ ) = 0, i = 1, ⋯ , n

라그랑지 파트 뒤에 부분의 곱이 항상 0. 이어야 한다.

가 optimizer 이면 위 두 가지를 만족하는 것이고, 심지어 Convex 한 문제 에서는 이 두 가지를 만족 해야 하


α∗ , β ∗
고, 심지어 convex 함수 에서는 이 두 가지를 만족 하는 것이 Let β ∗ and α∗ are primal and dual problem 이 된
다.
다시 이야기 하면 이 두 가지 조건을 만족하는 α, β 를 구하면 그것이 solution 이다. 이 두 가지 조건을 KKT condition
이라고 부른다. 그래서 라그랑지 이론을 이용해서 풀 때는 이 KKT 컨디션을 바탕으로 primal problem 과 dual
problem 을 유도해서 풀어 내는 것.
a.k.a Karush-Kuhn-Tucker KKT conditions.

컨디션을 유도, 이것을 바탕으로 primal problem 을 풀거나, dual problem 을 다시 유도해서 푸는 두 가지를 왓
KKT
다갔다 하면서 풀게 된다. 이 아이디어를 SVM 에 적용해서 보자.

함수를 이용한 Linear SVM 접근 방법.


Lagrange
앞에서 정의했던 Linear SVM 은

SVM ( Support Vector Machine ) - D4R6 15


n
1
minβ0 ,βˉ,ξi βˉT βˉ + C ∑ ξi
2
i=1

subject to  yi (β0 + βˉT x


ˉi ) ≥ 1 − ξi , ξi ≥ 0, i = 1, ⋯ , n

이와 같이 정의가 된다.
이 때, 앞에서 말해 왔던 βˉ 와, Primal variable 는 무엇이냐면,
β → [βˉ, β0 , ξ1 , ⋯ , ξn ] →  primal variable 

subject to 다음 두 가지가 제약이다. 둘 다 inequality constraint 이다.


subject to yi (β0 + βˉT x
ˉi ) ≥ 1 − ξi , ξi ≥ 0, i = 1, ⋯ , n

그래서 아까 "hi (β ) ≤ 0" 이런 것 이었으므로 이것을 잘 정리하면


1 − ξi − yi (β0 + βˉT x
ˉi ) ≤ 0, −ξi ≤ 0

이것이 제약이 되서 라그랑지 함수는


n
L(β , α) = f(β ) + ∑ αi hi (β )
i=1

① object function 을 그대로 가져다 쓰고,


n
1 ˉT ˉ
f(β ) = β β + C ∑ ξi
2
i=1

② constraint 부분에 대입
n
∑ αi hi (β ) = 1 − ξi − yi (β0 + βˉT x
ˉi )
i=1

1 − ξi − yi (β0 + βˉT x
ˉi ) ≤ 0, −ξi ≤ 0
n
∑ αi {1 − yi (β0 − βˉT x
ˉi ) − ξi }, where h1i = {1 − yi (β0 − βˉT x
ˉi ) − ξi }
i=1

그리고 앞에 αi Lagrange Multiply 를 넣어주고

③ α 썼으니까, 새로운 변수로, γ 를 사용하여 constraint 부분 추가.


n
−γi ∑ ξi , where ξi = h2i
i=1

따라서 ①, ②, ③ 을 취합 하면,

SVM ( Support Vector Machine ) - D4R6 16


n n n
1 ˉT ˉ
L(β , α) = β β + C ∑ ξi + ∑ αi {1 − yi (β0 − βˉT x
ˉi ) − ξi } − γi ∑ ξi
2
i=1 i=1 i=1

Largrange Multiplier α, γ . 이것이 라그랑지 함수.

Karush-Kuhn-Tucker KKT conditions 유도.


조건 1.
 Stationary condition - KKT
라그랑지 함수를 미분해서 0 놓고 풀어서 그 솔루션이 [ α∗ , β ∗ ]
n
▽L(β , α) = ▽f(β ∗ ) + ∑ αi∗ ▽hi (β ∗ ) = 0
i=1

각각의 primal variable 에 대해서 β 값에 대해서 미분.

Primal variable 는
βˉ, β0 , ξ1 , ⋯ , ξn

이므로 이 변수들로
n n n
1 ˉT ˉ
L(β , α) = β β + C ∑ ξi + ∑ αi {1 − yi (β0 − βˉT x
ˉi ) − ξi } − γi ∑ ξi
2
i=1 i=1 i=1

미분을 해서 0 을 놓는다.

 βˉ (vector) 미분
n n

L(β , α) = βˉ − ∑ αi yi x
ˉi = 0 ⟶ ∑ αi yi x
ˉi = βˉ
∂βˉ i=1 i=1

 β0 (constant) 미분
n

L(β , α) = ∑ αi yi = 0
∂β0
i=1

 ξi , (i = 1, ⋯ , n)


L(β , α) = C − αi − γi = 0 ⟶ C − γi = αi
∂ξi

즉, 이 사이에서는 1, 2, 3 번을 반듯이 만족해야 한다.


βˉ, β0 , ξ1 , ⋯ , ξn

이것을 만족하는 값들이 SVM 문제의 솔루션의 답.

SVM ( Support Vector Machine ) - D4R6 17


 Complementary Slackness - KKT 조건 2.
αi∗ hi (β ∗ ) = 0, i = 1, ⋯ , n
n
αi {1 − yi (β0 − βˉT x
ˉi ) − ξi } = 0, γi ∑ ξi = 0
i=1

의 계산.
Linear SVM
따라서 이 조건을 만족하는 α, βˉ, β0 , ξi 가 결국에는 solution 이라는 것. 이 두 가지 조건, " Stationary &
Complementary lackness " 을 가지고 dual problem 을 정의해보자.

α∗ = argmaxα g(α), g(α) ≤ f(β ∗ )

dual problem

Largrange 함수를 "primal variable" βˉ (vector) , β0 (constant) , ξi (constant) 에 대해서 minimize 한 것이다.
최적화 시킨 그 값을 집어넣은 값. 결국에는 원래의 식 에다가 Stationary condition 이 조건을 대입을 하면 "primal
variable" 은 β
ˉ (vector) , β0 (constant) , ξi (constant) 가 다 사라진다. (아마 당연할 듯) 즉, α 만 남는다. 그것이
dual 함수. 이 "Stationary" 를 만족하는 것이 optimal 한 솔루션. 이것의 constraint 를 라그랑지 함수에 집어넣으면,
그것이 dual 함수 g(α) 가 된다.

위에서 구한 condition ( 1, 2, 3 ) 3 가지 조건을 Lagrange 함수에 집어 넣어 보자.


n n
∑ αi yi x
ˉi = βˉ, ∑ αi yi = 0, C − γi = αi
i=1 i=1

n n n
1
L(β , α) = βˉT βˉ + C ∑ ξi + ∑ αi {1 − yi (β0 − βˉT x
ˉi ) − ξi } − γi ∑ ξi
2
i=1 i=1 i=1

다음과 같은 dual function 을 구할 수 있다.


βˉ = ∑i=1 αi yi xˉi , βˉ = ∑j=1 αj yj x
n n
ˉj
→ 12 βˉT βˉ = 12 ∑i=1 ∑j=1 αi αj yi yj x
n n
ˉTi x
ˉj
→ − ∑i=1 αi {1 − yi (β0 − βˉT x
n n n
ˉi ) − ξi } = − ∑i=1 ∑j=1 αi αj yi yj x
ˉTi x
ˉj

C − γi = αi
→ C ∑ni=1 ξi − ∑ni=1 αi ξi − ∑ni=1 γi ξi = 0

∑ni=1 αi yi = 0
→ ∑ni=1 αi yi β0 = β0 ∑ni=1 αi yi = 0

따라서 남는 부분은 ∑ni=1 αi

SVM ( Support Vector Machine ) - D4R6 18


n n n
1
g(α) = ∑ αi − ∑ ∑ αi αj yi yj x
ˉTi x
ˉj
2
i=1 i=1 j=1

모두 없다. SVM 함수의 dual function 이 된다.


βˉ, β0 , ξ :
이 dual problem 을 α 에 대해서 maximize 하게 된다. 이 때, α 가 가져야 하는 조건은
α ≥ 0, γ ≥ 0 : 이유는 dual variable 들의 함수 이므로 γ 에대한 제약은 존재 해야 한다.

이 γ 의 제약이 어떻게 표현이 되냐면


C − γi = αi ⟶ γi + αi = C, [max : C], α, γ ≥ 0

이 두 가지 조건을 만족 시키기 위해서는


0 ≤ αi ≤ C, i = 1, ⋯ , n

이와 같이 되고, 이 조건이 되면 γ 는 무조건 0 보다 크므로 γ 는 사라지게 된다.


또 하나 α 의 제약이 살아있는 것은
n
∑ αi yi = 0
i=1

이 제약은 살아 있어서 이 두개의 constraint 를 만족 하면서 dual function 의 maximize 하면 이 문제를 풀 수 있게 된다.

그런데 이 문제를 이렇게 만들면, 이 문제는 사실은 Optimization Problem 에서 가장 일반적인 형태중의 하나인
Quadratic Programming 이라는 그런 형태의 문제.

Quadratic Programming
차 함수. α 에 대한 2차 함수. 제약(constraint) 은 선형. 굉장히 standard 한 것이어서 이것을 푸
Objective function : 2
는 알고리즘은 모든 언어에 다 있다. Solver 가 다 있다.

SVM ( Support Vector Machine ) - D4R6 19


Linear SVM : dual problem 을 계산을 해서 유도를 했다. 그 문제를 보면 Standard 한 Quadratic Programming! 문제
로 된다.
똑같은 식을 행렬로 표현 .
n n n
1
maxα1 ,⋯ ,αn ∑ αi − ∑ ∑ αi αj yi yj x
ˉTi x
ˉj
2
i=1 i=1 j=1

1 T ˉ∗ ˉ ∗ = yi yj x
→ maxαˉ (1ˉT α
ˉ− αˉ K αˉ ), K ij ˉTi x
ˉj
2
1 T ˉ∗
(⇔ minαˉ (−1ˉT α
ˉ+ α ˉ K α ˉ ))
2
Constraint 부분도 Vector 로 표현, αˉ 가 component-wise (element-wise)
Constraint 1 : 0ˉ ≤ αi ≤ C 1ˉ, (i = 1, ⋯ , n),
n
Constraint 2 :  ∑ αi yi = 0, yˉT α
ˉ = 0, (⇔ 0 ≤ yˉT α ≤ 0)
i=1

yˉ 와 αˉ 내적이 0 과 같다. Vector, Matrix 의 형태로 되었다.


QP Solver 를 이용할 수 있다.

Toy Example : Separable Case.

library(kernlab)

# Toy Example
set.seed(2)
n <- 20
x1 <- rnorm(n)
x2 <- rnorm(n)
x <- cbind(x1, x2)
beta <- c(1,1)
를 주려면
# separable case. - Standard deviation : 0
e <- rnorm(n, 0, 0)
# x 와 beta의 곱을 계산을 해서 그것의 sign 으로 를 결정한다.
y
y <- sign(c(x %*% beta + e))

# plot
plot(x1, x2, type = "n", main = "SVM")
plot(x1, x2, type = "n", main = "SVM")
points(x[y == 1, 1], x[y == 1, 2], col = 2)
points(x[y ==-1, 1], x[y ==-1, 2], col = 4)

# true hyperplane
abline(a = 0, b = -1, lty = 2, col = 1, lwd = 2)

SVM ( Support Vector Machine ) - D4R6 20


이런 데이터에 대해서 SVM 을 풀 것이고, 이 때 써야하는 QP Solver 가 들어있는 package "kernlab" 라는 패키지가 있
다. ipop 이라는 함수 사용.

Linear SVM

ˉ ∗ = yi yj x
K ˉTi x
ˉj
ij

1 T ˉ∗
minαˉ (−1ˉT α
ˉ+ α ˉ K αˉ)
2
subject to 0ˉ ≤ α
ˉ ≤ C 1ˉ, 0ˉ ≤ yˉT α
ˉ ≤ 0ˉ

사실 kernlab 이라는 패키지는 SVM 을 비롯한 여러가지 Kernel 머신에 대해서 풀어주는 패키지.
SVM 을 풀 수 있는 Quadratic Programming Solver 를 가지고 있다.

Quadratic Programming Solver (ipop)

SVM ( Support Vector Machine ) - D4R6 21


1 T ˉ 1 T ˉ∗
min(cˉT x
ˉ+ xˉ Hxˉ) → minαˉ (−1ˉT α
ˉ+ αˉ K αˉ)
2 2
subject to  ˉl ≤ x
ˉ≤u ˉ, ˉb ≤ AˉT x
ˉ ≤ ˉb + rˉ
→ 0ˉ ≤ αˉ ≤ C 1ˉ, 0ˉ ≤ yˉ α
T
ˉ ≤ 0ˉ

## SVM

# cost parameter
C <- 1

# QP
K <- x %*% t(x)
K.star <- K * (y %*% t(y))

# ipop function arguments


H <- K.star
c <- rep(-1, n)
b <- 0
r <- 0
A <- matrix(y, 1, n)
l <- rep(0, n)
u <- rep(C, n)

# run ipop() function


obj <- ipop(c, H, A, b, l, u, r)

# solution
alpha <- obj@primal
round(alpha, 3)

1 0.000 0.000 0.000 0.000 1.000 0.000 0.000 1.000 0.000 1.000 0.000 0.000 0.000 0.000 0.000 0.000
0.385 0.615 1.000 1.000
α 는 C 를 1 로 잡아 주었으므로 0 ~ 1 사이에서 왔다 갔다 한다.
n
∑ αi yi x
ˉi = βˉ
i=1

# beta
beta <- apply(y * alpha * x, 2, sum)
beta

SVM ( Support Vector Machine ) - D4R6 22


x1 x2
1.265708 1.295534

값은 1, 1 인데?
? TRUE
이 값이 다른 것이 중요한 것이 아니라,
β0 + β1 x1 + β2 x2 = 0

이 식으로 보면
1 ⋅ x1 + 1 ⋅ x2 = 0 or 1.265 ⋅ x1 + 1.295 ⋅ x2 = 0

같은 직선 상에 있는 vector 이다. 재대로 추정이 되었다.

β1 , β2 는 추정되었는데 β0 추정이 남았다. 그러나 β0 는 어디에도 나와 있지 않는다. 따라서 이때 Support Vectors 을 사


용한다.
ˉk
Support Vectors : x → yk (β0 + βˉT x
ˉk ) = 1

는 이것을 만족한다. 이것이 왜 Support vector 이냐면, Margin 의 점이 각 집단을 받치고 있기 때문이
Support vector
다. Margin 이 항상 1 이다.
yi (β0 + βˉT X
ˉ i ) ≥ 1 − ξi , ξi > 0, i = 1, ⋯ , n

Separating Hyperplane이 존재하면 ξ = 0. penality 가 없으므로.


이 SVM 은 Margin 이 1. 제일 가까운 녀석이 1로 표준화 되어있다. KKT 조건을 적용하면
Support Vector 를 만족하는 그것에 해당하는 αk 는 0 < αk < C 값을 갖는다.

우리가 dual problem 을 풀 때, 제약이 있는데

SVM ( Support Vector Machine ) - D4R6 23


Constraint 1 : 0ˉ ≤ αi ≤ C 1ˉ, (i = 1, ⋯ , n),
n
Constraint 2 :  ∑ αi yi = 0, yˉT α
ˉ = 0, (⇔ 0 ≤ yˉT α ≤ 0)
i=1

대부분은 '0' 또는 'C' boundary 에 붙어 있는데, 몇 개는 이 사이에 들어온다. 그것이 Support Vector이다. Support
Vector가 그런 것을 만족하는 이유는 Complementary Slackness 때문이다.

n
αi {1 − yi (β0 − βˉT X
ˉ i ) − ξi } = 0, γi ∑ ξi = 0
i=1

이것이 의미하는 것은
1 0.000 0.000 0.000 0.000 1.000 0.000 0.000 1.000 0.000 1.000 0.000 0.000 0.000 0.000 0.000 0.000
0.385 0.615 1.000 1.000

여기서 대부분 0 과 1 인데, 단 2 개만 0 < αk < 1 을 갖는다. 0.385 0.615 이 두점이 Support Vector 라는 것이다. 여
기서는 x17 , x18 점이 support vector 가 된다. 이 두 개의 값에 대해서는 아래와 같은 식이 만족하므로,
ˉk
Support Vectors : x → yk (β0 + βˉT x
ˉk ) = 1

그 해당 값에 대해서 이 식을 풀 수 있다. yk 가 무엇인줄 알았으니까 xˉk 도 알고 βˉ 도 구했고 따라서 β0 를 풀 수 있다. 그래


서 위 조건을 이용해서 17번, 18번 을 찾고 x17 , y17 , x18 , y18 을 가지고
1 − yk (β0 − βˉT x
ˉk ) = 0

이렇게 표현을 하면, 이것을 풀면


β0 = yk − βˉT x
ˉk

k 가 여러개 라도 다 똑같은 값이 나오게 된다.

Support Vector Index 를 계산 한다.


# support vectors
eps <- 1.0e-7
sv.index <- which(eps < alpha & alpha < (C-eps))
sv.index

이 때, α 가 rouding 이니까, 0 이 아닌 아주 작은 값 보다 크고 C 보다 아주 조금 작은 값보다 작은 strictly 작은 α 가 무엇


이냐? 1 13 17 18 이 된다.
어? "17, 18" 2개 밖에 없었는데?
round(alpha, 10) # 일 경우
[1] 0.0000000025 0.0000000073 0.0000000002 0.0000000131 0.9999999987 0.0000000006 0.0000000028 0.9999999918 0.0000000004

SVM ( Support Vector Machine ) - D4R6 24


[10] 0.9999999995 0.0000000031 0.0000000021 0.0000006572 0.0000000011 0.0000000043 0.0000000004 0.3853133165 0.6146873658
[19] 0.9999999983 0.9999999988

13 도 포함된다. 따라서 이 3 개가 support vector 가 되고

# intercept: beta0
temp <- y[sv.index] - x[sv.index,] %*% beta
temp
# 다 같은 값이 나와야 하는데 고쳐보자
? .
[,1]
[1,] 0.1028307
[2,] 0.1240077
[3,] 0.1240077

beta0 <- mean(temp)


beta0

β0 와 βˉ 를 다 구해서 직선을 구해보면 이와 같이 된다.

TRUE : 검은색 직선
Support Vector : 녹색 점선.
Margin : 녹색 점선 과 실선 사이의 거리.

검은 점 : 13, 17, 18
Separable 하지 않은 것을 그려보면 e : error term 을 0, 2 로 만들어서 noise 때문에 아래와 같이 넘어가게 된다.
library(kernlab)

# Toy Example

SVM ( Support Vector Machine ) - D4R6 25


set.seed(2)
n <- 20
x1 <- rnorm(n)
x2 <- rnorm(n)
x <- cbind(x1, x2)
beta <- c(1,1)
# separable case. 를 주려면 - Standard deviation : 0
e <- rnorm(n, 0, 1)
# x 와beta 의 곱을 계산을 해서 그것의 sign 으로 를 결정한다.
y
y <- sign(c(x %*% beta + e))

# plot
plot(x1, x2, type = "n", main = "SVM")
plot(x1, x2, type = "n", main = "SVM")
points(x[y == 1, 1], x[y == 1, 2], col = 2)
points(x[y ==-1, 1], x[y ==-1, 2], col = 4)

# true hyperplane
abline(a = 0, b = -1, lty = 2, col = 1, lwd = 2)

## SVM

# cost parameter
C <- 1

# QP
K <- x %*% t(x)
K.star <- K * (y %*% t(y))

# check ipop function


?ipop

# ipop function arguments


H <- K.star
c <- rep(-1, n)
b <- 0
r <- 0
A <- matrix(y, 1, n)
l <- rep(0, n)
u <- rep(C, n)

SVM ( Support Vector Machine ) - D4R6 26


# run ipop() function
obj <- ipop(c, H, A, b, l, u, r)

# solution
alpha <- obj@primal
round(alpha, 10)

round 10 정도 주어야 드러나는데


1 0.0000000231 0.6097447731 0.0000000085 0.0000000304 0.9999999824 0.0000000155
0.0000001541 0.9999999292 0.0000000162
10 0.9999999806 0.0000000883 0.0000001619 0.6097442762 0.9999999266 0.9999999845
0.0000000205 0.0000000685 0.9999999864
19 0.9999999815 0.9999999895

# beta
beta <- apply(y * alpha * x, 2, sum)
beta

x1 x2
0.6844195 1.0523673

# support vectors
eps <- 1.0e-7
sv.index <- which(eps < alpha & alpha < (C-eps))
sv.index

1 2 7 12 13

# intercept: beta0
temp <- y[sv.index] - x[sv.index,] %*% beta
temp

[1,] 0.136248274
[2,] 0.013233075
[3,] -0.007594213
[4,] 0.136248210

beta0 <- mean(temp)


beta0

[1] 0.06953384

이 부분은 같지는 않은데, noise 가 껴서 같지 않아도 될 듯!

# Plot (estimated beta)


points(x[sv.index,1], x[sv.index,2], pch = 19)

SVM ( Support Vector Machine ) - D4R6 27


abline(a = -beta0/beta[2], b = -beta[1]/beta[2], col = 3, lwd = 2)
abline(a = (1-beta0)/beta[2], b = -beta[1]/beta[2], col = 3, lty = 3, lwd = 2)
abline(a = (-1-beta0)/beta[2], b = -beta[1]/beta[2], col = 3, lty = 3, lwd = 2)

TRUE : 검은색 직선
Support Vector : 녹색 점선.
Margin : 녹색 점선 과 실선 사이의 거리.

검은 점 : 2 7 12 13

https://stats.stackexchange.com/questions/90736/the-difference-of-kernels-in-svm

linear: K(X, Y ) = X T Y
polynomial : K(X, Y ) = (γ ⋅ X T Y + r)degree , γ > 0, r : coef 0
radial basis: K(X, Y ) = exp(∣∣X − Y ∣∣2 /2σ 2 ) ∼ exp(−γ ⋅ ∣∣X − Y ∣∣2 ), γ > 0
sigmoid:  K(X, Y ) = tanh(γ ⋅ X T Y + r), r : coef 0

SVM ( Support Vector Machine ) - D4R6 28

You might also like