ch0nny_log

[빅데이터분석] R _ 74. carot 튜닝 본문

빅데이터 분석(with 아이티윌)/R

[빅데이터분석] R _ 74. carot 튜닝

chonny 2024. 7. 30. 11:21

 *  caret 패키지의 주요 기능

 

 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)​