R-Blogger블로그·해설한국어2025-05-23
특성 선택
Feature Selection | R-bloggersJavaScript가 필요합니다. JavaScript를 활성화하고 페이지를 다시 로드하거나 GitHub에서 소스 파일을 다운로드하여 코드를 로컬에서 실행하십시오.목표이 연습을 마치면 wrapper 함수를 사용하여 mlr3fselect로 특성 선택을 수행하고, 다양한 성능 측정을 통합하며 일반화 오차를 계산할 수 있게 됩니다.Wrapper Methods필터링 외에도 wrapper 방법은 특성 선택의 또 다른 변형입니다. 필터링에서는 특성 값에 대한 조건을 설정하지만, wrapper 방법에서는 학습자를 특성 집합의 다양한 부분집합에 적용합니다. 모델을 재적합해야 하므로 이 방법은 계산적으로 비용이 많이 듭니다. wrapper 방법을 사용하려면 mlr3fselect 패키지가 필요하며, 그 핵심은 다음 R6 클래스들입니다:FSelectInstanceSingleCrit, FSelectInstanceMultiCrit– 이 두 클래스는 특성 선택 문제를 설명하고 결과를 저장합니다.FSelector– 이 클래스는 특성 선택 알고리즘 구현의 기반 클래스입니다.전제조건가장 중요한 패키지를 로드하고 재현성을 위해 고정된 시드를 사용합니다.library(mlr3verse) library(data.table) library(mlr3fselect) set.seed(7891)이 연습에서는 german_credit데이터와 classif.ranger학습자를 사용합니다.task_gc = tsk("german_credit") lrn_ranger = lrn("classif.ranger")1. 기본 적용1.1 프레임워크 생성 3겹 교차 검증, 분류 정확도를 측정값으로 사용하고 20번 평가 후 종료되는 FSelectInstanceSingleCrit객체를 fsi()를 사용해 생성합니다. 단순화를 위해 특성은 age, amount, credit_history, duration만 고려합니다.힌트 1: task_gc$select(...)instance = fsi( task = task_gc, learner = lrn_ranger, resampling = rsmp("cv", folds = 3), measure = msr("classif.acc"), terminator = trm("evals", n_evals = 20) )1.2 특성 선택 시작 FSelector 클래스를 통해 순차적으로 fs()를 사용해 선택을 시작하고, 초기화된 FSelector 객체의 $optimize()메서드에 FSelectInstanceSingleCrit객체를 전달합니다.힌트 1: fselector = fs(...)힌트 2: fselector = fs(...)fselector = fs("wrapper", search = "random") fselector$optimize(instance)1.3 평가 첫 두 배치의 인스턴스 아카이브에서 네 가지 특성 조합과 정확도를 확인합니다.힌트 1: instance$archive$data[...]힌트 2: instance$archive$data[batch_nr == ..., ...]# 예시 head(instance$archive$data)1.4 모델 훈련 어떤 특성이 선택되어야 할까요? 모델을 훈련하고, 다른 특성 조합의 정확도 값을 비교해 선택합니다.힌트 1: 정확도 값을 비교해 특성을 선택합니다.힌트 2: task_gc = ...; task_gc$select(...); lrn_ranger$train(...)task_gc$select("age", "amount") lrn_ranger$train(task_gc)2. 다중 성능 측정다중 성능 지표를 최적화하려면 앞과 동일한 단계가 필요하지만, 다중 지표를 전달합니다. classif.tpr와 classif.tnr를 고려하여 instance객체를 생성합니다. 두 번째 단계에서는 랜덤 탐색을 사용하고 세 번째 단계에서 결과를 확인합니다.task_gc = tsk("german_credit") instance = fsi( task = task_gc, learner = lrn_ranger, resampling = rsmp("holdout"), measure = msr("classif.tpr", "classif.tnr"), terminator = trm("evals", n_evals = 10) ) fselector = fs("wrapper", search = "random") fselector$optimize(instance) features = unlist(lapply(fselector$search_space, function(x) x$values)) cbind(features, fselector$optimum$score)3. 중첩 재샘플링중첩 재샘플링은 특성 선택에 대한 편향 없는 성능 추정치를 찾을 수 있게 해줍니다. mlr3에서는 AutoFSelector클래스를 사용하며, 이 인스턴스는 auto_fselector()함수를 통해 생성할 수 있습니다.3.1 AutoFSelector 인스턴스 생성 랜덤 탐색을 사용해 가장 높은 정확도를 제공하는 특성 선택을 찾고, 로지스틱 회귀와 보유(holdout) 재샘플링을 사용합니다. 10번 평가 후 종료합니다.힌트 1: afs = auto_fselector(...)afs = auto_fselector( fselector = fs("wrapper", search = "random"), learner = lrn("classif.log_reg"), resampling = rsmp("holdout"), measure = msr("classif.acc"), terminator = trm("evals", n_evals = 10) )3.2 벤치마크 AutoFSelector를 3겹 교차 검증을 사용한 일반 로지스틱 회귀와 비교합니다.힌트 1: AutoFSelector는 Learner 기반 클래스에서 상속되므로 다른 학습자처럼 사용할 수 있습니다.힌트 2: 벤치마크 그리드를 구현하고 결과를 집계합니다.benchmark_grid = benchmark_grid( tasks = task_gc, learners = lrn("classif.log_reg") | afs, resamplings = rsmp("cv", folds = 3) ) bmr = benchmark(benchmark_grid) bmr$aggregate()요약Wrapper 방법은 다양한 특성 조합에 대해 성능 측정을 수행하여 특성 선택을 수행합니다. 계산적으로 비용이 많이 드는 이 방법은 여러 모델을 재적합해야 하기
원문 URL
전체 글은 원문 페이지에서 이어서 읽을 수 있습니다.
- 작성자
- R-Blogger
- 출처
- R-Blogger
- 플랫폼
- R-Blogger
- 분류
- 블로그·해설
- 언어
- 한국어
- 발행일
- 2025-05-23