공유자료

HOME > 자료실 > 공유자료
 
[정보기술활용연구] SVM 을 위한 sampling 예제 R코드
관리자 16-05-24 11:05 1,765
 
## 10-fold cross-validation을 통한 모수 탐색
//사용할 데이터를 생성한다.
  // "kernlab" 패키지의 spam 데이터를 불러온다.
  install.packages("kernlab")
  library(kernlab)
  data(spam)
// 전체자료를 3:1로 분할한다. (학습 : 실험)
  n      <- nrow(spam)
  sub    <- sample(1:n , round(0.75 * n)) # 1번째~n번째 관측치를 3:1 비율로 나눈다. (replace 옵션은 디폴트가 FALSE 이다.)
  spam.1 <- spam[ sub, ]
  spam.2 <- spam[-sub, ]
// svm() 함수에서 모수 gammacost 값을 다르게 두면 모형성과가 다르게 나타날 수 있다.
// e1071 패키지의 tune.svm()으로 SVM 모형의 최적 파라미터를 찾아보자.
// 이 함수는 10-겹 교차 타당성 평가(10-fold cross-validation) 방법을 쓴다.
//   gamma 0.1, 1 , 10
//   cost  0.1, 1 , 10
// 9개 조합 중에서 최적의 (gamma, cost) 조합을 찾아보자.
  // 10-fold cross-validation 하는 tune()함수를 사용
  install.packages("e1071")
  library(e1071)
  tune.svm <- tune(svm, type~. , data= spam.1 , ranges= list(gamma=c(0.1 , 1 , 10) , cost=c(0.1 , 1 , 10))) # 시간 오래 걸림
  summary(tune.svm)
// 계산시간을 알아본다. (847