# 필요한 패키지 설치 # install.packages("openai") # install.packages("palmerpenguins") # install.packages("tidymodels") library(openai) library(palmerpenguins) library(tidymodels) # Palmer Penguins 데이터셋 로드 data("penguins") penguins <- na.omit(penguins) # 결측값 제거 # 필요한 변수 선택 (성별(sex)과 설명 변수들) penguins <- penguins[, c("sex", "bill_length_mm", "bill_depth_mm", "flipper_length_mm", "body_mass_g")] # 데이터를 훈련용과 테스트용으로 나누기 (7:3 비율) set.seed(123) data_split <- initial_split(penguins, prop = 0.7) train_data <- training(data_split) test_data <- testing(data_split) # 레시피 생성 penguins_recipe <- recipe(sex ~ ., data = train_data) %>% step_dummy(all_nominal_predictors()) %>% step_zv(all_predictors()) %>% step_normalize(all_predictors()) # 모델 스펙 정의 rf_spec <- rand_forest(mtry = 2, trees = 1000) %>% set_engine("randomForest") %>% set_mode("classification") # 워크플로우 생성 penguins_wf <- workflow() %>% add_recipe(penguins_recipe) %>% add_model(rf_spec) # 모델 훈련 rf_fit <- penguins_wf %>% fit(data = train_data) # 예측 수행 predictions <- rf_fit %>% predict(test_data) %>% bind_cols(test_data) # 평가 메트릭 계산 metrics <- predictions %>% metrics(truth = sex, estimate = .pred_class) # 정확도, 정밀도, 재현율 계산 conf_mat <- predictions %>% conf_mat(truth = sex, estimate = .pred_class) accuracy <- metrics %>% filter(.metric == "accuracy") precision <- conf_mat %>% summary() %>% filter(.metric == "precision") recall <- conf_mat %>% summary() %>% filter(.metric == "recall") # 결과 출력 print(accuracy) print(precision) print(recall)