R-Blogger블로그·해설한국어2025-05-22
튜닝
JavaScript 필요 여부 및 문제 해결 이 페이지에서 솔루션을 열려면 JavaScript가 필요합니다. JavaScript를 사용 가능하도록 설정하고 페이지를 다시 불러오거나, GitHub에서 소스 파일을 다운로드해 로컬에서 실행해 주세요. 목표 이 연습을 마친 뒤에는 학습 알고리즘을 위한 탐색 공간을 정의하고, 다양한 하이퍼파라미터 최적화(HPO) 기법을 사용해 탐색 공간을 순회하며 좋은 성능을 보이는 하이퍼파라미터 설정(HPC)을 찾을 수 있게 됩니다. 연습: k‑NN 모델의 하이퍼파라미터 튜닝 이번에는 german_credit 데이터셋과 해당 과제(tsk("german_credit"))를 다룹니다. k‑NN 모델을 학습하고 가장 적합한 k 값과 scale 옵션을 찾는 것이 목표입니다. 또한 다른 하이퍼파라미터(예: 스케일링 여부)를 어떻게 설정할지도 고민합니다. library(mlr3verse) task = tsk("german_credit") Recap: k‑NN이란? k‑NN은 k개의 가장 가까운 이웃의 반응값을 평균하여 새로운 데이터를 예측하는 머신러닝 기법입니다. Parameter spaces 정의 k와 스케일링 여부에 대한 의미 있는 탐색 공간을 정의합니다. lrn("classif.kknn")$help() 페이지를 참고하세요. 각 learner는 사용 가능한 모든 하이퍼파라미터를 포함하는 param_set 슬롯을 가집니다. 이 경우, classif.kknn 학습자를 튜닝합니다. 탐색 공간을 정의하는 함수는 ps, p_int, p_dbl, p_fct, p_lgl 등입니다. search_space = ps( k = p_int(...), scale = ... ) Hyperparameter Optimization 이제 앞서 정의한 탐색 공간을 사용해 k‑NN 모델을 튜닝합니다. 3‑폴드 교차 검증을 resampling 전략으로 사용하고, 랜덤 서치를 튜닝 전략으로 지정하며, 종료 조건은 40번의 평가로 설정합니다. 필수 요소 Task: German Credit Algorithm: k‑NN (lrn()) Resampling: 3‑fold cross validation (rsmp()) Terminator: 40 evaluations (trm()) Search space: 앞서 정의한 것 기본 성능 척도: 분류 시 msr("classif.ce"), 회귀 시 msr("classif.mse") 튜닝 인스턴스는 ti() 로 정의합니다. 랜덤 서치 최적화 알고리즘은 tnr() 에 해당 키를 넘겨서 생성합니다. 병렬 실행을 허용하고, 배치 크기와 코어 수를 4개로 설정합니다. library(mlr3) library(mlr3learners) library(mlr3tuning) future::plan("multicore", workers = 4L) task = tsk(...) lrn_knn = lrn(...) search_space = ps( k = p_int(1, 100), scale = p_lgl() ) resampling = rsmp(...) terminator = trm(..., ... = 40L) instance = ti( task = ..., learner = ..., resampling = ..., terminator = ..., search_space = ... ) optimizer = tnr(...) optimizer$...(...) # 최적화 실행 optimizer$optimize(instance) 튜닝 아카이브 분석 튜닝 과정에서 평가된 하이퍼파라미터를 instance$archive 로 확인합니다. k 값과 추정된 분류 오류 간의 관계를 간단히 플롯으로 나타냅니다. # 아카이브 확인 archive = instance$archive 하이퍼파라미터 시각화 튜닝이 얼마나 효과적이었는지 파악하려면 하이퍼파라미터가 성능에 미치는 영향을 시각화합니다. 아카이브를 데이터테이블로 변환 후 다양한 플롯 기법을 사용합니다. 예시: ggplot2 와 patchwork 를 활용한 시각화. arx = as...(instance$...) library(ggplot2) library(patchwork) gg_k = ggplot(..., aes(...)) + ...() gg_scale = ggplot(..., aes(...)) + ...() gg_k + gg_scale & theme(legend.position = "bottom") 하이퍼파라미터 종속성(Dependency) 탐색 공간을 정의할 때 종속성(예: SVM에서 커널이 "polynomial"일 때만 degree 사용)을 처리합니다. # SVM 탐색 공간 예시 search_space = ps( kernel = p_fct(levels = c("polynomial", "radial")), degree = p_int(1, 3, depends = kernel %in% "polynomial") ) 하이퍼파라미터 변환(Transformation) 넓은 범위의 비음수 하이퍼파라미터를 로그 스케일로 탐색하면 효율적입니다. to_tune() 에 logscale = TRUE 를 지정하거나, p_dbl() 의 trafo 인자를 이용해 직접 로그 변환을 설정합니다. # 예시: 로그 변환 lrn = lrn("classif.svm", cost = to_tune(1e-5, 1e5, logscale = TRUE)) lrn$param_set$search_space() # 출력 예시 # id class lower upper nlevels default value # 1: cost ParamDbl -11.51293 11.51293 Inf [NULL] Trafo is set. 요약 이번 사용 사례에서 학습자 하이퍼파라미터 탐색 공간 정의, 랜덤 튜닝 전략 수립, 테스트된 설정 시각화, 스케일 변환 및 변환 적용 방법을 배웠습니다. 추가 정보 더 고급 튜닝 알고리즘 시뮬레이티드 어닐링: 랜덤히 후보
원문 URL
전체 글은 원문 페이지에서 이어서 읽을 수 있습니다.
- 작성자
- R-Blogger
- 출처
- R-Blogger
- 플랫폼
- R-Blogger
- 분류
- 블로그·해설
- 언어
- 한국어
- 발행일
- 2025-05-22