본문 바로가기
R/Machine-Learning

R을 이용한 머신러닝 알고리즘 -군집분석 2-

by 씩2 2022. 3. 7.

저번 "군집분석1" 포스팅에서는 계층적분석에대해 다뤄 보았습니다.

이번 포스팅에서는 비계층분석에 대해 알아보겠습니다.

비계층분석으로는 우리가 알고있는 K-means군집 방법이 있습니다.

K-means군집 방식은 최초에 군집수(K)를 설정해주고 그 군집에 따라서 유사한 K개의 군집으로 분류하는것 입니다.

K-means군집 방식의 경우 장점은 빠르게 군집을 완성할수있습니다. 하지만 최초의 군집수를 잘 설정하지 못하면  결과가 좋지못하기 때문에 많은 경험과 노하우가 필요합니다.

이제 R를 이용하여 직접  K-means 군집분석을 실시해 보겠습니다.

getwd()
setwd('/Users/sik/Desktop/')
wine <- read.csv("wine.csv")
wine
install.packages('NbClust')
library(NbClust)
head(wine)
df <- scale(wine[-1])
wssplot <- function(data, nc=15, seed=1234){
  wss <- (nrow(data)-1)*sum(apply(data,2,var))
  for (i in 2:nc){
    set.seed(seed)
    wss[i] <- sum(kmeans(data, centers=i)$withinss)}
  plot(1:nc, wss, type="b", xlab="Number of Clusters", ylab="Within groups sum of squares")} 
windows()
wssplot(df) # 사용자 정의 함수
df
set.seed(1234)
nc <- NbClust(df, min.nc = 2, max.nc = 14, method = 'kmeans')
windows()
barplot(table(nc$Best.nc[1, ]),
        xlab = 'Number of Clusters', ylab = 'Number of Criteria',
        main = 'Number of Clusters Chosen by 26 Criteria')

 

그래프를 토대로 저는 4개의 군집수를 설정하여 K-means 클러스터링을 진행해 보도록 하겠습니다.

군집분석의 패키지에는 여러가지가 있지만 개인적으로 보기가 편하다고 생각한 "cclust" package를 이용해 보도록 하겠습니다

install.packages('cclust')
library(cclust)
cl.1 <- cclust(Nclus, 4, 20, method = 'kmeans')
windows()
plot(Nclus, col = cl.1$cluster)
points(cl.1$centers, col = 1:4, pch = 8, cex = 1.5)

코드는 다음과 같습니다. 

points()는 각 군집에 속한 변수들을 점(point)로 찍어줍니다. col = 색상 설정  pch = 군집가운데표시 크기 , cex = 점의 크기를 설정해줄수있습니다. 코드입력뒤 결과는 다음과 같습니다.

4개의 군집대로 분리된것을 볼수있다.

제가이용한 cclust패키지말고도 여러 패키지가많으니 검색뒤 보기편한 패키지를 이용하시면 좋을것 같습니다.