안녕하세요~
너무 오랜만이네요ㅜㅜ
정보처리기사 실기시험등 다양한 이유로
이제야 돌아왔습니다!ㅋㅋ
관련 포스팅은 궤도에 오르다에서!
사설은 여기까지!
오늘은 비지도학습, 클러스터링 알고리즘 중
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) 요소를 사용하기 때문에 최적의 클러스터 집합을 찾는 것이 보장되지 않는다.
데이터에 존재하는 자연스런 클러스터 개수에 대한 합리적인 추측이 필요하다.
'R로 머신러닝하기' 카테고리의 다른 글
Python으로 머신러닝하기 | 정확도, 정밀도, 재현율, F-score(F-measure)란? (0) | 2018.11.12 |
---|---|
R 로 머신러닝 비지도학습 하기 | SVM(Support Vector Machine, 서포트 벡터 머신) (0) | 2018.07.10 |
R로 머신러닝 비지도학습하기 | 연관규칙 (Apriori 알고리즘) (0) | 2018.06.22 |
R로 머신러닝 지도학습하기 | 회귀분석(Regression)_다중회귀분석 (0) | 2018.06.20 |
R로 머신러닝 지도학습하기 | 결정트리 (Decision Tree) (2) | 2018.06.11 |