Book Title : Introduction to Machine Learning with Python
- 파이썬 라이브러리를 활용한 머신러닝 -
지은이 : 안드레아스 뮐러, 세라 가이도
옮긴이 : 박해선
출판사 : 한빛미디어
코드 출처
https://github.com/rickiepark/introduction_to_ml_with_python
3.5 군집
- 데이터셋을 클러스터라는 그룹으로 나누는 작업
- 분류 알고리즘과 비슷하게 각 데이터 포인트가 어느 클러스터에 속하는지 할당(또는 예측)
- 군집은 각 데이터 포인트가 레이블을 가지는 점에서 분류와 비슷
- 그러나 정답을 모름, 레이블 자체에 어떤 의미가 있지 않음
3.5.1 k-평균 군집
- 간단하며 쉽게 사용
- 데이터의 어떤 영역을 대표하는 클러스터 중심(cluster-center)을 찾음
단계
- 데이터 포인트를 가장 가까운 클러스터 중심에 할당
- 클러스터에 할당된 데이터 포인트의 평균으로 클러스터 중심을 다시 지정 (클러스터에 할당되는 포인트에 변화가 없을 때 알고리즘 종료)
from sklearn.datasets import make_blobs
from sklearn.cluster import KMeans
X, y = make_blobs(random_state = 1)
kmeans = KMeans(n_clusters = 3)
kmeans.fit(X)
mglearn.discrete_scatter(X[:, 0], X[:, 1], kmeans.labels_, markers = 'o')
mglearn.discrete_scatter(
kmeans.cluster_centers_[:, 0], kmeans.cluster_centers_[:, 1], [0, 1, 2], markers ='^', markeredgewidth = 2)
k-평균 알고리즘이 실패하는 경우
- 데이터셋의 클러스터 개수를 정확하게 알더라도 항상 구분해낼 수 있는 건 아님
- 각 클러스터를 정의하는 것이 중심 하나뿐이므로 클러스터는 둥근 형태로 나타남
예시 ) 복잡한 형태의 two_moon 데이터셋
해당 데이터셋은 k-평균 알고리즘으로 군집시키는건 어려움
3.5.2 병합 군집(augglomertative)
- 시작할 떄때 각 포인트를 하나의 클러스터로 지정하고, 그다음 어떤 종료 조건을 만족할 때까지 가장 비슷한 두 클러스터를 합쳐나감
- 사이킷런에서 사용하는 종료 조건은 클러스터 개수
사이킷런에 구현된 옵션
ward
모든 클러스터 내의 분산을 가장 작게 증가시키는 두 클러스터를 합침
대부분의 데이터셋에 알맞음
average
클러스터 포인트 사이의 평균 거리가 가장 짧은 두 클러스터를 합침
한 클러스터가 다른 것보다 매우 클 때 ward보다 나을 수 있음
complete
클러스터 포인트 사이의 최대 거리가 가장 짧은 두 클러스터를 합침
한 클러스터가 다른 것보다 매우 클 때 ward보다 나을 수 있음
세 개의 클러스터를 찾기 위한 병합 군집 과정
- 초기에는 각 포인트가 하나의 클러스터
- 각 단계에서 가장 가까운 두 클러스터가 합쳐짐
- 네 번째 단계까지 포인트가 하나뿐인 클러스터 두 개가 합쳐져서 두 개의 포인트를 가진 클러스터가 됨
- 5단계에서 두 개의 포인트를 가진 클러스터 중 하나가 세 개의 포인트로 확장
- 이렇게 9단계에 이르면 클러스터가 세 개만 남음
- 3개의 클러스터를 찾으면 알고리즘은 멈춤
3.5.3 DBSCAN(Density-Based Spatial Clustering Of Applications with Noise)
- 클러스터 개수를 미리 지정할 필요가 없는 장점을 가짐
- 복잡한 형상도 찾을 수 있음
- 어떤 클래스에도 속하지 않는 포인트를 구분할 수 있음
- 병합 군집이나 k-평균보다는 다소 느리지만 큰 데이터셋에도 작용
과정
- 무작위로 포인트를 선택
- 그런 다음 그 포인트에서 eps 거리 안의 모든 포인트를 찾음
- eps 거리 안에 있는 포인트 수가 min_sampleds 보다 적다면 그 포인트는 잡음(noise)으로 처리
- eps 거리 안에 min_samples 보다 많은 포인트가 있다면 그 포인트는 핵심 샘플로 처리하고 새로운 클러스터 레이블을 할당
- 그런 다음 그 포인트의 모든 이웃을 살핌
- 만약 어떤 클러스터에도 속하지 않는 경우 전에 만든 클러스터 레이블 할당
- 만약 핵심 샘플이면 그 포인트의 이웃을 차례로 방문
- 위 과정을 계속반복해 클러스터는 eps 거리 안에 더 이상 핵심 샘플이 없을 때 까지 자라남
포인트의 종류
- 핵심 포인트
- 경계 포인트(핵심 포인트에서 eps 거리안에 있는 포인트)
- 잡음 포인트
X, y = make_moons(n_samples = 200, noise = 0.05)
scaler = StandardScaler()
scaler.fit(X)
X_scaled = scaler.transform(X)
dbscan = DBSCAN()
clusters = dbscan.fit_predict(X_scaled)
plt.scatter(X_scaled[:, 0],X_scaled[:, 1], c = clusters, cmap =mglearn.cm2, s = 60, edgecolors = 'black')
- k 평균 알고리즘과는 다르게 두 개의 반달 모양을 정확히 구분
3.5.4 군집 알고리즘 비교 평가
타깃 값으로 군집 평가하기
- 군집 알고리즘의 결과를 실제 정답 클러스터와 비교하여 평가할 수 있는 지표들이 있음
- ARI(adjusted rand index) , NMI(Normalized Mutual Information)
타깃 값 없이 군집 평가하기
- 군집용 지표로 실루엣 계수(Silhoueete Coefficient)가 있음
- 클러스터의 밀집 정도를 계산, 높을 수록 좋으며 최대 점수는 1
- 밀집된 클러스터가 좋긴 하지만 모양이 복잡할떄는 잘 맞지 않음
'Study > Introduction to ML with python - 한빛' 카테고리의 다른 글
[Book] 4. 비지도학습과 데이터 전처리 - (2) (0) | 2022.02.27 |
---|---|
[Book] 4. 비지도학습과 데이터 전처리 - (1) (0) | 2022.02.25 |
[Book] 3. 비지도학습과 데이터 전처리 - (2) (0) | 2022.02.17 |
[Book] 3. 비지도학습과 데이터 전처리 - (1) (0) | 2022.02.15 |
[Book] 2. 지도학습 - (2) (0) | 2022.02.13 |