반응형

안녕하세요~


너무 오랜만이네요ㅜㅜ


정보처리기사 실기시험등 다양한 이유로

이제야 돌아왔습니다!ㅋㅋ


관련 포스팅은 궤도에 오르다에서!


사설은 여기까지!




오늘은 비지도학습, 클러스터링 알고리즘 중

K-means 알고리즘에 대해 알아보도록 하겠습니다.



우선 클러스터링이란 무엇일까요?


클러스터링(군집화)이란, 

데이터를 클러스터(또는 유사한 아이템의 그룹)로 자동 분리하는 비지도학습(unsupervised) 머신러닝 방법입니다.


군집화는 예측보단 데이터 안에서 발견되는 그 그룹에 대한 패턴, 즉 통찰력을 제공합니다.


군집화의 기본 아이디어: 클러스터 안에 있는 아이템들은 서로 아주 비슷해야하지만 클러스터 밖에 있는 아이템은 아주 달라야한다.




K-means 알고리즘 이란?


가장 일반적으로 사용되는 군집화 방법으로,

특징 공간에서 주어진 데이터를 k개의 클러스터로 묶는 알고리즘입니다.




그렇다면 knn과 k-means는 어떻게 다를까요?


공통점


거리함수를 이용하여 중심에 가까운 거리에 있는 데이터를 클러스터링합니다.


차이점


knn알고리즘은 label이 있는 지도학습이지만, k-means는 앞에서 언급했듯이 비지도학습 방법입니다.




k, 클러스터의 개수 선택하는 방법


k 값을 너무 작게 설정하면 분류를 잘 하지 못하고,

k 값을 너무 크게 설정하면 그룹내의 동질성이 올라가 과적합이 일어날 수 있습니다.


1. k = sqrt(n/2) : k를 (n/2)의 제곱근과 동일하게 설정


2. elbow point: 클러스터 내의 동질성과 이질성의 변화를 측정하여 특정 포인트를 넘으면 결과가 약화되는 k를 찾는 방법




R 코드로 알고리즘 설명하기



1. k-means 알고리즘

# 1. 기본 데이터 셋을 만든다. 무조건 수치형 데이터여야한다. c <- c(3,4,1,5,7,9,5,4,6,8,4,5,9,8,7,8,6,7,2,1) row <- c("A","B","C","D","E","F","G","H","I","J") col <- c("X","Y") data <- matrix( c, nrow= 10, ncol=2, byrow=TRUE, dimnames=list(row,col)) data # 데이터 확인하기1 # 2. plot 그래프를 그린다 plot(data) # 데이터 확인하기2 # 3. stats 패키지를 설치한다. # install.packages("stats") library(stats) # 4. kmeans 함수로 데이터를 분류한다. # k개 구하는 공식: k = sqrt(n/2) k = round(sqrt(length(data)/2)) km <- kmeans(data,2) kc <- km$centers cbind(data,km$cluster) # 5. 분류한 파라미터 값을 가지고 다시한번 시각화 한다. plot(round(kc), col = kc2, pch=22, bg=kc2+1, xlim = range(0:10), ylim = range(0:10)) par(new=T) plot(data, col =km$cluster+1, xlim=range(0:10), ylim = range(0:10))


2. 시각화하기

# install.packages("factoextra") library(factoextra) fviz_cluster(km, data = data, stand = F)


[결과]





kmeans 알고리즘의 장점: 간단한 원리, 매우 유연


kmeans 알고리즘의 단점: 임의의 우연(random chance) 요소를 사용하기 때문에 최적의 클러스터 집합을 찾는 것이 보장되지 않는다.

데이터에 존재하는 자연스런 클러스터 개수에 대한 합리적인 추측이 필요하다.

반응형

+ Recent posts