가우시안 프로세스 분류를 통한 확률적 예측

Beginner

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

소개

이 실습에서는 RBF 커널과 다양한 하이퍼파라미터를 사용한 가우시안 프로세스 분류 (GPC) 를 탐색합니다. 데이터를 생성하고, 고정된 하이퍼파라미터와 최적화된 하이퍼파라미터를 모두 사용하여 GPC 모델을 학습시키고, 사후 확률 및 로그 - 주변 - 가능도 지형도를 플롯합니다. 또한 모델의 정확도와 로그 손실을 평가합니다.

VM 팁

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

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

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

라이브러리 가져오기

이 실습에 필요한 라이브러리를 가져옵니다.

import numpy as np
from matplotlib import pyplot as plt
from sklearn.metrics import accuracy_score, log_loss
from sklearn.gaussian_process import GaussianProcessClassifier
from sklearn.gaussian_process.kernels import RBF

데이터 생성

NumPy 를 사용하여 데이터를 생성합니다. 0 과 5 사이의 균일 분포를 갖는 100 개의 데이터 포인트를 생성합니다. 임계값을 2.5 로 설정하고 부울 표현식을 사용하여 레이블을 생성합니다. 처음 50 개의 데이터 포인트를 학습 데이터로, 나머지를 테스트 데이터로 사용합니다.

train_size = 50
rng = np.random.RandomState(0)
X = rng.uniform(0, 5, 100)[:, np.newaxis]
y = np.array(X[:, 0] > 2.5, dtype=int)

모델 학습

고정 및 최적화된 하이퍼파라미터를 사용하여 GPC 모델을 학습합니다. 모델의 로그 - 주변 - 가능도, 정확도 및 로그 손실을 출력합니다.

## 고정된 하이퍼파라미터
gp_fix = GaussianProcessClassifier(kernel=1.0 * RBF(length_scale=1.0), optimizer=None)
gp_fix.fit(X[:train_size], y[:train_size])

## 최적화된 하이퍼파라미터
gp_opt = GaussianProcessClassifier(kernel=1.0 * RBF(length_scale=1.0))
gp_opt.fit(X[:train_size], y[:train_size])

## 결과
print("로그 주변 가능도 (초기): %.3f" % gp_fix.log_marginal_likelihood(gp_fix.kernel_.theta))
print("로그 주변 가능도 (최적화): %.3f" % gp_opt.log_marginal_likelihood(gp_opt.kernel_.theta))
print("정확도: %.3f (초기) %.3f (최적화)" % (accuracy_score(y[:train_size], gp_fix.predict(X[:train_size])), accuracy_score(y[:train_size], gp_opt.predict(X[:train_size]))))
print("로그 손실: %.3f (초기) %.3f (최적화)" % (log_loss(y[:train_size], gp_fix.predict_proba(X[:train_size])[:, 1]), log_loss(y[:train_size], gp_opt.predict_proba(X[:train_size])[:, 1])))

사후 확률 플롯

고정 및 최적화된 하이퍼파라미터를 사용하여 GPC 모델의 사후 확률을 플롯합니다. 학습 데이터, 테스트 데이터 및 클래스 1 의 예측 확률을 플롯합니다. 또한 플롯에 레이블을 지정합니다.

## 사후 확률 플롯
plt.figure()
plt.scatter(X[:train_size, 0], y[:train_size], c="k", label="Train data", edgecolors=(0, 0, 0))
plt.scatter(X[train_size:, 0], y[train_size:], c="g", label="Test data", edgecolors=(0, 0, 0))
X_ = np.linspace(0, 5, 100)
plt.plot(X_, gp_fix.predict_proba(X_[:, np.newaxis])[:, 1], "r", label="Initial kernel: %s" % gp_fix.kernel_)
plt.plot(X_, gp_opt.predict_proba(X_[:, np.newaxis])[:, 1], "b", label="Optimized kernel: %s" % gp_opt.kernel_)
plt.xlabel("특징")
plt.ylabel("클래스 1 확률")
plt.xlim(0, 5)
plt.ylim(-0.25, 1.5)
plt.legend(loc="best")

LML 지형도 플롯

다양한 하이퍼파라미터 선택을 사용하여 GPC 모델의 로그 - 주변 - 가능도 지형도를 플롯합니다. 이전 플롯에서 사용된 하이퍼파라미터를 강조 표시합니다. 또한 플롯에 레이블을 지정합니다.

## LML 지형도 플롯
plt.figure()
theta0 = np.logspace(0, 8, 30)
theta1 = np.logspace(-1, 1, 29)
Theta0, Theta1 = np.meshgrid(theta0, theta1)
LML = [[gp_opt.log_marginal_likelihood(np.log([Theta0[i, j], Theta1[i, j]])) for i in range(Theta0.shape[0])] for j in range(Theta0.shape[1])]
LML = np.array(LML).T
plt.plot(np.exp(gp_fix.kernel_.theta)[0], np.exp(gp_fix.kernel_.theta)[1], "ko", zorder=10)
plt.plot(np.exp(gp_opt.kernel_.theta)[0], np.exp(gp_opt.kernel_.theta)[1], "ko", zorder=10)
plt.pcolor(Theta0, Theta1, LML)
plt.xscale("log")
plt.yscale("log")
plt.colorbar()
plt.xlabel("크기")
plt.ylabel("길이 스케일")
plt.title("로그 - 주변 - 가능도")

요약

이 실험에서는 RBF 커널과 다양한 하이퍼파라미터 선택을 사용하여 가우시안 프로세스 분류 (GPC) 를 탐색했습니다. 데이터를 생성하고, 고정 및 최적화된 하이퍼파라미터를 사용하여 GPC 모델을 학습시켰으며, 사후 확률 및 로그 - 주변 - 가능도 지형도를 플롯했습니다. 또한 모델의 정확도와 로그 손실을 평가했습니다.