커스텀 측정 솔루션으로 고급 재표본 추출

R-Blogger · 블로그·해설 · 2025-05-22

R-Blogger블로그·해설한국어2025-05-22

커스텀 측정 솔루션으로 고급 재표본 추출

목표 이 연습을 마친 뒤에는 mlr3를 사용할 때 재표본추출(resampling) 과정을 제어하여, 분류 설정에서 클래스 불균형이나 그룹 현상과 같은 데이터 특이성을 반영할 수 있어야 합니다. 또한 mlr3 내에서 성능 평가를 위해 사용자 정의 척도를 만들고 활용하는 방법을 배웁니다. 전제조건 필요한 패키지를 로드하고, 재현성을 위해 고정된 시드를 설정합니다. library(mlr3verse) library(mlbench) library(data.table) set.seed(7832) 1. Stratified Resampling 분류 작업에서는 목표 클래스 분포 비율이 각 train/test 분할에서 비슷해야 하며, 이를 stratification 으로 달성합니다. 이는 불균형 클래스와 작은 데이터 세트에서 특히 유용합니다. mlr3에서는 각 태스크에 $col_roles 슬롯이 있으며, 이 슬롯은 머신러닝 프로세스 전 단계에서 특정 기능이 가질 일반적인 역할을 보여줍니다. 최소한 $col_roles 슬롯은 feature와 target으로 사용될 변수를 표시합니다. 또한 $col_roles 슬롯은 더 다양할 수 있으며, 일부 변수는 여러 역할을 수행할 수도 있습니다. 예를 들어, task$col_roles$stratum 은 stratification 에 사용될 변수를 지정합니다. 이 연습에서는 german_credit 데이터를 사용하여 설명합니다. task_gc = tsk("german_credit") task_gc$col_roles # $feature [1] "age" "amount" "credit_history" "duration" # [5] "employment_duration" "foreign_worker" "housing" "installment_rate" # [9] "job" "number_credits" "other_debtors" "other_installment_plans" # [13] "people_liable" "personal_status_sex" "present_residence" "property" # [17] "purpose" "savings" "status" "telephone" # $target [1] "credit_risk" # $name character(0) $order character(0) $stratum character(0) $group character(0) $weight character(0) $offset character(0) $always_included character(0) 1.1 Stratification 변수 지정 task_gc 객체를 수정하여 목표 변수 credit_risk 가 stratification 에 사용되도록 합니다. 힌트 1: task_gc$col_roles$... = "credit_risk" # stratification 변수 지정 task_gc$col_roles$stratum = "credit_risk" 1.2 Resampling 절차 생성 다음으로 3-fold 교차 검증을 지정하고 태스크에 대해 resampling 객체를 인스턴스화합니다. # 3-fold 교차 검증 설정 cv = rsmp("cv", folds = 3) cv$instantiate(task_gc) 1.3 정합성 검증 정합성 검증으로서, 각 CV fold 안에서 목표 클래스 비율이 비슷해야 합니다. 각 fold 에 대한 비율을 계산하고 확인합니다. 힌트 1: 먼저 데이터를 해당 CV fold 와 결합합니다. 두 번째, 각 fold 에 대해 집계합니다. 힌트 2: dt # CV fold 별 목표 클래스 비율 계산 dt = task_gc$data() dt[, fold := cv$train_set] # fold 정보 추가 (예시) # 각 fold 에서 비율 계산 fold_ratios = dt[, .( total = .N, yes = sum(credit_risk == "yes"), no = sum(credit_risk == "no") ), by = fold] # 비율 표시 fold_ratios[, `:=`( yes_ratio = yes / total, no_ratio = no / total )] fold_ratios 위 결과를 통해 각 fold 에서 credit_risk 클래스 분포가 비슷함을 확인할 수 있습니다.
원문 URL
전체 글은 원문 페이지에서 이어서 읽을 수 있습니다.
원문에서 전체 글 읽기
작성자
R-Blogger
출처
R-Blogger
플랫폼
R-Blogger
분류
블로그·해설
언어
한국어
발행일
2025-05-22