Hello It's good to be back ^_^
파이썬 머신러닝 스터디 7주차 (ch07 차원 축소) 본문
교재: 파이썬 머신러닝 완벽 가이드
공부한 페이지: pp. 431-
실습한 내용: https://github.com/HongYeonLee/Pylot_MachineLearningStudy
목차
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는 [군집 개수, 피처 개수])를 의미, 이를 이용해 군집 중심점의 좌표를 시각화 할 수 있다 |
실행 예시
레이블 값이 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)
'Study > 파이썬 머신러닝' 카테고리의 다른 글
파이썬 머신러닝 스터디 8주차 (ch08 텍스트 분석) (0) | 2024.05.23 |
---|---|
파이썬 머신러닝 스터디 6주차 (ch06 차원 축소) (0) | 2024.05.08 |
파이썬 머신러닝 스터디 5주차 (ch05 회귀) (0) | 2024.05.04 |
파이썬 머신러닝 스터디 4주차 (ch04-2 분류) (0) | 2024.04.11 |
파이썬 머신러닝 스터디 3주차 (ch04-1 분류) (2) | 2024.04.04 |