소개
커널 밀도 추정 (KDE) 은 비모수적 밀도 추정 기법입니다. 이 실습에서는 KDE 를 사용하여 데이터의 새로운 샘플을 생성하는 방법을 배웁니다. scikit-learn 라이브러리를 사용하여 이 기법을 구현할 것입니다.
가상 머신 팁
가상 머신 시작이 완료되면 왼쪽 상단 모서리를 클릭하여 Notebook 탭으로 전환하여 Jupyter Notebook을 연습에 사용합니다.
때때로 Jupyter Notebook 이 로드되는 데 몇 초 정도 기다려야 할 수 있습니다. Jupyter Notebook 의 제한으로 인해 작업의 유효성 검사를 자동화할 수 없습니다.
학습 중 문제가 발생하면 Labby 에 문의하십시오. 세션 후 피드백을 제공하면 문제를 신속하게 해결해 드리겠습니다.
데이터 로드
먼저, scikit-learn 에서 숫자 데이터셋을 로드합니다. 이 데이터셋에는 0 부터 9 까지의 숫자를 나타내는 8x8 이미지가 포함되어 있습니다. 주성분 분석 (PCA) 을 사용하여 데이터셋의 차원을 15 로 줄일 것입니다.
from sklearn.datasets import load_digits
from sklearn.decomposition import PCA
## 숫자 데이터셋 로드
digits = load_digits()
## PCA 를 사용하여 데이터셋의 차원을 15 로 줄임
pca = PCA(n_components=15, whiten=False)
data = pca.fit_transform(digits.data)
대역폭 최적화
KDE 의 대역폭 매개변수를 최적화하기 위해 그리드 검색 교차 검증을 사용합니다. 대역폭 매개변수는 밀도 추정의 매끄러움을 제어합니다.
from sklearn.neighbors import KernelDensity
from sklearn.model_selection import GridSearchCV
import numpy as np
## 그리드 검색 교차 검증을 사용하여 대역폭 최적화
params = {"bandwidth": np.logspace(-1, 1, 20)}
grid = GridSearchCV(KernelDensity(), params)
grid.fit(data)
print("최적 대역폭: {0}".format(grid.best_estimator_.bandwidth))
## 최적 추정자를 사용하여 커널 밀도 추정 계산
kde = grid.best_estimator_
새로운 샘플 생성
최적의 추정자를 사용하여 데이터에서 44 개의 새로운 점을 샘플링합니다. 그런 다음 PCA 의 역변환을 사용하여 새로운 데이터를 원래 64 차원으로 변환합니다.
## 데이터에서 44 개의 새로운 점을 샘플링
new_data = kde.sample(44, random_state=0)
new_data = pca.inverse_transform(new_data)
결과 플롯
원본 숫자와 재샘플링된 숫자를 4x11 그리드에 나란히 플롯합니다.
import matplotlib.pyplot as plt
## 데이터를 4x11 그리드로 변환
new_data = new_data.reshape((4, 11, -1))
real_data = digits.data[:44].reshape((4, 11, -1))
## 실제 숫자와 재샘플링된 숫자 플롯
fig, ax = plt.subplots(9, 11, subplot_kw=dict(xticks=[], yticks=[]))
for j in range(11):
ax[4, j].set_visible(False)
for i in range(4):
im = ax[i, j].imshow(
real_data[i, j].reshape((8, 8)), cmap=plt.cm.binary, interpolation="nearest"
)
im.set_clim(0, 16)
im = ax[i + 5, j].imshow(
new_data[i, j].reshape((8, 8)), cmap=plt.cm.binary, interpolation="nearest"
)
im.set_clim(0, 16)
ax[0, 5].set_title("입력 데이터에서 선택")
ax[5, 5].set_title("커널 밀도 모델에서 생성된 '새로운' 숫자")
plt.show()
요약
이 실험에서 커널 밀도 추정 (KDE) 을 사용하여 새로운 데이터 샘플을 생성하는 방법을 배웠습니다. Scikit-learn 라이브러리를 사용하여 이 기술을 구현했습니다. 그리드 검색 교차 검증을 사용하여 KDE 의 대역폭 매개변수를 최적화했습니다. 그런 다음 새로운 데이터 포인트를 샘플링하고 PCA 를 사용하여 원래 차원으로 변환했습니다. 마지막으로 원본 숫자와 재샘플링된 숫자를 4x11 그리드에 나란히 플롯했습니다.