더북(TheBook)

서포트 벡터 머신 학습

SVM 모델을 위한 패키지에는 e1071, kernlab 등이 있다. e1071은 효율적인 SVM 구현체로 잘 알려진 libsvm을 R에서 사용할 수 있도록 한 패키지며, kernlab은 커널 기반의 기계 학습 알고리즘을 R에서 구현한 것으로 사용자가 C++ 코드의 수정 없이 기능을 손쉽게 확장할 수 있다. 표 10-9에 이 장에서 알아볼 kernlab, e1071 패키지의 함수들을 보였다.

표 10-9 서포트 벡터 머신

kernlab::ksvm : 서포트 벡터 머신을 생성한다.

kernlab::ksvm(
  x,        # 모델 포뮬러
  data=NULL # 포뮬러를 적용할 데이터
)

kernlab::ksvm(
  x, y=NULL,  # 데이터
  # 데이터를 정규화할지 여부. 기본값인 TRUE는 평균 0, 분산 1이 되도록 데이터를 변환한다.
  scaled=TRUE,
  # 사용할 커널. 기본값은 rbfdot으로 Radial Basis Function이다. kernel에 지정할 수 있는
  # 함수의 목록은 help(kernlab::dots)에서 볼 수 있다.
  kernel="rbfdot",
  # 커널 파라미터를 리스트로 지정한다. kernel rbfdot인 경우 kpar automatic으로
  # 지정하면 데이터로부터 휴리스틱으로 적절한 파라미터를 찾는다.
  kpar="automatic"
)

반환 값은 ksvm 객체다.

ksvm::predict.ksvm : ksvm을 사용한 예측을 수행한다.

ksvm::predict.ksvm(
  object,   # ksvm 객체
  newdata,  # 예측을 수행할 데이터
  # 예측 결과의 유형. response는 예측값, probabilities는 확률을 반환한다.
  type="response"
)

반환 값은 예측 결과다.

e1071::svm : 서포트 벡터 머신을 생성한다.

e1071::svm(
  formula,     # 모델 포뮬러
  data=NULL,   # 데이터
)

e1071::svm(
  x, y=NULL,   # 데이터
  scale=TRUE,  # 변수를 정규화해야 하는지 여부
  # 분류, 회귀 등의 모델 중 만들 모델. y 값이 팩터인지 여부에 따라
  # 분류 또는 회귀 모델이 자동으로 지정되지만 type에 모델을 지정해 특정 모델을 강제할 수 있다.
  type = NULL,
  kernel ="radial",  # 커널 함수
  gamma=if(is.vector(x)) 1 else 1/ncol(x), # 커널 파라미터 gamma
  cost=1  # 커널 파라미터 cost
)

반환 값은 svm 객체다.

e1071::tune : 그리드 탐색(Grid Search; 인자로 주어진 모든 가능한 경우에 대해 테스트해보는 방식)을 사용한 파라미터 튜닝을 수행한다.

e1071::tune(
  method,   # 최적화할 함수
  train.x,  # 포뮬러 또는 독립 변수의 행렬을 지정
  train.y,  # 예측할 분류. 만약 train.x가 포뮬러면 무시
  data,     # 포뮬러를 적용할 데이터
  ...       # method에 추가로 전달할 인자
)

반환 값은 tune 객체다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.