# 0단계: 필요한 패키지 설치 및 로드 if (!require("mlbench")) {install.packages("mlbench"); library(mlbench) } else {library(mlbench)}
# 1단계: 데이터 수집 - Digits 데이터셋 로드 data("Glass", package = "mlbench")
# 2단계: 데이터 탐색 및 준비 str(Glass) print(summary(Glass)) head(Glass) unique(Glass$Type)
colSums(is.na(Glass)) table(Glass$Type)
# 전처리 g9 <- Glass %>% select(-Type) normalize <- function(x) { return((x - min(x)) / (max(x) - min(x))) } g_n <- as.data.frame(lapply(g9, normalize)) summary(g_n)
# 학습용 데이터 준비 set.seed(49) train_indx <- createDataPartition(Glass$Type, p = 0.9, list = FALSE)
g_train <- g_n[train_indx, ] g_test <- g_n[-train_indx, ]
g_train_label <- Glass$Type[train_indx] g_test_label <- Glass$Type[-train_indx]
# 4단계: 모델 성능 평가 accuracies <- data.frame(k = integer(), accuracy = numeric())
set.seed(10) for (i in seq(1, 57, 2)) { result1 <- knn( train = g_train, test = g_test, cl = g_train_label, k = i ) accuracy <- sum(result1 == g_test_label) / length(g_test_label) * 100 accuracies <- rbind(accuracies, data.frame(k = i, accuracy = accuracy)) print(paste(i, '개 일때 정확도 ', accuracy)) }
# 6단계: 시각화 accuracies
fig <- plot_ly( accuracies, x = ~ k, y = ~ accuracy, type = 'scatter', mode = 'lines+markers', line = list(color = 'red') ) fig <- fig %>% layout( title = "K 값에 따른 정확도", xaxis = list(title = "K 값"), yaxis = list(title = "정확도") ) fig |