더북(TheBook)

SVM을 잘 사용하려면 파라미터 값을 잘 찾아야 한다. 파라미터를 정하는 한 가지 방법은 교차 검증이다. 또 다른 방법은 SVM 패키지가 제공하는 파라미터 튜닝을 사용하는 것이다.

e1071에서는 tune( ) 함수를 사용해 모델을 튜닝할 수 있다. help(tune)을 입력해 자세한 사용법을 알아보기 바란다. 다음은 가우시안 커널에서 gamma와 cost 파라미터를 찾는 example(tune)의 일부를 보여준다.

<Note> SVM 파라미터 gamma와 cost

가우시안 커널의 gamma는 식 10-9에 보인 γ 를 의미한다.

SVM에서 cost(흔히 C로 지칭)는 과적합을 막는 정도를 지정하는 파라미터다. 두 개의 분류를 정확히 가운데로 나누는 선이 있으면 좋겠지만 때에 따라 한두 개 데이터만 특이 값을 갖고 있는 경우가 있을 수 있다. 그림 10-12를 보자.

그림 10-12 SVM의 C(Cost) 파라미터와 과적합의 해결
그림 10-12 SVM의 C(Cost) 파라미터와 과적합의 해결

그림 10-12에서 직선은 혼자만 특이한 위치에 있는 검은 점까지 고려한 선이며 점선은 해당 점을 제외한 뒤의 선이다. 직선은 데이터를 정확히 반영하지만 데이터의 노이즈에 집착한 과적합 가능성이 보인다. 반면 점선은 한 개의 점은 잘못 분류했지만 전체적인 데이터의 모양을 더 잘 나타낸다.

Cost는 점선의 경우처럼 데이터를 잘못 분류하는 선을 긋게 될 경우 얼마만큼의 비용(cost)을 지불할 것인지를 지정한다. 그리고 SVM은 1) 데이터를 한 가운데로 얼마나 잘 나누는지와 2) 잘못 구분한 점으로 인한 비용의 합을 최소화하는 선을 찾는다. 결과적으로 SVM은 Cost를 사용해 과적합 정도를 조절하게 된다.

> install.packages("e1071")
> library(e1071)
> tune(svm, Species ~., data=iris, gamma=2^(-1:1), cost=2^(2:4))
Parameter tuning of `svm':
- sampling method: 10-fold cross validation
- best parameters:
  gamma cost
    0.5    4
- best performance: 0.05333333

tune( )의 반환 값은 객체며, 객체의 속성은 attributes( )로 살펴볼 수 있다. 다음은 최적 파라미터 값을 빼내는 코드의 예다.

> attributes(result)
$names
[1] "best.parameters" "best.performance" "method"       "nparcomb"
[5] "train.ind"       "sampling"         "performances" "best.model"

$class
[1] "tune"

> result$best.parameters           # 최적 파라미터
  gamma cost
1   0.5    4

> result$best.parameters["gamma"]  # 최적 파라미터 중 gamma
  gamma
1   0.5

> result$best.parameters["cost"]   # 최적 파라미터 중 cost
  cost
1    4
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.