Hello It's good to be back ^_^

파이썬 머신러닝 스터디 7주차 (ch07 차원 축소) 본문

Study/파이썬 머신러닝

파이썬 머신러닝 스터디 7주차 (ch07 차원 축소)

HongYeon 2024. 5. 14. 00:26

교재: 파이썬 머신러닝 완벽 가이드

공부한 페이지: pp. 431-

실습한 내용: https://github.com/HongYeonLee/Pylot_MachineLearningStudy

 

GitHub - HongYeonLee/Pylot_MachineLearningStudy

Contribute to HongYeonLee/Pylot_MachineLearningStudy development by creating an account on GitHub.

github.com


 

목차

 

01. K-평균 알고리즘의 이해

 

02. 군집 평가 (Cluster Evaluation)

 

03. 평균 이동 (Mean Shift)

 

04. GMM (Gaussian Mixture Model)

 

05. DBSCAN (Density Based Spatial Clustering of Applications with Noise)

 


 

01. K-평균 알고리즘의 이해

 

K-평균

  • 군집화 (Clustering)에서 가장 일반적으로 사용되는 알고리즘이다
  • 군집 중심점 (centroid)이라는 특정한 임의의 지점을 선택해 해당 중심에 가장 가까운 포인트들을 선택하는 군집화 기법을 말한다
  • 임의로 선택한 군집 중심점은 가까운 데이터 포인트들의 평균으로 이동하고, 이동된 중심점에서 또다시 가까운 포인트들의 평균 지점으로 이동하는 프로세스를 반복적으로 수행한다.
  • 더 이상 중심점의 이동이 없으면 프로세스를 멈춘다
  • 중심점과 가까운 데이터 포인트들은 해당 중심점에 속하고 그렇게 중심점에 속한 데이터 포인트들을 군집화한다 

 

 

K-평균의 장점

  • 일반적인 군집화에서 가장 많이 활용된다
  • 알고리즘이 쉽고 간단하다

 

K-평균의 단점

  • 거리 기반 알고리즘이므로 속성의 개수가 매우 많은 경우 군집화 정확도가 떨어진다 (이를 위해 PCA를 적용해 차원 감소를 적용할 수 있다)
  • 반복 횟수가 많은 경우 수행 시간이 매우 느려진다
  • 몇개의 군집 (cluster)을 선택해야 할지 어렵다

 

사이킷런의 KMeans 클래스

from sklearn.cluster import KMeans
class sklearn.cluster.KMeans(n_clusters = 8, init = 'k-means++', n-init = 10, max_iter = 300,
                             tol = 0.0001, precompute_distances = 'auto', verbose = 0, random_state = None,
                             copy_x = True, n_jobs = 1, algorithm = 'auto')

 

파라미터 설명

n_clusters : 군집화할 개수, 즉 군집 중심점의 개수
init : 초기 군집 중심점의 좌표를 설정할 방식, 보통 k-means++ 방식으로 설정한다
max_iter : 최대 반복 횟수, 이 횟수 이전에 중심점 이동이 없으면 종료한다

 

fit(데이터 세트) 또는 fit_transform(데이터 세트) 메소드를 이용해 수행한다

이렇게 수행된 KMeans 객체는 군집화와 관련된 속성을 가지고 있다

 

속성 설명

labels_ : 각 데이터 포인트가 속한 군집 중심점 레이블
cluster_centers_ : 각 군집 중심점 좌표(Shape는 [군집 개수, 피처 개수])를 의미, 이를 이용해 군집 중심점의 좌표를 시각화 할 수 있다

 

실행 예시

붓꽃 데이터를 3개 그룹으로 군집화하여 KMeans 수행

레이블 값이 0, 1, 2로 구성되있으며 이는 각각 첫 번째 군집, 두 번째 군집, 세 번째 군집을 의미한다

따라서 출력된 각각의 레코드들의 위치에 적힌 레이블의 값이 그 레코드가 몇 번째 군집에 속했는지 알려준다

 

군집화 시각화

PCA를 이용한 차원 축소를 적용후 군집화를 수행하였다 (동그라미는 첫 번째 군집, 네모는 두 번째 군집, 세모는 세 번째 군집을 의미한다)

 

 

군집화 알고리즘 테스트를 위한 데이터 생성

 

  • make_blobs(), make_classification() API를 이용해 군집화 알고리즘을 테스트하기 위한 데이터를 생성할 수 있다
  • make_blobs() - 개별 군집의 중심점과 표준 편차 제어 기능이 있다
  • make_classification() - 노이즈를 포함한 데이터를 만드는데 사용할 수 있다
  • 이외에도 make_circle(), make_moon() API를 이용해 중심 기반의 군집화로 해결하기 어려운 데이터 세트를 만들 수 있다

make_blobs() 사용법

 

파라미터 설명

n_samples : 생성할 총 데이터의 개수, 디폴트는 100개
n_features : 데이터의 피처 개수
centers : int 값으로 나타내면 군집의 개수, ndarray로 나타낼 경우 개별 군집 중심점의 좌표를 의미한다
cluster_std : 생성될 군집 데이터의 표준 편차

 

from sklearn.cluster import KMeans
from sklearn.datasets import make_blobs
X, y = make_blobs(n_samples = 200, n_features = 2, centers = 3, cluster_std = 0.8, random_state = 0)
//총 200개의 레코드와 2개의 피처가 3개의 군집화 기반 분포도를 가진 피처 데이터 세트 X와 동시에 3개의 군집화 값을 가진 타깃 데이터 세트 y가 반환된다

 

cluster_std를 통해 데이터의 분포도를 조절한다

cluster_std가 작을수록 군집 중심에 데이터가 모여있으며, 클수록 데이터가 퍼져 있다

 

 


 

 

02 군집 평가 (Cluster Evaluation)