# 데이터를 불러옵니다.
mydata <- read.csv("c:\\data\\binary.csv", header = TRUE)
head(mydata)
# admit 변수를 팩터형으로 변환
mydata$admit <- as.factor(mydata$admit)
# 훈련과 테스트를 8대 2로 나눕니다.
library(caret)
set.seed(123)
k <- createDataPartition(mydata$admit, p = 0.8, list = FALSE)
train_data <- mydata[k, ]
test_data <- mydata[-k, ]
nrow(train_data) # 321
nrow(test_data) # 79
# 데이터 정규화 함수 정의
normalize <- function(x) {
return((x - min(x)) / (max(x) - min(x)))
}
# 정규화 진행 (admit 변수를 제외하고 정규화)
train_data_n <- as.data.frame(lapply(train_data[, -1], normalize))
test_data_n <- as.data.frame(lapply(test_data[, -1], normalize))
# 정규화된 데이터에 admit 변수 추가
train_data_n$admit <- train_data$admit
test_data_n$admit <- test_data$admit
# SVM 모델 생성 및 하이퍼파라미터 튜닝
library(e1071)
# 하이퍼파라미터 값 설정
C_values <- c(1:100)
gamma_values <- 2^(-20:-1)
results <- data.frame(C = numeric(), gamma = numeric(), accuracy = numeric())
for (C in C_values) {
for (gamma in gamma_values) {
# 모델 생성 및 하이퍼파라미터 설정
set.seed(1)
mydata_svm_model <- svm(admit ~ ., data = train_data_n, kernel = "radial", cost = C, gamma = gamma)
# 모델 예측
result <- predict(mydata_svm_model, test_data_n[, -4]) # admit 변수를 제외하고 예측
# 모델 평가
accuracy <- sum(result == test_data_n$admit) / length(test_data_n$admit)
# 결과 저장
results <- rbind(results, data.frame(C = C, gamma = gamma, accuracy = accuracy))
}
}
# 정확도 기준으로 정렬
library(doBy)
results_sorted <- orderBy(~ -accuracy, results)
print(results_sorted)