## 데이터 로드 wine <- read.csv("c:\\data\\wine2.csv", stringsAsFactors = TRUE) head(wine) #정답(클래스) 컬럼 : Type dim(wine) #177, 14 str(wine) #정답(클래스) 컬럼 factor형 확인완료
## 필요한 패키지 설치 & 로드 # install.packages("caret") # install.packages("e1071") # SVM을 위한 패키지 library(caret) library(e1071)
## 훈련/테스트(80:20) 데이터 분할 set.seed(123) train_idx <- createDataPartition(wine$Type, p = 0.8, list = FALSE) train_data <- wine[train_idx, ] test_data <- wine[-train_idx, ] dim(train_data) #143, 14 dim(test_data) #34, 14
## k-holdout 교차 검정 (10-Fold) # 훈련 데이터(train_data)에서만 수행하여 모델을 학습하고 평가 # 테스트 데이터(test_data)에는 전혀 영향을 미치지 않음 (최종 성능 평가에서만 사용됨) control <- trainControl(method = "cv", number = 10) # 10-Fold Cross Validation
## SVM 모델 학습 (Radial Basis Function 사용) svm_model <- train(Type ~ ., data = train_data, method = "svmRadial", trControl = control) # 이 과정에서 추가적인 성능 최적화를 원한다면, 직접 하이퍼 파라미터 설정할 수 있음
## 모델 성능 평가 # 테스트 데이터 정확도 확인 pred_test <- predict(svm_model, test_data[,-1]) conf_mat_test <- confusionMatrix(pred_test, test_data$Type) # Accuracy : 0.9706, 테스트 데이터의 정확도는 97.06%
#훈련 데이터 정확도 확인 pred_train <- predict(svm_model, train_data[,-1]) conf_mat_train <- confusionMatrix(pred_train, train_data$Type) # Accuracy : 0.993, 훈련 데이터의 정확도는 99.3%
## 결론 # 훈련 데이터에서 99.3%의 정확도를 보이며 매우 높은 성능이다 # 테스트 데이터에서도 97.06%로 높은 정확도를 유지한다 # 즉, 모델이 훈련 데이터에서 잘 학습되었다
# 훈련 데이터와 테스트 데이터의 정확도 차이가 크지 않다 (약 2.24% 차이) # 일반적으로 과적합이 심하면 훈련 데이터 정확도 100%, 테스트 데이터 정확도 80% 이하로 나오는 경우가 많다 # 지금은 차이가 크지 않아서 심각한 과적합은 아니다 # 하지만 더 일반화 성능을 높이고 싶다면, 하이퍼파라미터 튜닝을 고려해볼 수 있다
# 결론 한 줄 요약 # SVM 모델이 훈련 데이터(99.3%)와 테스트 데이터(97.06%) 모두에서 높은 정확도를 보여주며, 과적합 위험이 적고 일반화 성능이 우수한 모델이다. |