ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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

    : 해당 방법은 유클리디안 거리를 사용한다

    1. K개의 점을 선택한다. K개의 점은 각 그룹의 중심이 된다.
    2. 모든 점을 K개의 중심이 되는 점들 중 가장 가까운 점이 속한 그룹에 배정한다.
    3. 같은 그룹에 속하는 점들의 평균값으로 새로운 중심점을 구한다.
    4. 더 이상 그룹이 변하는 점이 없을 때까지 혹은 정해진 횟수만큼 2-3번을 반복한다.
    5. Silhouette score를 통해서 K의 값을 결정한다.

    # K-Means Clustering 

    from sklearn.cluster import KMeans
    NUM_CLUSTERS = 3

    kmeans = 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가 사용된다

     

    1. 처음 시작할 때, 각 데이터 포인트는 하나의 군집으로 간주한다.
    2. 거리가 가까운 순서대로 군집들을 순차적으로 연결한다.
      * single: 각 군집을 구성하는 데이터 포인트 중에서 가장 가까운 데이터 포인트 간의 거리를 사용
      * complete: 각 군집을 구성하는 데이터 포인트 중에서 가장 먼 데이터 포인트 간의 거리를 사용
      * average: 각 군집을 구성하는 데이터 포인트들 간의 평균 거리를 사용
      * ward: 두 개의 군집이 합쳐졌을 때의 데이터 포인트들이 갖는 분산이 가장 작은 군집끼리 묶어주는 방법
    3. 모든 군집들이 연결되어 하나의 군집이 될 때까지 2번을 반복한다.
    4. 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
    : 군집의 개수를 사용자가 지정할 필요가 없으며 불특정한 분포의 데이터를 군집화하는데 뛰어나다.

    1. 임의의 데이터 포인트 선택
    2. 해당 데이터 포인트를 기준으로 ε(epsilon) 만큼의 반경 내에 minPts 개수 이상의 데이터 포인트가 존재하는 경우 해당 데이터 포인트를 Core point로 할당
    3. 해당 데이터 포인트를 기준으로 ε(epsilon) 만큼의 반경 내에 minPts 개수 이상의 데이터 포인트가 존재하지 않는 경우 해당 데이터 포인트를 Border point로 할당
    4. Core point와 Core point가 직접적으로 도달 가능하다면 두 군집은 하나의 군집으로 간주
    5. Core point에도 Border point에도 해당하지 않는 데이터 포인트는 이상치로 간주
    6. 모든 데이터가 특정 군집 혹은 이상치에 할당될 때까지 반복

    # 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 norms

    find_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

    댓글

Designed by Tistory.