Notice
Recent Posts
Recent Comments
Link
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

류동균의 R 공부방입니다.

K-평균 군집(K-means clustering) 본문

Machine Learning

K-평균 군집(K-means clustering)

R쟁이 2019. 10. 2. 18:01

K-평균 군집(K- means clustering)이란 무엇인가 ?

 

데이터를 K개의 군집으로 묶는 알고리즘이다. 각각의 군집사이의 거리를 최소화하여 군집을 이룬다. 쉽게말해 공간상의 점들을 서로 가까운 점들끼리 묶어서 K개의 군집으로 나누는 방법이다. KNN과 다르게 K-평균은 트레이닝과 라벨이 없이 데이터를 처리할 수 있다. K-평균은 다음의 그림과 같이 그룹을 만든다.

​K-평균으로 iris데이터의 군집화

K-평균 알고리즘으로 iris데이터의 Species(종)을 분류해 볼 것이다. 그동안 블로그에서 많은 알고리즘으로 iris데이터의 Species를 분류하는 작업을 하였지만 라벨이 있는 training이 된 모델들 이였다. K-평균에서는 라벨과, Training 없이 Species의 분류라는 동일한 목표를 수행 할 것이다.

# Species를 제외한 iris데이터 
kmean_iris <- iris[,1:4]

# k=3으로 k-means 적용
clusters <- kmeans(kmean_iris, 3)

clusters를 실행시켰을때 다음과 같은 결과가 나올것이다. K-평균은 별도의 라벨을 가지고 있지 않으며 vector로 1, 2, 3으로 표현된 것을 볼 수 있다.

K-평균과 실제 iris 데이터의 비교

이제 군집라벨과 실제 iris 데이터의  Species와 비교해보자.

# K-평균과 iris데이터의 Species의 비교
table(clusters$cluster, iris$Species)

다음의 table을 보면 setosa는 2, versicolor는 3, viginica는 1로 분류 된것을 확인할 수 있다.

 

Petal.Length, Petal.Width에 따른 군집 시각화

이번엔 시각적으로 어떻게 군집이 이루어졌는지를 살펴보자.

# Petal.Length, Petal.Width에 따른 군집
plot(kmean_iris[c("Petal.Length", "Petal.Width")],
	 col=clusters$cluster, pch = c(15,16,17)[as.numeric(clusters$cluster)])

points(clusters$centers[,c("Petal.Length", "Petal.Width")],col=1:3, pch=8, cex=2)

다음과 같이 K-평균을 중심으로 setosa, virginica, versicolor가 군집화 된 것을 알 수 있다.