-
Clustering기계학습이론과실습 2022. 5. 4. 15:02
군집화 분석을 이해하기 위해서는 벡터에서의 유사도를 먼저 이해할 필요가 있다.
1. 유클리디안 유사도:
거리 기반 유사도로 보통 관측치의 단위가 비슷할 때 쓴다
np.linalg.norm(b-a)
2. 코사인 유사도:
각도 기준 유사도로 보통 관측치의 단위가 크게 차이가 날 때 쓴다.
np.dot(a,b)/(np.linalg.norm(a)*np.linalg.norm(b))
그 외에 Manhattan distance, Jaccard distance, Hamming distance 등이 존재한다.
A. K-Means Clustering
: 해당 방법은 유클리디안 거리를 사용한다
- K개의 점을 선택한다. K개의 점은 각 그룹의 중심이 된다.
- 모든 점을 K개의 중심이 되는 점들 중 가장 가까운 점이 속한 그룹에 배정한다.
- 같은 그룹에 속하는 점들의 평균값으로 새로운 중심점을 구한다.
- 더 이상 그룹이 변하는 점이 없을 때까지 혹은 정해진 횟수만큼 2-3번을 반복한다.
- Silhouette score를 통해서 K의 값을 결정한다.
# K-Means Clustering
from sklearn.cluster import KMeans
NUM_CLUSTERS = 3kmeans = KMeans(n_clusters=NUM_CLUSTERS)
clusters = kmeans.fit_predict(X)
# Silhouette score
from sklearn.metrics import silhouette_score
for k in range(2,8):
kmeans = KMeans(n_clusters=k, max_iter=10)
cluster = kmeans.fit_predict(X)
print(k, silhouette_score(X, cluster))
B. Hierarchical Clustering
: Agglomerative method(Bottom-up approach)와 Divisive method(Top-down approach) 두 가지가 존재하며 보통 Agglomerative method가 사용된다- 처음 시작할 때, 각 데이터 포인트는 하나의 군집으로 간주한다.
- 거리가 가까운 순서대로 군집들을 순차적으로 연결한다.
* single: 각 군집을 구성하는 데이터 포인트 중에서 가장 가까운 데이터 포인트 간의 거리를 사용
* complete: 각 군집을 구성하는 데이터 포인트 중에서 가장 먼 데이터 포인트 간의 거리를 사용
* average: 각 군집을 구성하는 데이터 포인트들 간의 평균 거리를 사용
* ward: 두 개의 군집이 합쳐졌을 때의 데이터 포인트들이 갖는 분산이 가장 작은 군집끼리 묶어주는 방법 - 모든 군집들이 연결되어 하나의 군집이 될 때까지 2번을 반복한다.
- Dendrogram을 활용하여 최적의 K개의 군집을 선택하는 cutting point를 정한다.
# Hierarchical Clustering(Agglomerative Clustering)
from sklearn.cluster import AgglomerativeClustering
cluster_idf = AgglomerativeClustering(linkage='ward', n_clusters=4)
cluster_idf = hc.fit(X)
C. DBSCAN
: Density-Based Spatial Clustering of Applications with Noise
: 군집의 개수를 사용자가 지정할 필요가 없으며 불특정한 분포의 데이터를 군집화하는데 뛰어나다.- 임의의 데이터 포인트 선택
- 해당 데이터 포인트를 기준으로 ε(epsilon) 만큼의 반경 내에 minPts 개수 이상의 데이터 포인트가 존재하는 경우 해당 데이터 포인트를 Core point로 할당
- 해당 데이터 포인트를 기준으로 ε(epsilon) 만큼의 반경 내에 minPts 개수 이상의 데이터 포인트가 존재하지 않는 경우 해당 데이터 포인트를 Border point로 할당
- Core point와 Core point가 직접적으로 도달 가능하다면 두 군집은 하나의 군집으로 간주
- Core point에도 Border point에도 해당하지 않는 데이터 포인트는 이상치로 간주
- 모든 데이터가 특정 군집 혹은 이상치에 할당될 때까지 반복
# DBSCAN(유클리디언 유사도)
from sklearn.cluster import DBSCAN
clustering = DBSCAN(eps=3.5, min_samples=2).fit(X)
# DBSCAN(코사인 유사도)
clustering2 = DBSCAN(eps=0.1, min_samples=2, metric='cosine').fit(X1)
# 최적의 ε(epsilon) 구하기
def nearest_dist(a):
norms = []
for i in range(len(a)):
temp_norms = []
for j in range(len(a)):
if i != j:
norm = np.linalg.norm(a[i]-a[j])
temp_norms.append(norm)
norms.append(min(temp_norms))
return normsfind_epsilon = nearest_dist(X)
np.array(find_epsilon).mean()
'기계학습이론과실습' 카테고리의 다른 글
Ensemble methods (0) 2022.05.11 Decision Tree (0) 2022.05.04 Course Intro (0) 2022.05.04 Naive Bayes (0) 2022.05.03 Document Classification (0) 2022.04.25