#1. 데이터 불러오기
wine <- read.csv('wine2.csv', stringsAsFactors=T)
head(wine)
#2. 데이터 살펴보기
str(wine)
##정답컬럼: Type(1/2/3)
> prop.table(table(wine$Type))
t1 t2 t3
0.3333333 0.4011299 0.2655367
#결측치확인
colSums(is.na(wine))
#3. 훈련 데이터와 테스트 데이터 분리하기
library(caret)
set.seed(1)
train_num <- createDataPartition(wine$Type, p=0.8, list=F)
train_data <- wine[train_num, ]
test_data <- wine[-train_num, ]
nrow(train_data) #143
nrow(test_data) #34
ncol(train_data) #컬럼수 14
head(train_data) #종속변수는 1번째 컬럼
#4. 의사결정트리 모델 만들기
library(C50)
wine_model <- C5.0(train_data[ ,-1], train_data[ ,1])
#5. 모델 확인
summary(wine_model)
#6. 모델 예측
train_result <- predict(wine_model, train_data[ , -1])
test_result <- predict(wine_model, test_data[ , -1])
#7. 모델 평가
#훈련 정확도
sum(train_result == train_data[ , 1] ) / 143 * 100
#테스트 정확도
sum(test_result == test_data[ , 1]) / 34 * 100
#8. 모델 개선
trials 파라미터를 주고 모델의 성능을 올리시오
y <- 1
jumpby <-1
options(scipen=999)
for ( i in 1:10 ) {
wine_model2 <- C5.0( train_data[ ,-1], train_data[ ,1], trials=y)
test_result2 <- predict( wine_model2, test_data[ , -1])
a<- sum(test_result2 == test_data[ ,1])/34 *100
y <- y + jumpby
print(paste(i,'일때',a))
}
***
[1] "1 일때 94.1176470588235"
[1] "2 일때 94.1176470588235"
[1] "3 일때 97.0588235294118"
[1] "4 일때 100"
[1] "5 일때 94.1176470588235"
[1] "6 일때 97.0588235294118"
[1] "7 일때 97.0588235294118"
[1] "8 일때 97.0588235294118"
[1] "9 일때 97.0588235294118"
[1] "10 일때 97.0588235294118"
***
#9. 개선된 모델 성능 평가하기
library(C50)
model2 <- C5.0(train_data[ , c(-1)], train_data[ ,1], trials=4)
#훈련 데이터의 정확도
train_result2 <- predict(model2, train_data[ , c(-1)])
train_result2
sum(train_result2 == train_data[ ,1]) / 143 * 100 #100%
#테스트 데이터의 정확도
test_result2 <- predict(model2, test_data[ , c(-1)])
test_result2
sum(test_result2 == test_data[ ,1] ) / 34 * 100 #100%