[파이썬 머신러닝 가이드] 군집화 - 평균 이동

평균 이동

: K-평균과 유사하게 중심을 군집의 중심으로 지속적으로 움직이면서 군집화를 수행하지만, K-평균이 중심에 소속된 데이터의 평균 거리 중심으로 이동하는 데 반해,

평균 이동중심을 데이터가 모여 있는 밀도가 가장 높은 곳으로 이동시킴

 

  • 평균 이동 군집화
    • 데이터의 분포도를 이용해 군집 중심점을 찾음. (군집 중심점은 데이터 포이트가 모여 있는 곳이기 때문에 확률 밀도 함수 이용)
    • 가장 집중적으로 데이터가 모여있어 확률 밀도 함수가 피크인 점을 군집 중심점으로 선정하며, 일반적으로 주어진 모델의 확률 밀도 함수를 찾기 위해 KDE 이용.
    • 특정 데이터를 반경 내의 데이터 분포 확률 밀도가 가장 높은 곳으로 이동하기 위해 주변 데이터와의 거리 값KDE 함수 값으로 입력한 뒤 그 반환 값을 현재 위치에서 업데이트 하면서 이동하는 방식을 취함.

 

  • KDE란?

seaborn 라이브러리의 distplot 매개변수 → 이걸 true로 하면 부드러운 곡선이 생기면서 선이 생김

: 커널 함수를 통해 어떤 변수의 확률 밀도 함수를 추정하는 대표적인 방법.

*확률 밀도 함수란?

: PDF(Probability Density Function)는 확률 변수의 분포를 나타내는 함수로, 정규분포, 감마분포, t-분포등이 있음.

확률 밀도 함수를 알면 특정 변수가 어떤 값을 갖게 될지에 대한 확률을 알게 되므로 이를 통해 변수의 특성(정규분포의 경우, 평균, 분산등), 확률 분포 등 많은 요소를 알 수 있음.

 

  • 커널함수 식

x를 변수, xi, 즉 x1, x2, …,xn을 관측된 샘플 데이터, K를 커널함수, h는 대역폭(bandwidth)이라 하면, KDE에서는 랜덤 변수 x에 대한 확률밀도함수를 다음과 같이 추정함.

개별 관측 데이터커널 함수를 적용한뒤, 이 적용 값을 모두 더한 후, 개별관측데이터의 건수로 나눠 확률 밀도 함수를 추정.

 

  • 커널함수란?

대표적인 커널 함수로 가우시안 분포 함수가 있음.

 

** 대역폭(h, bandwidth)가 중요함. ← KDE 형태를 부드러운(or 뾰족한) 형태로 평활화(Smoothing)하는 데 적용되며, 이 h를 어떻게 설정하느냐에 따라 확률 밀도 추정 성능을 크게 좌우할 수 있음.

 

  • 작은 h값은 좁고 뾰족한 KDE를 가지게 되면, 이는 변동성이 큰 방식으로 확률 밀도 함수를 추정하므로 과적합 되기 쉬움
  • 반대로 큰 h값은 과도하게 평활화 된 KDE로 인해 지나치게 단순화된 방식으로 확률 밀도 함수를 추정하며 결과적으로 과소적합 하기 쉬움.
  • 일반적으로 평균이동 군집화는 대역폭이 클수록 평활화된 KDE로 인해 적은 수의 군집 중심점을 가지며 대역폭이 적을수록 많은 수의 군집 중심점을 가짐.
  • 또한, 군집의 개수를 지정하지 않으며, 오직 대역폭의 크기에 따라 군집화를 수행함.
  • 가우시안 커널함수를 사용할 경우 최적은 bandwidth 파라미터 값은 다음과 같음

 

  • 사이킷런의 MeanShift 클래스

평균이동 군집화를 위해,

대역폭 크기 설정이 군집화의 품질에 큰 영향을 미치기 때문에 사이킷런은 최적의 대역폭 계산을 위해 estimate_bandwidth() 함수를 제공함.