#1. 데이터 불러오기
setwd("c:\\data")
wine <- read.csv("wine2.csv" , stringsAsFactors=T, fileEncoding = "euc-kr")
head(wine)
str(wine)
#2. 데이터 살펴보기
colSums(is.na(wine))
#3. 훈련 데이터와 테스트 데이터 분리하기
library(caret)
set.seed(1)
train_num <- createDataPartition( wine$Type, p=0.8, list=F)
length(train_num) # 143
train_data <- wine[ train_num, ]
test_data <- wine[ -train_num, ]
nrow(train_data) # 143
nrow(test_data) # 34
#4. 의사결정트리 모델 만들기
install.packages("C50")
library(C50) # 질문 나무 만드는 패키지
model <- C5.0( train_data[ , c(-1) ], train_data[ , 1] )
model
summary(model) # 정보 획득량이 높은 질문부터 질문 순서를 보여줍니다.
# 위의 결과를 시각화 하려면?
plot(model)
#5. 테스트 데이터 예측하기
# 훈련 데이터의 정확도
train_result <- predict( model, train_data[ , c(-1) ] )
train_result
sum( train_result == train_data[ , 1] ) / 143 * 100 #99.3007%
#6. 모델 성능 확인하기
# 테스트 데이터의 정확도
test_result <- predict( model, test_data[ , c(-1) ] )
test_result
sum( test_result == test_data[ , 1] ) / 34 * 100 #94.11765%
#7. 모델 성능 높이기
library(C50)
model2 <- C5.0( train_data[ , c(-1) ], train_data[ , 1], trials=5 )
# 훈련 데이터의 정확도
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 # 94.11765%
#정확도 개선
head(wine)
library(caret)
set.seed(1)
train_num <- createDataPartition( wine$Type, p=0.8, list=F)
length(train_num)
train_data <- wine[ train_num, ]
test_data <- wine[ -train_num, ]
nrow(train_data) #143
nrow(test_data) #34
library(C50)
model<-C5.0(train_data[ ,-1],train_data[ ,1], trials=5)
model
y <- 1
jumpby <-1
options(scipen=999)
for ( i in 1:20 ) {
model<-C5.0(train_data[ ,-1],train_data[ ,1], trials=y)
test_result2 <- predict(model, test_data[ ,-1])
a<- sum(test_result2 == test_data[ ,1])/34*100 #100%
y <- y + jumpby
print(paste(i,'일때',a))
}
library(gmodels) #의사결정 나무의 갯수는 1~100까지만 지정할 수 있음
wine_model<-C5.0(train_data[ ,-1],train_data[ ,1], trials=4)
test_result2 <- predict(wine_model, test_data[ ,-1])
x <- CrossTable( test_data[ ,1], test_result2)
x$t