K-means 개념

sujineeda·2021년 3월 15일
0

🤯AI

목록 보기
1/7

레이블 데이터는 비교적 비싸고 가공하기 힘든 데이터이므로 대량생산하기 쉬운 데이터는 레이블 되어있지 않은 데이터
이런 점에서 비지도 학습이 실용적인 학습 방법이라고 볼 수 있다.

K-means 알고리즘

from sklearn.cluster import KMeans

군집에서 각 샘플의 label은 알고리즘이 샘플에 할당한 클러스터의 인덱스

kmeans.labels_

각 클러스터의 중심 (centroids)를 찾고 가장 가까운 클러스터에 샘플을 할당한다.

kmeans.cluster_centers_
  • visualization
    보로노이 다이어그램 : 클러스터의 결정경계를 나타내고 센트로이드 표시

  • 한계
    클러스터의 크기가 많이 다르면 잘 작동하지 않음

소프트 군집 : 클러스터마다 샘플에 점수를 부여 --> 점수 : 샘플과 센트로이드 사이의 거리

kmeans.transform(X_new) \\\ 샘플과 각 센트로이드 사이 거리 반환

알고리즘 작동 원리

  • 무작위로 k개의 샘플을 뽑아 그 위치를 센트로이드로 선정
  • 샘플에 레이블을 할당하고 센트로이드를 업데이트
  • 센트로이드에 변화가 없을 때까지 계속

따라서 센트로이드 초기화에 따라 솔루션과 속도가 달라질 수 있음

센트로이드 초기화 방법

  • init 매개변수에 육안으로 확인한 센트로이드 위치를 넘파이 배열로 넣어줌
    n_init = 1로 설정
  • 랜덤 초기화를 다르게 하여 여러번 알고리즘 실행하고 가장 좋은 솔루션 선택 (n_init 매개변수)
    최선의 솔루션 성능 지표 : 이너셔 ( 각 샘플과 가장 가까운 센트로이드 사이의 평균 제곱 거리)
kmeans.inertia_
#or 
kmeans.score(X) #score() 메서드는 음수값 반환

속도 개선 - 미니배치 k-means

from sklearn.cluster import MiniBatchKMeans

k값이 증가할수록 일반 k-means 알고리즘보다 훈련시간이 훨씬 단축되지만 이너셔는 일반적으로 조금 안좋음

최적의 k값 찾기

  • x: k , y: 이너셔 인 그래프 그려서 엘보 지점 찾기
  • 실루엣 점수가 가장 높은 k 찾기
    • 실루엣 점수: 실루엣 계수의 평균 (b-a)/max(a,b)
    • a: 클러스터 내부의 평균 거리
    • b: 자신이 속한 클러스터를 제외하고 가장 가까운 클러스터까지 평균 거리
    • 실루엣 다이어그램 분석 통해 실루엣 점수가 가장 높을 뿐 아니라 모든 클러스터의 실루엣 계수가 비슷한 k값이 최적의 k값
from sklearn.metrics import silhouette_score
silhouette_score(X, kmeans.labels_)
profile
AD+AI Ph.D course

0개의 댓글