#구현 순서
#1. 데이터를 불러옵니다.
mydata <- read.csv("c:\\data\\binary.csv", header=T)
head(mydata)
mydata$admit <- as.factor(mydata$admit)
str(mydata)
#2. 훈련과 테스틀 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) # 320
nrow(test_data) # 80
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) )
test_data_n$admit <- test_data$admit
train_data_n$admit <- train_data$admit
summary(train_data_n)
summary(test_data_n)
# admit 변수를 팩터형으로 변환
mydata$admit <- as.factor(mydata$admit)
head(mydata)
# 필요한 변수만 선택
mydata_subset <- mydata[ , ]
mydata_subset
# 훈련 데이터와 테스트 데이터를 분리
library(caret)
set.seed(1)
results <- data.frame( C=numeric(), gamma=numeric(), accuracy=numeric() )
for ( C in C_values) {
for ( gamma in gamma_values) {
# 모델 생성 및 하이퍼파라미터 설정
library(e1071)
# C와 gadmitma 값을 조정하여 모델 훈련
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]) # 정답제외하고 예측함
# 모델 평가
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)
orderBy(~ -accuracy, results )