K-means 알고리즘은 n개의 객체들의 집합을 K개의 군집으로 분해하는 거리에 기반을 둔 clustering 기법이다.
K-평균법은 수치화된 자료에만 사용할 수 있다.
초기 조건에 따라 매우 판이한 결과 제공데이터의 모든 정보를 동일한 가중치로 계산함으로써 데이터 분별력이 약하다.
clustering의 단위가 거리값을 이용함에 따라 집단의 형태가 '원'의 형태를 띄고 그에 따라 각 원에 속하지 못하는 데이터가 발생할 수 있다.
Step1. 임의의 K개의 군집수를 결정하고, 각 군집에 초기치 또는 군집 중심을 1개씩 할당하여 위치 설정한다.
Step2. 각각의 데이터에 대해 K개의 위치까지의 거리를 구하고 가장 가까운 군집에 소속시킨다.(유클리드 거리를 이용)
Step3. 군집으로 나뉘어진 데이터를 기준으로 새로운 군집 중앙의 위치를 최소가 되도록 재설정한다.
Step4. 새롭게 구한 군집 중앙의 위치가 기존과 동일하면 알고리즘 종료하고 다르면 두 번째부터 재수행한다. 이 과정을 통하여 K개의 군집으로 데이터를 구분하고 K값에 따라 clustering에 많은 영향을 받는다.
## stats package를 이용하여 iris 데이터를 K-means 분석기법으로 분류해
## 본다.
library(stats)
## iris 데이터의 Species를 NULL값으로 지정하여 제거한 데이터를 사용한다.
data(iris)
iris2 <- iris
iris2$Species <- NULL
## Species를 제거한 iris2 데이터를 3개의 군집으로 분류한다.
kmeans.result <- kmeans(iris2, 3)
kmeans.result
## K-means clustering with 3 clusters of sizes 62, 50, 38
##
## Cluster means:
## Sepal.Length Sepal.Width Petal.Length Petal.Width
## 1 5.902 2.748 4.394 1.434
## 2 5.006 3.428 1.462 0.246
## 3 6.850 3.074 5.742 2.071
##
## Clustering vector:
## [1] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
## [36] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1 1 3 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [71] 1 1 1 1 1 1 1 3 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3 1 3 3 3
## [106] 3 1 3 3 3 3 3 3 1 1 3 3 3 3 1 3 1 3 1 3 3 1 1 3 3 3 3 3 1 3 3 3 3 1 3
## [141] 3 3 1 3 3 3 1 3 3 1
##
## Within cluster sum of squares by cluster:
## [1] 39.82 15.15 23.88
## (between_SS / total_SS = 88.4 %)
##
## Available components:
##
## [1] "cluster" "centers" "totss" "withinss"
## [5] "tot.withinss" "betweenss" "size"
## iris 데이터의 실제 Species와 K-means 분석기법으로 분류한 Species를
## 교차표로 출력한다.
table(iris$Species, kmeans.result$cluster)
##
## 1 2 3
## setosa 0 50 0
## versicolor 48 0 2
## virginica 14 0 36
## Sepal.Length와 Sepal.Width에 대하여 K-means 분석기법으로 분류한 결과를
## plot으로 출력한다.
plot(iris2[c("Sepal.Length", "Sepal.Width")], col = kmeans.result$cluster)
points(kmeans.result$centers[, c("Sepal.Length", "Sepal.Width")], col = 1:3,
pch = 8, cex = 2)