가우시안 혼합 모델을 이용한 밀도 추정

Beginner

This tutorial is from open-source community. Access the source code

소개

이 실습에서는 scikit-learn 라이브러리를 사용하여 가우시안 혼합 데이터셋을 생성합니다. 그런 다음 가우시안 혼합 모델 (GMM) 을 데이터셋에 적용하고 가우시안 혼합의 밀도 추정을 플롯합니다. GMM 은 데이터셋의 확률 분포를 모델링하고 추정하는 데 사용될 수 있습니다.

VM 팁

VM 시작이 완료되면 왼쪽 상단 모서리를 클릭하여 Notebook 탭으로 전환하여 연습을 위한 Jupyter Notebook에 접근합니다.

때때로 Jupyter Notebook 이 완전히 로드되기까지 몇 초 정도 기다려야 할 수 있습니다. Jupyter Notebook 의 제한으로 인해 작업의 유효성 검사는 자동화될 수 없습니다.

학습 중 문제가 발생하면 Labby 에게 문의하십시오. 세션 후 피드백을 제공하면 문제를 신속하게 해결해 드리겠습니다.

라이브러리 가져오기

필요한 라이브러리를 가져오는 것으로 시작합니다. 숫자 계산을 위해 NumPy 와 시각화를 위해 Matplotlib 를 가져옵니다. 또한, 우리의 데이터셋에 GMM 을 맞추기 위해 scikit-learn 라이브러리에서 GaussianMixture 클래스를 가져옵니다.

import numpy as np
import matplotlib.pyplot as plt
from sklearn import mixture

데이터 생성

다음으로 두 개의 구성 요소를 가진 가우시안 혼합 데이터셋을 생성합니다. (20, 20) 에 중심이 놓인 이동된 가우시안 데이터셋과 원점 중심의 늘어난 가우시안 데이터셋을 생성합니다. 그런 다음 두 데이터셋을 연결하여 최종 학습 데이터셋을 만듭니다.

n_samples = 300

## 랜덤 샘플 생성, 두 개의 구성 요소
np.random.seed(0)

## (20, 20) 에 중심이 놓인 구형 데이터 생성
shifted_gaussian = np.random.randn(n_samples, 2) + np.array([20, 20])

## 원점 중심의 늘어난 가우시안 데이터 생성
C = np.array([[0.0, -0.7], [3.5, 0.7]])
stretched_gaussian = np.dot(np.random.randn(n_samples, 2), C)

## 두 데이터셋을 연결하여 최종 학습 데이터셋 생성
X_train = np.vstack([shifted_gaussian, stretched_gaussian])

가우시안 혼합 모델 적합

이제 scikit-learn 의 GaussianMixture 클래스를 사용하여 데이터셋에 GMM 을 적합시킵니다. 구성 요소 수를 2 개로, 공분산 유형을 "full"로 설정합니다.

## 두 개의 구성 요소를 가진 가우시안 혼합 모델 적합
clf = mixture.GaussianMixture(n_components=2, covariance_type="full")
clf.fit(X_train)

밀도 추정 플롯

이제 가우시안 혼합 모델의 밀도 추정을 플롯합니다. 데이터셋의 범위에 걸쳐 격자 (meshgrid) 를 생성하고, 각 점에 대한 GMM 이 예측한 음의 로그 - 가능도를 계산합니다. 그런 다음 예측된 점수를 등고선 플롯으로 표시하고, 학습 데이터를 산점도로 표시합니다.

## 모델이 예측한 점수를 등고선 플롯으로 표시
x = np.linspace(-20.0, 30.0)
y = np.linspace(-20.0, 40.0)
X, Y = np.meshgrid(x, y)
XX = np.array([X.ravel(), Y.ravel()]).T
Z = -clf.score_samples(XX)
Z = Z.reshape(X.shape)

CS = plt.contour(
    X, Y, Z, norm=LogNorm(vmin=1.0, vmax=1000.0), levels=np.logspace(0, 3, 10)
)
CB = plt.colorbar(CS, shrink=0.8, extend="both")
plt.scatter(X_train[:, 0], X_train[:, 1], 0.8)

plt.title("가우시안 혼합 모델을 이용한 밀도 추정")
plt.axis("tight")
plt.show()

요약

이 실습에서는 scikit-learn 을 사용하여 가우시안 혼합 데이터셋을 생성하고, GMM 을 데이터셋에 적합하는 방법을 배웠습니다. 또한, 등고선 플롯을 사용하여 가우시안 혼합의 밀도 추정을 시각화했습니다.