GMM(Gaussian Mixture Model), 가우시안 혼합 모델 GMM 개요 GMM 군집화는 군집화를 적용하고자 하는 데이터가 여러 개의 가우시안 분포를 가진 데이터 집합들이 섞여서 생성된 것이라는 가정하에 군집화를 수행하는 방식이다. 정규 분포라고도 알려진 가우시안 분포는 좌우 대칭형의 종 형태를 가진 연속 확률 함수이다. 정규 분포는 평균 μ을 중심으로 높은 데이터 분포도를 가지고 있으며, 좌우 표준편차 1에 전체 데이터의 68.27%, 표준편차 2에 전체 데이터의 95.45%를 가지고 있다. 평균이 0, 표준편차가 1인 정규 분포를 표준 정규 분포라고 한다. GMM은 데이터를 여러 개의 가우시안 분포가 섞인 것으로 간주한다. 섞인 데이터 분포에서 개별 유형의 가우시안 분포를 추출한다. 예를 ..
평균 이동(Mean Shift) 평균 이동 개요 평균 이동은 k-means와 유사하게 중심을 군집의 중심으로 지속적으로 움직이면서 군집화를 수행한다. k-means가 중심에 소속된 데이터의 평균 거리 중심으로 이동하는 데 반해, 평균 이동은 중심을 데이터가 모여 있는 밀도가 가장 높은 곳으로 이동시킨다. 평균 이동 군집화는 데이터의 분포도를 이용해 군집 중심점을 찾는다. 군집 중심점은 데이터 포인트가 모여있는 곳이라는 생각에서 착안한 것이며 이를 위해 확률 밀도 함수를 이용한다. 가장 집중적으로 데이터가 모여있어 확률 밀도 함수가 피크인 점을 군집 중심점으로 선정하며 일반적으로 주어진 모델의 확률 밀도 함수를 찾기 위해서 KDE(Kernel Density Estimation)를 이용한다. 특정 데이터를 ..
군집 평가(Cluster Evaluation) 비지도학습의 특성상 어떠한 지표라도 정확하게 성능을 평가하기는 어렵다. 군집화의 성능을 평가하는 대표적인 방법으로 실루엣 분석을 이용한다. 실루엣 분석의 개요 실루엣 분석은 각 군집 간의 거리가 얼마나 효율적으로 분리되어 있는지를 나타낸다. → 효율적으로 잘 분리됐다는 것은 다른 군집과의 거리는 떨어져있고 군집 내에서는 서로 가깝게 잘 뭉쳐져있다는 의미이다. 실루엣 분석은 실루엣 계수(Silhouette coeficient)를 기반으로 한다. 개별 데이터가 가지는 실루엣 계수는 해당 데이터가 같은 군집 내의 데이터와 얼마나 가깝게 군집화돼 있고, 다른 군집과는 얼마나 멀리 분리돼있는지 나타내는 지표이다. 실루엣 계수식 a(i): 해당 데이터 포인트와 같은 군..
K-평균 알고리즘 이해 K-평균은 군집화에서 가장 일반적으로 사용되는 알고리즘이다. 군집 중심점이라는 특정한 임의의 지점을 선택해 해당 중심에 가장 가까운 포인트들을 선택하는 군집화 기법이다. *K-평균의 장점* 일반적인 군집화에서 가장 많이 활용되는 알고리즘이다. 알고리즘이 쉽고 간결하다. *K-평균의 단점* 거리 기반 알고리즘으로, 속성 개수가 매우 많을 경우 군집화 정확도가 떨어진다.(이를 위해 PCA 차원 축소를 적용하기도 함) 반복 수행시, 횟수가 많을 경우 수행 시간이 느려진다. 몇 개의 군집(cluster)을 선택해야 할지 가이드하기 어렵다. 사이킷런 KMeans 클래스 KMeans는 다음과 같은 초기화 파라미터를 가지고 있다. In [ ]: class sklearn.cluster.KMean..
NMF(Non-Negative Matrix Factorization) NMF 개요 NMF는 TruncatedSVD와 같이 낮은 Rank를 통한 행렬 근사 방식의 변형이다. NMF는 원본 행렬 내의 모든 원소값이 양수라는게 보장되면 더 간단하게 두 개의 기반 양수 행렬로 분해될 수 있는 기법이다. NMF는 SVD와 유사하게 차원 축소를 통한 잠재 요소 도출로 이미지 변환 및 압축, 텍스트의 토픽 도출 등의 영역에서 사용되고 있다. In [1]: from sklearn.datasets import load_iris from sklearn.decomposition import NMF import matplotlib.pyplot as plt iris = load_iris() iris_ftrs = iris.dat..
SVD(Singular Value Decomposition) SVD 개요 SVD도 PCA와 유사한 행렬 분해 기법을 이용한다 PCA는 정방행렬만을 고유벡터로 분해할 수 있지만, SVD는 행과 열의 크기가 다른 행렬에도 적용할 수 있다 → 특이값 분해 넘파이의 SVD를 이용해 SVD 연산을 수행하고, 분해가 어떤 식으로 되는지 예제로 알아보자 넘파이의 SVD 모듈인 numpy.linalg.svd 행렬의 개별 로우끼리의 의존성을 없애기 위해 4x4 랜덤 행렬을 생성하자 In [5]: import numpy as np from numpy.linalg import svd np.random.seed(121) a = np.random.randn(4, 4) print(np.round(a, 3)) [[-0.212 -0..