본 포스팅은 충남대 정상근 교수님의 강의를 참고하였습니다. 개인 공부를 기록하는 목적의 포스팅이며, 문제가 될 시 삭제하겠습니다.
클러스터링(군집화)은 개체들이 주어졌을 때, 개체들을 몇 개의 클러스터로 나누는 과정을 의미한다. 이 과정을 통해 동일한 집단내에서는 서로 가깝거나 비슷하게, 타 집단 개체 사이에는 서로 멀거나 비슷하지 않게 하는 것이 클러스터링의 목표이다.
비지도 학습은 정답을 알려주지 않고 비슷한 데이터를 군집화 하여 미래를 예측하는 학습 방법이다. 기계가 라벨링이 되어있지 않은 데이터로부터 특성을 찾아야 한다. 일반적으로 데이터는 라벨링이 되어있지 않고, 종류또한 무엇인지 알 수 없는 경우가 많기 때문에 지도 학습에 비해 더 많이 활용된다.
클러스터링 알고리즘은 대표적인 비지도 학습 알고리즘이며, 주로 성향이 불분명한 시장을 분석하는 경우, 고객 분석, 패턴인식에 사용되며 최근에는 패턴인식, 음성인식의 기본 알고리즘으로도 활용되고 있다.
클러스터링에 사용되는 알고리즘은 크게 분할군집화(Partitional Clustering)와 계층군집화(Hierarchical clustering)로 나눌 수 있는데, 본 글에서는 분할군집화의 k-means와 DBSCAN (Density-based method)을 알아보고 계층 군집화(Hierarchical Clustering)에 대해서도 알아본다.
k와 centroid가 굉장히 중요하며 이상치(outlier)에 취약하다.
k-means 등을 활용한 클러스터링의 경우 이상치에 굉장히 민감한 영향을 받는데, 이에 대한 해법 중 하나이다.
Eps : cluster의 반지름.
MinPts : min points. core point가 되기 위한 Eps 안에 있는 최소한의 point의 수.
핵심점(core point) : 속하는 점
경계점(border point) : 경계에 있는 점
잡음점(noise point) : core도, border도 아닌 점
scikit-learn을 사용하여 거리를 구할 수 있다.
from sklearn.cluster import KMeans, AgglomerativeClustering, DBSCAN
model = KMeans(n_clusters=2, init="random", n_init=1, max_iter=n, random_state=6).fit(X)
agg = AgglomerativeClustering(n_clusters=3)
db = DBSCAN(eps=0.2, min_samples=10).fit(test_data)