# 1. 데이터를 불러옵니다.
mydata <- read.csv("c:\\data\\binary.csv", header = TRUE)
head(mydata)
mydata$admit <- as.factor(mydata$admit)
str(mydata)
# 2. 훈련과 테스트를 9대 1로 나눕니다.
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)))
}
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
summary(train_data_n)
summary(test_data_n)
# C와 gamma 값을 조정하여 모델 훈련
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)
binary_svm_model <- svm(admit ~ ., data = train_data_n, kernel = "radial", cost = C, gamma = gamma)
# 모델 예측
result <- predict(binary_svm_model, test_data_n[, -ncol(test_data_n)]) # 'admit' 컬럼 제외
# 모델 평가
accuracy <- sum(result == test_data_n$admit) / length(test_data_n$admit)
results <- rbind(results, data.frame(C = C, gamma = gamma, accuracy = accuracy))
}
}
results
library(doBy)
orderBy(~ -accuracy, results)