221002

AIVILLAIN·2022년 10월 2일
0

오공완

목록 보기
15/25

K-means

실습 코드

군집화에서 가장 일반적
군집 중심정이라는 특정한 임의 지점을 선택하여 해당 중심에 가까운 포인트들을 선택하는 기법

선택된 포인트의 평균 지점으로 이동하고 이동된 중심점에서 다시 가까운 포인트 선택, 다시 중심점을 평균 지점으로 이동하는 프로세스를 반복적으로 수행
모든 데이터 포인트에서 더이상 중심점 이동이 없을 경우 반복을 멈추고 해당 중심점에 속하는 데이터 포인트들을 군집화

  • 군집화에서 가장 많이 활용됨
  • 알고리즘이 쉽고 간결
  • 거리 기반 알고리즘으로 속성의 개수가 많을 경우 군집화 정확도가 떨어짐
  • 반복 횟수가 많을 경우 수행 시간이 매우 느려짐
  • 군집의 개수에 대한 가이드가 어려움

사이킷런운 KMeans 클래스 제공

주요 파라미터

  • n_cluster
    군집화할 개수
  • init
    군집 중심점 좌표 설정 방식, 보통은 임의로 설정하지 않고 k-means++ 방식으로 최초 설정
  • max_iter
    최대 반복 횟수
    이 횟수 이전 모든 데이터의 중싱점 이동이 없으면 종료

군집화 수행 완료(transform) 후 주요 속성 정보

  • labels_
    각 데이터 포인트가 속한 군집 중심점 레이블
  • clustercenters
    각 군집 중심점 좌표
    shape는 군집 개수, 피처 개수
    군집 중심점 좌표가 어디인지 시각화할 수 있음

군집 평가

실습 코드

실루엣 분석 (silhouette analysis)

각 군집 간의 거리가 얼마나 효율적으로 분리되어 있는지
효율적으로 잘 분리됐다는 것은 다른 군집과의 거리는 떨어져 있고 동일 군집끼리의 데이터는 서로 가깝게 잘 뭉쳐 있음을 의미
실루엣 계수를 기반으로 함
실루엣 계수는 개별 데이터가 가지는 군집화 지표

특정 데이터 포인트의 실루엣 계수는 해당 데이터 포인트와 같은 군집 내에 있는 데이터 포인트와의 거리를 평균한 값 a(i), 해당 데이터 포인트가 속하지 않은 군집 중 가장 가까운 군집과의 평균 거리 b(i)를 기반으로 계산
두 군집 간의 거리가 얼마나 떨어져 있는가는 b(i) - a(i), 이 값을 정규화하기 위해 max(a(i), b(i)) 값으로 나눔
실루엣 계수는 -1에서 1 사이의 값을 가지며 1로 가까워질수록 근처 군집과 더 멀리 떨여져 있다는 의미, 0에 가까울 수록 근처의 군집과 가까워 진다는 의미, - 값은 아예 다른 군집에 데이터 포인트가 할당되었음을 의미

  • sklearn.metrics.silhouette_samples(X, labels, metric=’euclidean’, **kwds)
    X feature 데이터 세트와 각 피처 데이터 세트가 속한 군집인 labels 데이터를 입력해주면 각 데이터 포인트의 실루엣 계수를 계산하여 반환
  • sklearn.metrics.silhouette_score(X, labels, metric=’euclidean’, sample_size=None, **kwds):
    전체 데이터의 실루엣 계수 값을 평균해 반환
    일반적으로 이 값이 높을수록 군집화가 어느정도 잘 됐다고 판단할 수 있음
    (무조건은 아님)
  1. 전체 실루엣 계수의 평균값은 0~1사이의 값을 가지며, 1에 가까울수록 좋음
  2. 전체 실루엣 계수의 평균값과 더불어 개별 군집의 평균값 편차가 크지 않아야 함
    개별 군집의 실루엣 계수 평균값이 전체 실루엣 계수의 평균값에서 크게 벗어나지 않는 것이 중요
    전체 실루엣 계수의 평균값은 높지만 특정 군집의 실루엣 계수 평균값만 유난히 높고 다른 군집들의 실루엣 계수 평균값이 낮으면 좋은 군집화 조건이 아님

군집별 평균 실루엣 계수 시각화를 통한 군집 개수 최적화 방법

클러스터링 군집화 수에 따른 각 군집 별 실루엣 계수 시각화, 및 데이터 포인트 별 클러스터링 된 결과를 시각화하여 확인
데이터 건 수가 많을 경우 군집별로 임의의 데이터를 샘플링하여 실루엣 계수를 평가하는 방안 고민

평균 이동 (Mean Shift)

실습 코드

K-평균과 유사하게 중심을 군집의 중심으로 지속적으로 움직이면서 군집화를 수행
K-평균은 중심점을 정하고 중심에 소속된 데이터의 평균 거리를 중심으로 이동하는데 반해 평균 이동은 중심을 데이터가 모여있는 밀도가 가장 높은 곳으로 이동

평균 이동은 데이터의 분포도를 이용해 군집 중심점을 찾음
군집 중심은 데이터 포인트가 모여 있는 곳이라는 생각에서 착안
확률 밀도 함수(probability density function)를 이용
가장 집중적으로 데이터가 모여있어 확률 밀도 함수가 피크인 점을 군집 중심점으로 선정
일반적으로 주어진 모델의 확률 밀도 함수를 찾기 위해 KDE(Kernel Density Estimation)을 이용
평균 이동 알고리즘은 임의의 포인트에서 시작하여 이러한 피크 포인트를 찾을 때 까지 KDE를 반복적으로 적용하여 군집화 수행

평균 이동은 K-평균과 다르게 군집의 개수를 지정할 필요가 없음
대역폭의 크기에 따라 알고리즘 자체에서 군집의 개수를 최적으로 선정
이 때문에 대역폭 크기를 어떤 값으로 설정하냐에 따라 군집화의 품질이 결정됨
사이킷런은 MeanShift 클래스로 평균 이동 군집화 제공

데이터 분포에 따라 대역폭(bandwidth) 값의 변화는 군집화 개수에 큰 영향을 미침
최적화된 bandwidth 값을 찾기 위해 estimate_bandwidth()를 제공

데이터 세트의 형태를 특정 형태로 가정한다든가, 특정 분포도 기반의 모델로 가정하지 않기 때문에 좀 더 유연한 군집화가 가능함
이상치 영향이 적으며 미리 군집의 개수를 정할 필요 없음
알고리즘 수행 시간이 오래 걸리며 무엇보다 bandwidth 크기에 따른 군집화 영향도가 큼

일반적으로 평균 이동 군집화 기법은 업무 기반의 데이터 세트보다는 컴퓨터 비전 영역에서 잘 사용됨
이미지나 영상 데이터에서 특정 개체를 구분하거나 움직임을 추적하는 데 뛰어난 역할 수행

GMM(Gaussian Mixture Model)

실습 코드

군집화를 적용하고자 하는 데이터가 여러 개의 가우시안 분포(정규 분포) 모델을 섞어서 생성된 모델로 가정하여 수행하는 방식
정규 분포는 평균을 중심으로 높은 데이터 분포도를 가지며 좌우 표준편차 1에 전체 데이터의 68.27%, 2에 95.45%를 가지고 있음
평균이 0이고 표준편차가 1인 정규분포를 표준 정규분포라고 함

전체 데이터 세트는 서로 다른 정규 분포 형태를 가진 여러 가지 확률 분포 곡선으로 구성될 수 있으며 이러한 서로 다른 정규 분포에 기반하여 군집화를 수행
데이터 세트를 구성하는 여러 개의 정규 분포 곡선을 추출, 개별 데이터가 이 중 어떤 정규 분포에 속하는지 결정하는 방식
이 방식을 GMM에서는 모수 추정이라고 함

  • 개별 정규 분포의 평균과 분산
  • 각 데이터가 어떤 정규 분포에 해당하는지의 확률

이러한 모수 추정을 위해 GMM은 EX(Expectation and Maximization) 방법 적용
사이킷런은 GaussianMixture 클래스 지원

GMM은 확률 기반, K-평균은 거리 기반
n_components는 gaussian mixture의 모델 총 개수
군집 개수 선정에 중요한 역할

KMeans와 GMM 비교

KMeans는 원형 범위에서 군집화 수행
데이터 세트가 원형의 범위를 가질수록 KMeans 군집화 효율은 더 높아짐

KMeans는 대표적으로 데이터가 길쭉한 타원형으로 늘어진 경우 군집화 수행 능력이 떨어짐
GMM은 KMeans와 다르게 군집의 중심 좌표를 구할 수 없기 때문에 군집 중심 표현이 시각화될 수 없음

GMM의 경우 KMeans보다 유연하게 다양한 데이터 세트에 잘 적용될 수 있으나 수행 시간이 오래 걸린다는 단점이 있음

DBSCAN(Density Based Spatial Clustering of Applications with Noise)

실습 코드

밀도 기반 군집화의 대표적인 알고리즘

데이터의 분포가 기하학적으로 복잡한 데이터 세트에도 효과적인 군집화 가능
DBSCAN 구성하는 주요 파라미터

  • 입실론 주변 영역(epsilon)
    개별 데이터를 중심으로 입실론 반경을 가지는 원형의 영역
  • 최소 데이터 개수(min points)
    개별 데이터의 입실론 주변 영역에 포함되는 데이터 수

입실론 주변 영역 내 포함되는 최소 데이터 개수를 충족시키는가 아닌가에 따라 데이터 포인트를 정의

  • 핵심 포인트(Core Point)
    주변 영역 내 최소 데이터 개수 이상의 데이터를 가지고 있을 경우 해당 데이터를 핵심 포인트라고 함
  • 아웃 포인트(Neighbor Point)
    주변 영역 내에 위치한 타 데이터
  • 경계 포인트(Border Point)
    주변 영역 내 최소 데이터 개수 이상의 아웃 포인트를 가지고 있지 않지만 핵심 포인트를 아웃 포인트로 가지고 있는 데이터
  • 잡음 포인트(Noise Point)
    최소 데이터 개수 이상의 아웃 포인트를 갖지 않으며, 핵심 포인트도 아웃 포인트로 가지고 있지 않는 데이터

입실론 주변 영역 최소 데이터 개수를 포함하는 밀도 기준을 충족시키는 데이터인 핵심 포인트를 연결하면서 군집화를 구성하는 방식

사이킷런 DBSCAN 클래스 파라미터

  • eps
    입실론 주변 영역 반경
    일반적으로 1 이하의 값
  • min_samples
    핵심 포인트가 되기 위해 입실론 주변 영역 내에 포함되어야 할 데이터 최소 개수
    자신 포함
profile
소신있는 오픈마인드

0개의 댓글