1 모수와 초모수

모수(parameter)는 예측모형을 데이터를 통해 훈련시키면서 찾게되는데 흔히 회귀계수(regression coefficient)로 쉽게 이해될 수 있으며, 초모수(Hyperparameter)는 데이터를 통해 훈련시키기 전에 사전에 설정된다는 점에서 차이가 있다.

  • 선형 회귀모형에서 회귀 계수, 기계학습에서 weigths, bias가 대표적.
  • 기계학습에서 학습율(learning rate), Random Forest에서 나무 갯수, mtry 등을 들 수 있다.

2 예측모형 프레임워크

R의 대표적인 예측모형 프레임워크로 다음 3개를 많이 사용한다. 3가지 프레임워크 모두 서로 추구하는 바가 뿌렸하여 본인 업무에 가장 적합한 것을 확인해서 사용한다.

3 예측모형 초모수

caret, \(H_2 O\), mrl 예측모형 프레임워크 모두 다음 세가지 사항을 지정해야만 된다.

  1. 초모수 검색공간(search space): mtry, 활성화 함수 등
  2. 재표집 방법(resampling method)
  3. 미세조정 방법: 격자 검색(grid search), 무작위 검색(random search), Adaptive Resampling 등

초모수 검색공간 즉, 초모수 설정 대상은 caret - 예측모형 사전 사이트에서 “Tuning Parameters”를 통해 각 예측모형별로 검색하여 지정하면된다. 예를 들어 Random Forest 모형의 대표적인 팩키지 ranger의 경우 미세조정 초모수는 mtry, splitrule, min.node.size가 된다. 유사한 방식으로 예측모형에 적용할 모형을 caret - 예측모형 사전 사이트에서 찾아 Tuning Parameters를 보고 확인하여 지정하면 된다.

Model method Value Type Libraries Tuning Parameters
Random Forest ranger Classification, Regression e1071, ranger, dplyr mtry, splitrule, min.node.size
Stochastic Gradient Boosting gbm Classification, Regression gbm, plyr n.trees, interaction.depth, shrinkage, n.minobsinnode

재표집 방법은 caret의 경우 trainControl을 통해 설정한다. repeatedcv 방법으로 10 조각을 내서 표본을 추출해서 각각 예측모형 접합을 시키고 이를 총 5회 반복한다. 재표집 방법은 repeatedcv외에서 ? trainControl 명령어를 통해서 “boot”, “boot632”, “optimism_boot”, “boot_all”, “cv”, “repeatedcv”, “LOOCV”, “LGOCV”, “none”, “oob”, timeslice, “adaptive_cv”, “adaptive_boot”, “adaptive_LGOCV” 등 다양하게 설정할 수 있다.

미세조정 방법은 격자 검색(grid search), 무작위 검색(random search), Adaptive Resampling 3가지를 caret에서 지정하는데 최적 초모수 조합을 찾아내는 것은 동일하다고 볼 수 있으나 최적 초모수 조합을 찾는 효율성의 측면에서는 Adaptive Resampling이 더 낫다고 볼 수 있다.

4 예측모형 - caret

예측모형 개발을 위해서 데이터를 불러오고 이를 janitor 팩키지로 칼럼명을 깔끔히 정리하고 특히 정보가 매우 적은 변수는 nearZeroVar() 함수로 전처리 단계에서 제거한다. 그리고 나서, 훈련/시험 데이터로 나누고, 멀티코어를 활용하여 훈련시간을 단축시키기 위해서 클러스터를 구축한다.

4.1 격자탐색(grid search)

tictoc 팩키지를 통해 tic(), toc() 함수로 모형 훈련시간을 측정하고 교차검증(cross validation)을 위해서 k=3, repeats=1로 설정한다. 앞서 caret - 예측모형 사전에서 검색한 ranger 팩키지 초모수를 찾아 expand.grid를 통해 격자 탐색 공간을 설정한다.

예를 들어 mtry = 48, splitrule = extratrees, min.node.size = 10 초모수가 선정되고 이에 해당되는 모형 성능도 나타나게 된다.

Aggregating results
Selecting tuning parameters
Fitting mtry = 48, splitrule = gini, min.node.size = 10 on full training set
Random Forest 

700 samples
 48 predictor
  2 classes: 'Bad', 'Good' 

Pre-processing: centered (48), scaled (48), spatial sign
 transformation (48) 
Resampling: Cross-Validated (3 fold, repeated 1 times) 
Summary of sample sizes: 466, 467, 467 
Resampling results across tuning parameters:

  mtry  splitrule   ROC        Sens       Spec     
   2    gini        0.7192822  0.2000000  0.9591875
   2    extratrees  0.7750399  0.1142857  0.9979550
  25    gini        0.7563238  0.3904762  0.9020151
  25    extratrees  0.7702735  0.3904762  0.9224026
  48    gini        0.7538317  0.4190476  0.8918026
  48    extratrees  0.7688239  0.3952381  0.9101576

Tuning parameter 'min.node.size' was held constant at a value of 10
Sens was used to select the optimal model using the largest value.
The final values used for the model were mtry = 48, splitrule = gini
 and min.node.size = 10.
11.77 sec elapsed

4.2 무작위 검색 (random search)

무작위 검색(random search)은 trainControl() 함수에 search = "random"을 지정하고 실무에서 tuneLength = 100와 같은 값을 지정하게 되면 caret 팩키지 train() 함수에서 선택한 예측모형 ranger의 초모수를 찾아 각 모수별로 100개 난수값을 발생시켜 모형을 적합시켜 최고 성능을 내는 조합을 찾아준다.

Aggregating results
Selecting tuning parameters
Fitting mtry = 44, splitrule = gini, min.node.size = 20 on full training set
Random Forest 

700 samples
 48 predictor
  2 classes: 'Bad', 'Good' 

Pre-processing: centered (48), scaled (48), spatial sign
 transformation (48) 
Resampling: Cross-Validated (3 fold, repeated 1 times) 
Summary of sample sizes: 467, 466, 467 
Resampling results across tuning parameters:

  min.node.size  mtry  splitrule   ROC        Sens       Spec     
   3             25    gini        0.7455190  0.4047619  0.8734351
  11             35    extratrees  0.7687658  0.3904762  0.9163300
  17             21    extratrees  0.7708856  0.3523810  0.9244975
  17             23    gini        0.7517423  0.3952381  0.8877500
  18             47    gini        0.7445776  0.4142857  0.8734850
  19             28    extratrees  0.7728779  0.3714286  0.9265300
  20             44    gini        0.7445500  0.4285714  0.8673126

Sens was used to select the optimal model using the largest value.
The final values used for the model were mtry = 44, splitrule = gini
 and min.node.size = 20.
6.34 sec elapsed

5 초모수 모형 성능 평가

caret 예측모형 객체를 plot, ggplot 함수에 넣으면 시각화를 통해 최적의 초모수를 선정하는데 도움이 된다. 다르게 설정된 초모수 조합이 모형 성능에 어떤 영향을 주는지를 초모수 모형성능 평가를 통해서 확인할 수 있고 특히 어떤 초모수가 예측모형 성능에 크고 작은 영향을 미치는지도 이해할 수 있다. 물론 초모수 공간에 수렴하는지 파악하여 최적 초모수 조합(Optimal Hyperparameter Combinatin)을 발견하는데 단초를 제공한다.

Kappa 값을 시각화하여 높은 Kappa 값을 통해 추가로 탐색할 수 있는 초모수 공간에 대한 힌트를 얻을 수도 있다.