인코딩의 영향

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

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

인코딩의 영향

인코딩의 영향 | R-bloggersJavaScript가 필요합니다. 페이지를 다시 로드하거나 GitHub에서 소스 파일을 다운로드하여 로컬에서 코드를 실행하십시오.목표 및 데이터 준비본 연습에서는 워싱턴주 King 카운티의 주택 판매 가격을 예측하는 회귀 문제를 다룹니다. R 패키지와 파이프라인을 활용하여 전처리 및 모델 훈련을 효율적으로 수행합니다.set.seed(124) library(mlr3verse) library("mlr3tuningspaces") data("kc_housing", package = "mlr3data") # 날짜를 숫자형 변수로 변환 library(anytime) dates = anytime(kc_housing$date) kc_housing$date = as.numeric(difftime(dates, min(dates), units = "days")) # 가격을 1000단위로 스케일링 kc_housing$price = kc_housing$price / 1000 # NA가 포함된 열 삭제 kc_housing[,c(13, 15)] = NULL # 팩터형 열 생성 kc_housing[,c(8, 14)] = lapply(c(8, 14), function(x) { as.factor(kc_housing[,x]) }) # 데이터 구조 확인 str(kc_housing)데이터 구조는 21,613개의 관측치와 18개의 변수로 구성되어 있습니다. 주요 변수는 날짜, 가격, 침실 수, 욕실 수, 평수, 지상층수, 수변 여부, 시각, 상태, 등급, 건축 연도 등입니다.학습용과 테스트용 데이터 분리모델을 훈련시키기 전에, 나중에 평가를 위해 일부 데이터를 보류합니다.task = as_task_regr(kc_housing, target = "price") split = partition(task, ratio = 0.6) tasktrain = task$clone() tasktrain$filter(split$train) tasktrain tasktest = task$clone() tasktest$filter(split$test) tasktest학습용 데이터는 12,968개의 관측치, 테스트용 데이터는 8,645개의 관측치를 포함합니다.XGBoost와 범주형 변수 인코딩XGBoost(Chen & Guestrin, 2016)는 그라디언트 부스팅 트리 모델이며, 범주형 데이터를 직접 처리할 수 없습니다. 따라서 범주형 변수는 수치형으로 인코딩해야 합니다.ft = task$feature_types ft[ft[[2]] == "factor"]범주형 변수는 waterfront와 zipcode입니다. 이 두 변수는 각각 2개와 70개의 레벨을 가집니다. cardinality(레벨 수)에 따라 인코딩 방식을 선택합니다.binary(레벨 2) – waterfront는 1차원 인코딩(더미 인코딩)으로 처리합니다.low-cardinality– 2~10 정도의 레벨을 가진 변수는 one‑hot 인코딩이 적합합니다.high-cardinality– 10개 이상의 레벨을 가진 변수는 one‑hot 인코딩이 메모리 및 계산 비용을 크게 증가시킵니다.따라서 zipcode와 같은 high‑cardinality 변수를 다룰 때는 impact encoding이 효과적입니다. Impact encoding은 타깃 변수를 활용해 범주형 변수를 수치형으로 매핑합니다.# 예시: impact encoding 구현 (코드 예시) # 해당 부분은 실제 구현에 따라 다를 수 있습니다.위와 같이 인코딩 전략을 정하면, XGBoost와 같은 트리 기반 모델에서도 고차원 범주형 변수를 효율적으로 다룰 수 있습니다.
원문 URL
전체 글은 원문 페이지에서 이어서 읽을 수 있습니다.
원문에서 전체 글 읽기
작성자
R-Blogger
출처
R-Blogger
플랫폼
R-Blogger
분류
블로그·해설
언어
한국어
발행일
2025-05-22