이 방법은 k-means 방법처럼, 클러스터 개수 가정해줄 필요가 없습니다. 또 이방법에서 주목한점이 군집간 거리를 활용하는 방법입니다.

.............................................................................................................................

  • 군집간 거리 측정 방식

-method : single, complete, average, centroid, ward linkage 방식이 존재

-Centroid : 두 군집의 중심점(centroid)를 정의한 다음 두 중심점의 거리를 군집간의 거리로 측정

-Single : 최단 연결법, 모든 데이터 조합에서 데이터 사이 거리를 측정해서 가장

최소 거리(작은 값)를 기준으로 군집 거리를 측정

-Complete : 최장 연결법으로 두 클러스터상에서 가장 먼 거리를 이용해서 측정하는 방식

-Average : 평균 연결법, 두 군집의 데이터들 간 모든 거리들의 평균을 군집간 거리로 정의(위에서 singe.complete를 합쳐준 방법이라하면 되겠다)

-Ward : 와드연결법은 군집분석의 각 단계에서 데이터들을 하나의 군집으로 묶음으로써 생기는 정보의 손실을 군집의 평균과 데이터들 사이의 오차제곱합(SSE)으로 아래와 같이 측정한다.

.............................................................................................................................

<코드부분>

Xi = np.array([[0,17,21,31,23],[17,0,30,34,21],[21,30,0,28,39],[31,34,28,0,43],[23,21,39,43,0]]) dists = squareform(Xi) #여기서 flat하게 바꾸어 주어야한다.이거 안해주고 넣으면 어딘가 이상해짐  Z = linkage(dists, method='single')  # method는 여기서 변경해주면 된다 dendrogram(Z)   # 아래 그래프 출력 plt.axhline(20, color='k', ls='--');  #임계치값(20)에 대해 점점이 가로줄을 그어줌

 

shc.fcluster(Z, 20, criterion='distance')  #임계치20에 줄을 그어서 나누어지는 군집들

→ [a,b][c][d][e] 이렇게 나누어짐을 확인할수 있습니다.

 

 

 

<개념부분>

첫번째줄에서, 임계값을 주지않으면, 총 1개의 군집이 출력됩니다. (method별로 만들어지는 dendrogram 모양이다릅니다)

두번쨰 줄에서 임계값을 줌으로써 여러개의 군집으로 나누어줄수 있습니다.

 

 

이것은 method 별로 유사도를 처리하는 방법이 다른것을 자세히 나타내 줍니다.

(single 은 가장 가까운 거리를 채택, complete 는 가장 먼거리를 채택, average는 이 두개의 평균을 채택합니다.)

e.g. single linkage 방법에서 abce, d 사이의 거리를 구할때, d와 ab간의 거리 31, d와 c간의 거리 28, d와 e간의 거리 43중에 가장 작은값인 28을 선택해줍니다. 만약 complete linkage 방법이였다면, 43을 선택해주었을것입니다.

(centroid , ward 이 두가지 메소드는 계산과정에서 (x,y)축을 필요로 하기 때문에 x,y축에서 pdist로 유사도를 구하는 방식이 아니라 처음부터 유사도를 집어넣어서 계산하는  방법에는 바람직하지 않음

 

 

 

 

 

 

 

 

+ Recent posts