R - KNN 예제 #2





이번 시간엔 iris 데이터를 통해 분류해보는 예제입니다. KNN 알고리즘 설명 : KNN 알고리즘은 지도 학습의 한 종류로서 데이터에서 서로 거리가 가까운 K개의 다른 데이터를 서로 참조하여 분류하는 알고리즘입니다. 그래서 벡터의 크기가 커지면 계산 자체가 복잡해지는 문제가 있습니다.


코드

# KNN - 최근접 알고리즘을 사용

d<-iris
head(d)

install.packages("ggvis")
library(ggvis)
#iris %>% ggvis(~Petal.Length, ~Sepal.Width, fill=~factor(Species)) %>% layer_points() # %>%

iris %>% ggvis(~Petal.Length, ~Petal.Width, fill=~factor(Species)) %>% layer_points()
#분류하기
iris[1:4]

#데이터 정규화
min_max_normal <- function(x){
  num <- x  - min(x)
  m_n <- max(x) - min(x)
  print(num/m_n)
  #return(num/m_n)
}
normal_d<-as.data.frame(lapply(iris[1:4], min_max_normal)) #apply는 다른함수를 실행하는것, iris[1:4]를 가지고 min_max_normal로 가서 실행함
normal_d

summary(normal_d) #min 0 , max 1

# 정규화 데이터 + 꽃 종류

df <- data.frame(normal_d, Species= iris$Species)
head(df,3)

#학습, 검정 데이터로 분리
set.seed(123)
idx <-sample(1:nrow(df),0.7*nrow(df))
ir_train <- df[idx,]
ir_test <- df[-idx,]
nrow(ir_train); nrow(ir_test)

# KNN 모델 적용
#모델 만듬
library(class)
model <- knn(train=ir_train[,-5], test=ir_test[,-5],cl=ir_train$Species, k=3)
model
summary(model)

#모델 평가
t <-table(model,ir_test$Species)
t
(12+16+14)/nrow(ir_test) #93퍼센트
acc <-(t[1,1] + t[2,2] + t[3,3])/nrow(ir_test) #93퍼센트
acc

library(gmodels)
CrossTable(x = ir_test$Species, y=model, prop.chisq = F)

# 최적의 k값 구하기
sqrt(length(ir_train$Sepal.Length)) # k :9 , 11
model2 <-knn(train = ir_train[,-5],test = ir_test[,-5],cl=ir_train$Species,k=11)
summary(model2)
t<-table(model2,ir_test$Species)
t
acc <-(t[1,1]+t[2,2]+t[3,3])/nrow(ir_test)
acc






샘플 데이터



본 포스팅은 KIC 캠퍼스에서 박영권 강사의 지도하에 공부하며 작성한 리포트입니다.
혹시 잘못된 내용이 있거나 문제 소지시 댓글 남겨주시면 조치하겠습니다.





'스터디 > ML·AL' 카테고리의 다른 글

R - neuralnet 함수를 사용하여 역전파 알고리즘 사용 예제  (0) 2018.05.13
R - ANN 알고리즘 예제#2  (0) 2018.05.13
R - ANN 알고리즘 예제 #1  (0) 2018.05.13
R - KNN 예제 #2  (0) 2018.05.13
R - KNN 예제 #1  (0) 2018.05.13
R - SVM 예제  (0) 2018.05.09
라즈베리파이에 Mariadb 설치하기 #1  (0) 2018.05.08

댓글(0)

Designed by JB FACTORY