소개
이 실습에서는 회귀 및 확률적 분류 문제에 사용되는 지도 학습 방법인 가우시안 프로세스 (GP) 를 탐색합니다. 가우시안 프로세스는 다재다능하며 관측치를 보간하고, 확률적 예측을 제공하며, 다양한 커널을 처리할 수 있습니다. 이 실습에서는 scikit-learn 라이브러리를 사용하여 가우시안 프로세스 회귀 (GPR) 와 가우시안 프로세스 분류 (GPC) 에 중점을 둘 것입니다.
VM 팁
VM 시작이 완료되면 왼쪽 상단 모서리를 클릭하여 Notebook 탭으로 전환하여 연습용 Jupyter Notebook에 접근합니다.
때때로 Jupyter Notebook 이 완전히 로드되기까지 몇 초 정도 기다려야 할 수 있습니다. Jupyter Notebook 의 제한으로 인해 작업의 유효성 검사를 자동화할 수 없습니다.
학습 중 문제가 발생하면 Labby 에게 문의하십시오. 세션 후 피드백을 제공하면 문제를 신속하게 해결해 드리겠습니다.
가우시안 프로세스 회귀 (GPR)
GaussianProcessRegressor 클래스는 회귀 작업을 위한 가우시안 프로세스를 구현합니다. GP 에 대한 사전 (prior) 을 지정해야 하며, 이는 평균 및 공분산 함수와 같습니다. 커널의 하이퍼파라미터는 맞춤 과정에서 최적화됩니다. GPR 을 회귀에 사용하는 예를 살펴보겠습니다.
from sklearn.gaussian_process import GaussianProcessRegressor
from sklearn.gaussian_process.kernels import RBF
## RBF 커널을 사용하여 GPR 모델 생성
kernel = RBF()
model = GaussianProcessRegressor(kernel=kernel)
## 학습 데이터에 모델 적합
model.fit(X_train, y_train)
## 학습된 모델을 사용하여 예측
y_pred = model.predict(X_test)
GPR 예제
잡음 수준 추정이 포함된 GPR: 이 예제는 데이터의 잡음 수준을 추정하기 위해 WhiteKernel 이 포함된 합 커널을 사용하는 GPR 을 보여줍니다.
from sklearn.gaussian_process.kernels import WhiteKernel
## RBF 커널과 WhiteKernel 을 사용하여 GPR 모델 생성
kernel = RBF() + WhiteKernel()
model = GaussianProcessRegressor(kernel=kernel)
## 학습 데이터에 모델 적합
model.fit(X_train, y_train)
## 학습된 모델을 사용하여 예측
y_pred = model.predict(X_test)
GPR 과 커널 릿지 회귀 비교: 커널 릿지 회귀 (KRR) 와 GPR 모두 "커널 트릭"을 사용하여 대상 함수를 학습합니다. GPR 은 생성적 확률 모델을 학습하고 신뢰 구간을 제공할 수 있지만, KRR 은 예측만 제공합니다.
from sklearn.kernel_ridge import KernelRidge
## 커널 릿지 회귀 모델 생성
krr_model = KernelRidge(kernel='rbf')
## 학습 데이터에 KRR 모델 적합
krr_model.fit(X_train, y_train)
## KRR 모델을 사용하여 예측
krr_y_pred = krr_model.predict(X_test)
## GPR 결과와 비교
gpr_model = GaussianProcessRegressor(kernel=RBF())
gpr_model.fit(X_train, y_train)
gpr_y_pred = gpr_model.predict(X_test)
마우나 로아 CO2 데이터에 대한 GPR: 이 예제는 로그 - 주변 - 가능도에 대한 기울기 상승을 사용하여 복잡한 커널 엔지니어링과 하이퍼파라미터 최적화를 보여줍니다. 이 데이터는 하와이 마우나 로아 천문대에서 수집된 월별 평균 대기 CO2 농도로 구성됩니다. 목표는 시간의 함수로서 CO2 농도를 모델링하는 것입니다.
from sklearn.gaussian_process.kernels import RBF, ExpSineSquared, RationalQuadratic, WhiteKernel
## 구성된 커널을 사용하여 GPR 모델 생성
kernel = 34.4**2 * RBF(length_scale=41.8) + 3.27**2 * RBF(length_scale=180) * ExpSineSquared(length_scale=1.44, periodicity=1) + 0.446**2 * RationalQuadratic(alpha=17.7, length_scale=0.957) + 0.197**2 * RBF(length_scale=0.138) + WhiteKernel(noise_level=0.0336)
model = GaussianProcessRegressor(kernel=kernel)
## 데이터에 모델 적합
model.fit(X_train, y_train)
## 학습된 모델을 사용하여 예측
y_pred = model.predict(X_test)
가우시안 프로세스 분류 (GPC)
GaussianProcessClassifier 클래스는 확률적 분류를 위한 GPC 를 구현합니다. 잠재 함수에 GP 사전을 배치한 다음, 연결 함수를 통해 압축하여 클래스 확률을 얻습니다. GPC 는 일대다 또는 일대일 기반의 학습 및 예측을 수행하여 다중 클래스 분류를 지원합니다.
import numpy as np
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
X = np.linspace(0, 10, 100).reshape(-1, 1)
y = np.sin(X).ravel() + np.random.normal(0, 0.1, X.shape[0])
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
from sklearn.gaussian_process import GaussianProcessClassifier
## RBF 커널을 사용하여 GPC 모델 생성
kernel = RBF()
model = GaussianProcessClassifier(kernel=kernel)
## 학습 데이터에 모델 적합
model.fit(X_train, y_train)
## 학습된 모델을 사용하여 예측
y_pred = model.predict(X_test)
GPC 예제
GPC 를 이용한 확률적 예측: 이 예제는 서로 다른 하이퍼파라미터 선택에 따른 GPC 의 예측 확률을 보여줍니다.
## RBF 커널을 사용하여 GPC 모델 생성
kernel = RBF()
model = GaussianProcessClassifier(kernel=kernel)
## 학습 데이터에 모델 적합
model.fit(X_train, y_train)
## 테스트 데이터의 클래스 확률 예측
y_prob = model.predict_proba(X_test)
XOR 데이터셋에서의 GPC 예시: 이 예제는 XOR 데이터셋에서 GPC 를 사용하는 방법을 보여줍니다. 정상 동방성 커널 (RBF) 과 비정상 동방성 커널 (DotProduct) 을 사용한 결과를 비교합니다.
## 서로 다른 커널을 사용하여 GPC 모델 생성
isotropic_kernel = RBF(length_scale=1.0)
non_stationary_kernel = DotProduct(sigma_0=1.0)
## XOR 데이터셋에 모델 적합
isotropic_model = GaussianProcessClassifier(kernel=isotropic_kernel)
non_stationary_model = GaussianProcessClassifier(kernel=non_stationary_kernel)
isotropic_model.fit(X_xor, y_xor)
non_stationary_model.fit(X_xor, y_xor)
## 학습된 모델을 사용하여 예측
isotropic_y_pred = isotropic_model.predict(X_test)
non_stationary_y_pred = non_stationary_model.predict(X_test)
붓꽃 데이터셋에서의 GPC: 이 예제는 등방성 RBF 커널과 이방성 RBF 커널을 사용하여 붓꽃 데이터셋에서 GPC 를 보여줍니다. 서로 다른 하이퍼파라미터 선택이 예측 확률에 미치는 영향을 보여줍니다.
## 서로 다른 커널을 사용하여 GPC 모델 생성하고 붓꽃 데이터셋에 적합
isotropic_kernel = RBF(length_scale=1.0)
anisotropic_kernel = RBF(length_scale=[1.0, 2.0])
isotropic_model = GaussianProcessClassifier(kernel=isotropic_kernel)
anisotropic_model = GaussianProcessClassifier(kernel=anisotropic_kernel)
isotropic_model.fit(X_train, y_train)
anisotropic_model.fit(X_train, y_train)
## 클래스 확률 예측
isotropic_y_prob = isotropic_model.predict_proba(X_test)
anisotropic_y_prob = anisotropic_model.predict_proba(X_test)
요약
이 실험에서는 가우시안 프로세스 (GP) 와 회귀 및 분류 작업에 대한 그 응용에 대해 살펴보았습니다. scikit-learn 의 GaussianProcessRegressor 및 GaussianProcessClassifier 클래스를 사용하는 방법과 GP 에 대한 서로 다른 유형의 커널을 지정하는 방법을 배웠습니다. 또한 회귀 작업을 위한 GPR 과 다중 클래스 분류 작업을 위한 GPC 의 예제를 보았으며, 이는 가우시안 프로세스의 다양성과 기능을 보여줍니다.