1. 데이터 전처리를 쉽게 할 수 있음 2. 하이퍼 파라미터 튜닝을 자동화 할 수 있음 3. 이원 교차표를 제공하여 모델 평가를 할 수 있음
하이퍼 파라미터는 모델을 학습 시키는 사람이 직접 알아내야하는 파라미터입니다.
예: knn 의 k값, naivebayes의 laplace, 신경망의 학습률과 층수와 뉴런수, 서포트 백터 머신의 C 와 gamma
#install.packages("caret")
# install.packages("e1071")
library(caret)
library(e1071)
# 데이터 로드
data(iris)
# 훈련 데이터와 테스트 데이터 분할
set.seed(123)
trainIndex <- createDataPartition(iris$Species, p = .8, list = FALSE, times = 1)
# times=1 은 데이터 분할을 몇번 반복할지를 지정하는건데 1번만 분할하겠다.
# times 의 숫자를 크게 넣으면 분할을 여러번 하면서 훈련과 테스트 데이터를
# 더 잘 균등하게 분할해줍니다. 특히 정답이 골고루 섞이게 해줍니다.
# 모델의 안정성을 높이고 과적합을 예방할 수 있는 방법중 하나입니다.
irisTrain <- iris[ trainIndex,]
irisTest <- iris[-trainIndex,]
# 튜닝 그리드 설정 ( 서포트 백터 머신의 하이퍼 파라미터 )
tuneGrid <- expand.grid(C = 2^(-5:2), sigma = 2^(-15:2))
# 트레이닝 컨트롤 설정 ( k-foldout 의 k 개를 5개로 둬서 훈련 데이터를 5개로 등분함)
trainControl <- trainControl(method = "cv", number = 5)
# SVM 모델 훈련 및 튜닝 ( 5개의 훈련 데이터를 반복하면서 최적의 하이퍼 파라미터
# 알아냅니다.
svmModel <- train(Species ~ ., data = irisTrain,
method = "svmRadial",
tuneGrid = tuneGrid,
trControl = trainControl)
# 최적의 파라미터와 결과
print(svmModel)
# 테스트 데이터로 예측( 최적의 하이퍼 파라미터로 셋팅된 베스트 모델로 예측)
predictions <- predict(svmModel, newdata = irisTest)
# 모델 성능 평가
confusionMatrix(predictions, irisTest$Species)
■ R을 활용한 머신러닝 마지막 문제 (caret을 이용한 자동튜닝을 wine2.csv에 적용해서 서포트 벡터 머신 모델을 만드시오. 최적의 하이퍼 파라미터의 조합을 쉽게 알아낼 수 있도록 하시오.)
install.packages("caret")
install.packages("e1071")
library(caret)
library(e1071)
# 데이터 로드
wine <- read.csv("c:\\data\\wine2.csv")
wine$Type <- as.factor(wine$Type)
# 훈련 데이터와 테스트 데이터 분할
set.seed(123)
trainIndex <- createDataPartition(wine$Type, p = .8,
list = FALSE,
times = 1)
wineTrain <- wine[ trainIndex,]
wineTest <- wine[-trainIndex,]
# 튜닝 그리드 설정
tuneGrid <- expand.grid(C = 2^(-5:2), sigma = 2^(-15:2))
# 트레이닝 컨트롤 설정
trainControl <- trainControl(method = "cv", number = 5)
# SVM 모델 훈련 및 튜닝
svmModel <- train(Type ~ ., data = wineTrain,
method = "svmRadial",
tuneGrid = tuneGrid,
trControl = trainControl)
# 최적의 파라미터와 결과
print(svmModel)
# 테스트 데이터로 예측
predictions <- predict(svmModel, newdata = wineTest)
# 모델 성능 평가
confusionMatrix(predictions, wineTest$Type)