library(shiny)
iris <- read.csv("iris2.csv", stringsAsFactors = TRUE)
str(iris)
head(iris)
iris2 <- iris[,c(-5)]
normalize <- function(x){ return ((x-min(x))/(max(x)-min(x)))}
iris_n <- as.data.frame(lapply(iris2, normalize))
set.seed(10)
train_indx<- createDataPartition(iris$Species, p=0.9, list=FALSE)
# 기계를 학습 시킬 훈련 데이터와 테스트 데이터 생성
iris_train <- iris_n[train_indx, ]
iris_test <- iris_n[-train_indx, ]
nrow(iris_train) # 135
nrow(iris_test) # 15
# 기계를 학습 시킬 훈련 데이터의 정답과 테스트 데이터의 정답 생성
iris_train_label <- iris$Species[train_indx]
iris_test_label <- iris$Species[-train_indx]
length(iris_train_label) # 135
length(iris_test_label) # 15
# 4단계: 모델 성능 평가
accuracies <- data.frame(k = integer(), accuracy = numeric())
set.seed(10)
for (i in seq(1, 57, 2)) {
result1 <- knn(train = iris_train, test = iris_test, cl = iris_train_label, k = i)
accuracy <- sum(result1 == iris_test_label) / length(iris_test_label) * 100
accuracies <- rbind(accuracies, data.frame(k = i, accuracy = accuracy))
print(paste(i, '개 일때 정확도 ', accuracy))
}
# 정확도 데이터 프레임 확인
accuracies
# plotly로 라인 그래프 시각화
fig <- plot_ly(accuracies, x = ~k, y = ~accuracy, type = 'scatter', mode = 'lines+markers', line = list(color = 'red'))
fig <- fig %>% layout(title = "K 값에 따른 정확도",
xaxis = list(title = "K 값"),
yaxis = list(title = "정확도"))
fig