logo

가우스 과정 회귀(GPR)

회귀 및 확률 분류 문제는 지도 학습 기술인 GP(가우스 프로세스)를 사용하여 해결할 수 있습니다. 각 가우스 프로세스는 다변량의 무한 차원 일반화로 생각할 수 있으므로 가우스 분포 , 이름에 Gaussian이라는 용어가 나타납니다. 이 게시물에서는 회귀에 대한 가우스 프로세스(GPR(가우스 프로세스 회귀)라고도 함)에 대해 논의할 것입니다. 재료과학, 화학, 물리학, 생물학 분야의 수많은 실제 문제가 GPR을 사용하여 해결되었습니다.

Python 파일에 json 쓰기

내용의 테이블



가우스 과정 회귀(GPR)

GPR(Gaussian Process Regression)은 다음에서 사용되는 강력하고 유연한 비모수적 회귀 기법입니다. 기계 학습 그리고 통계 . 이는 입력 변수와 출력 간의 관계가 명시적으로 알려져 있지 않거나 복잡할 수 있는 연속 데이터와 관련된 문제를 처리할 때 특히 유용합니다. GPR은 예측의 확실성을 모델링할 수 있는 베이지안 접근 방식으로, 최적화, 시계열 예측 등을 포함한 다양한 애플리케이션에 유용한 도구입니다. GPR은 임의 변수의 집합인 가우스 과정(Gaussian process)의 개념을 기반으로 하며, 임의의 유한한 수는 결합 가우스 분포를 갖습니다. 가우스 프로세스는 함수의 분포로 생각할 수 있습니다.

가우스 과정 회귀(GPR)의 주요 개념

가우스 프로세스

비모수적 확률 모델 가우스 과정 (GP)는 회귀, 분류 및 불확실성 정량화를 위한 통계 및 기계 학습에 활용됩니다. 이는 각각 공동 가우스 분포를 가지며 유한한 수를 가질 수 있는 임의 변수 그룹을 나타냅니다. GP는 데이터의 복잡한 관계를 모델링하고 관련 불확실성이 있는 예측을 생성하기 위한 다양하고 효과적인 기술입니다.

가우스 프로세스의 특성 :



  • 비모수적 성격 : GP는 설정된 수의 모델 매개변수에 의존하지 않기 때문에 데이터의 복잡성에 맞게 조정할 수 있습니다.
  • 확률적 예측 : GP의 예측은 확률 분포로 예측을 제공하므로 정량화할 수 있습니다.
  • 보간 및 평활화 : GP는 잡음이 있는 데이터를 평활화하고 데이터 포인트 간 보간을 잘 수행하므로 잡음이 있거나 불규칙하게 샘플링된 데이터에 유용합니다.
  • 하이퍼파라미터의 소외화 : 명시적인 하이퍼파라미터 조정 요구 사항을 제거함으로써 하이퍼파라미터를 소외시켜 모델을 더 단순하게 만듭니다.

평균 함수

각 입력점에서 모델링되는 함수의 예측값은 다음과 같이 표현됩니다. 평균 기능 가우시안 프로세스(GP)에서. 이는 기본 데이터 구조에 관한 기본 가정으로 기능합니다. 평균 함수는 기본적으로 반드시 0으로 설정되는 경우가 많으며 데이터 속성이나 도메인 전문 지식에 따라 수정될 수 있습니다. 예측의 중심 경향에 영향을 줌으로써 일반 실무자가 데이터의 패턴이나 추세를 식별하는 데 도움이 됩니다. GP는 평균 함수를 포함하여 점 추정치뿐만 아니라 불확실성도 포함하는 확률적 예측을 제공합니다.

공분산(커널) 함수

그만큼 공분산 함수 커널 함수라고도 하는 는 GP(가우시안 프로세스)에서 입력 데이터 포인트가 서로 얼마나 유사한지를 측정합니다. GP 모델의 동작을 특성화하는 데 필수적이며 이전 배포판의 기능 선택에 영향을 미칩니다. 공분산 함수는 쌍별 유사성을 측정하여 함수 값 간의 상관 관계를 확인합니다. GP는 부드러운 추세에서 복잡한 구조에 이르기까지 광범위한 데이터 패턴에 맞게 조정할 수 있습니다. 다양한 커널 기능이 다양한 종류의 상관관계를 포착하기 때문입니다. 모델 성능은 커널 선택에 따라 크게 영향을 받을 수 있습니다.

사전 배포

그만큼 사전 배포 가우시안 프로세스(GP)에서 데이터를 관찰하기 전에 기능을 이해하는 것입니다. 일반적으로 공분산(커널) 함수와 평균 함수로 설명됩니다. 공분산 함수는 다양한 입력 지점에서 함수 값 간의 유사성 또는 상관 관계를 설명하는 반면, 평균 함수는 이전 기대치를 인코딩합니다. 이는 GP가 기능에 대한 분포를 생성하기 위해 미리 사용됩니다. GP에서는 데이터 불확실성을 나타내거나 도메인 지식을 통합하거나 부드러움을 나타내기 위해 사전 변수를 선택할 수 있습니다.



사후 분포

가우스 프로세스' 나중에 배포 데이터 관찰에 따른 함수에 대한 수정된 가정을 보여줍니다. 이는 함수와 이전 분포가 주어진 데이터의 가능성을 종합합니다. GP 회귀 분석의 사후 분석은 관찰된 데이터와 가장 밀접하게 일치하는 함수에 대한 분포를 제공합니다. 확률론적 예측과 불확실성의 정량화를 허용함으로써 사후 분포는 사전 분포에 저장된 사전 신념과 데이터에서 제공되는 정보 간의 균형을 반영합니다.

가우스 과정 회귀(GPR)의 수학적 개념

회귀 작업의 경우 GP(가우시안 프로세스) 회귀라는 비모수적 확률적 기계 학습 모델이 사용됩니다. 입력 변수와 출력 변수 간의 복잡하고 모호한 상호 작용을 모델링할 때 강력한 도구입니다. 다변량 가우스 분포는 GP 회귀 분석에서 데이터 포인트를 생성하는 것으로 가정되며, 목표는 이 분포를 추론하는 것입니다.

GP 회귀 모델은 다음과 같은 수학적 표현을 갖습니다. x를 가정해보자1, x2,…..,엑스N는 입력 데이터 포인트입니다. 여기서 x는 실수(-2,-1,0,1…), (x에 속합니다.epsilon 아르 자형)

y를 가정해보자1, 그리고2 ,……., 그리고N출력 값입니다. 여기서 y는실수(yepsilon 아르 자형)

GP 회귀 모델은 평균 함수를 갖는 가우스 프로세스(mu ) 및 공분산 함수(k)는 입력을 출력에 연결하는 함수 f를 제공합니다.

그런 다음 테스트 위치 x* 세트에서 f의 분포는 다음과 같이 제공됩니다.

f(x^*) ∼ N(mu(x^*), k(x^*, x^*))

일반적으로 커널 함수는 평균 함수와 공분산 함수를 정의하는 데 사용됩니다. 예를 들어, 자주 사용되는 제곱 지수 커널은 다음과 같이 설명됩니다.

k(x_{i},x_{j}) = sigma^2 exp(-frac{||x_{i} – x_{j}||^2}{2l^2})

어디,

  • k(x_{i}, x_{j}) = 커널 함수는 이렇게 표현되며, 두 개의 입력 데이터 포인트 x 사이의 상관관계 또는 유사성을 계산합니다.그리고 x제이.
  • sigma^2 = 커널의 분산 매개변수는 이것이다. 커널 함수의 규모 또는 수직 확산을 설정합니다. 이는 데이터 포인트의 상관 관계가 얼마나 강한지를 규제합니다. 더 높은sigma^2 분산이 더 큰 커널 함수를 생성합니다.
  • exp: 지수 함수는 e를 인수의 거듭제곱으로 높이는 역할을 합니다.
  • ||x_{i} – x_{j}||^2 : 입력 데이터 포인트 간의 차이 x그리고 x제이는 제곱된 유클리드 거리입니다. 특징 공간의 점 사이의 기하학적 분리가 측정됩니다.
  • 2: 커널의 길이 척도 또는 특성 길이를 나타냅니다. 이는 데이터 포인트가 더 멀리 떨어져 있을 때 커널 기능이 저하되는 속도를 조절합니다. l이 낮을수록 커널 성능이 더 빨리 저하됩니다.

GP 회귀 모델은 베이지안 추론을 적용하여 주어진 훈련 데이터 세트(x, y)에서 데이터를 생성했을 가능성이 가장 높은 f의 분포를 결정합니다. 이를 위해서는 주어진 데이터에서 f의 사후 분포를 계산해야 하며 이는 다음과 같이 정의됩니다.

p(f|x,y) =frac x,f)p(f) x)

여기서 데이터의 주변 확률은 p(y|x)이고, f의 사전 분포는 p(f)이며, 함수 f가 주어진 데이터의 우도는 (y|x,f)입니다.

모델은 f의 사후 분포를 학습한 후 사후 예측 분포를 계산하여 추가 테스트 지점 x*에서 예측을 수행합니다. 이는 다음과 같이 정의될 수 있습니다:

문자열에서 정수로 변환 java

p(f^*|x^*, y,x) = int p(f^*|x^*, f), p(f|y,x)df

어디,

  • p(f^*|x*, y, x) = 이는 훈련 데이터 y와 x가 주어졌을 때 예측된 함수 값 f의 조건부 확률을 보여줍니다.*새로운 입력 지점에서 x*다르게 말하면, 새로운 입력 사이트 x의 모든 잠재적인 함수 값에 대한 확률 분포입니다.*, 관찰된 데이터 y와 일치하는 입력 위치 x를 조건으로 합니다.
  • int p(f^*|x^*, f)p(f|y,x)df = 조건부 확률을 결정하기 위해 방정식의 이 부분에 적분이 사용됩니다. 적분은 함수 f의 모든 잠재적인 값을 포함합니다.
  • p(f^*|x^*, f) = 이는 기대 함수 값 f의 조건부 확률 분포입니다.*x에*, 일부 중간 위치에 함수 값 f가 주어졌을 때.
  • p(f|y,x) = 관측된 데이터(y)와 해당 입력 위치(x)가 주어지면 이는 함수 값(f)의 조건부 확률 분포입니다.

불확실성 인식 의사 결정 및 능동적 학습과 같은 작업의 경우 이 분포는 예측의 불확실성을 측정하는 데 도움이 될 수 있습니다.

가우스 과정 회귀의 단계

  • 데이터 수집 : 회귀 문제에 대한 입출력 데이터 쌍을 수집합니다.
  • 커널 기능 선택 : 문제에 맞는 적절한 공분산 함수(커널)를 선택합니다. 커널 선택은 GPR이 모델링할 수 있는 기능의 모양에 영향을 미칩니다.
  • 매개변수 최적화 : 데이터의 우도를 최대화하여 커널 함수의 하이퍼파라미터를 추정합니다. 이는 경사 하강과 같은 최적화 기술을 사용하여 수행할 수 있습니다.
  • 예측: 새로운 입력이 주어지면 훈련된 GPR 모델을 사용하여 예측합니다. GPR은 예측 평균과 관련 불확실성(분산)을 모두 제공합니다.

가우스 프로세스 회귀(GPR) 구현

파이썬 import numpy as np import matplotlib.pyplot as plt from sklearn.gaussian_process import GaussianProcessRegressor from sklearn.gaussian_process.kernels import RBF from sklearn.model_selection import train_test_split # Generate sample data np.random.seed(0) X = np.sort(5 * np.random.rand(80, 1), axis=0) y = np.sin(X).ravel() # Add noise to the data y += 0.1 * np.random.randn(80) # Define the kernel (RBF kernel) kernel = 1.0 * RBF(length_scale=1.0) # Create a Gaussian Process Regressor with the defined kernel gp = GaussianProcessRegressor(kernel=kernel, n_restarts_optimizer=10) # Split the data into training and testing sets X_train, X_test, y_train, y_test = train_test_split( X, y, test_size=0.5, random_state=0) # Fit the Gaussian Process model to the training data gp.fit(X_train, y_train) # Make predictions on the test data y_pred, sigma = gp.predict(X_test, return_std=True) # Visualize the results x = np.linspace(0, 5, 1000)[:, np.newaxis] y_mean, y_cov = gp.predict(x, return_cov=True) plt.figure(figsize=(10, 5)) plt.scatter(X_train, y_train, c='r', label='Training Data') plt.plot(x, y_mean, 'k', lw=2, zorder=9, label='Predicted Mean') plt.fill_between(x[:, 0], y_mean - 1.96 * np.sqrt(np.diag(y_cov)), y_mean + 1.96 * np.sqrt(np.diag(y_cov)), alpha=0.2, color='k', label='95% Confidence Interval') plt.xlabel('X') plt.ylabel('y') plt.legend() plt.show()>

산출:

gpr-Geeksforgeeks

이 코드에서는 먼저 노이즈가 추가된 일부 샘플 데이터 포인트를 생성한 다음 RBF 커널을 정의하고 가우스 프로세스 회귀자 그것으로. 모델은 훈련 데이터로 훈련되고 테스트 데이터를 예측하는 데 사용됩니다. 마지막으로 결과는 훈련 데이터, 예측 평균, 95% 신뢰 구간을 보여주는 플롯으로 시각화됩니다.

자바스크립트 문자열 다듬기

Python에서 가우스 프로세스 구현

사이킷 런(Scikit Learn)

파이썬 import matplotlib.pyplot as plt import numpy as np from scipy import linalg from sklearn.gaussian_process import kernels,GaussianProcessRegressor ## check version import sys import sklearn print(sys.version) !python --version print("numpy:", np.__version__) print("sklearn:",sklearn.__version__)>

Python의 GPR(가우스 프로세스 회귀)에 필요한 라이브러리는 이 코드로 가져옵니다. 이것들은 사이파이 선형 대수 함수의 경우 넘파이 수치 연산의 경우 Matplotlib 데이터 시각화를 위해. 필요한 패키지와 호환되는지 확인하기 위해 NumPy 및 scikit-learn(sklearn) 버전과 함께 Python 버전을 추가로 확인하고 인쇄합니다.

커널 선택

파이썬 np.random.seed(0) n=50 kernel_ =[kernels.RBF (), kernels.RationalQuadratic(), kernels.ExpSineSquared(periodicity=10.0), kernels.DotProduct(sigma_0=1.0)**2, kernels.Matern() ] print(kernel_, ' ')>

산출:

[RBF(길이_크기=1),
RationalQuadratic(alpha=1, length_scale=1),
ExpSineSquared(length_scale=1, 주기성=10),
내적(sigma_0=1) ** 2,
산모(length_scale=1, nu=1.5)]

코드는 테스트 사이트 수(n)를 지정하고 무작위 시드 . 선택한 커널을 표시하기 위해 여러 커널 기능 목록을 생성하고 목록을 인쇄합니다.

커널 비교 및 ​​시각화

파이썬 for kernel in kernel_: # Gaussian process gp = GaussianProcessRegressor(kernel=kernel) # Prior x_test = np.linspace(-5, 5, n).reshape(-1, 1) mu_prior, sd_prior = gp.predict(x_test, return_std=True) samples_prior = gp.sample_y(x_test, 3) # plot plt.figure(figsize=(10, 3)) plt.subplot(1, 2, 1) plt.plot(x_test, mu_prior) plt.fill_between(x_test.ravel(), mu_prior - sd_prior, mu_prior + sd_prior, color='aliceblue') plt.plot(x_test, samples_prior, '--') plt.title('Prior') # Fit x_train = np.array([-4, -3, -2, -1, 1]).reshape(-1, 1) y_train = np.sin(x_train) gp.fit(x_train, y_train) # posterior mu_post, sd_post = gp.predict(x_test, return_std=True) mu_post = mu_post.reshape(-1) samples_post = np.squeeze(gp.sample_y(x_test, 3)) # plot plt.subplot(1, 2, 2) plt.plot(x_test, mu_post) plt.fill_between(x_test.ravel(), mu_post - sd_post, mu_post + sd_post, color='aliceblue') plt.plot(x_test, samples_post, '--') plt.scatter(x_train, y_train, c='blue', s=50) plt.title('Posterior') plt.show() print("gp.kernel_", gp.kernel_) print("gp.log_marginal_likelihood:", gp.log_marginal_likelihood(gp.kernel_.theta)) print('-'*50, ' ')>

산출:

RBF

그래프-1-Geeksforgeeks

gp.kernel_RBF(길이_규모=1.93)
gp.log_marginal_likelihood: -3.444937833462133
------------------------------------- -

유리수 2차

그래프-2-Geeksforgeeks

gp.kernel_ RationalQuadratic(alpha=1e+05, length_scale=1.93)
gp.log_marginal_likelihood: -3.4449718909150966
-------------------------------------

Exp사인제곱

그래프-3-Geeksforgeeks

gp.kernel_ ExpSineSquared(length_scale=0.000524, 주기성=2.31e+04)
gp.log_marginal_likelihood: -3.4449381454930217
-------------------------------------

내적

그래프-4-Geeksforgeeks

비카스 디뱌키르티

gp.kernel_ DotProduct(sigma_0=0.998) ** 2
gp.log_marginal_likelihood: -150204291.56018084
-------------------------------------

산모

그래프-5-Geeksforgeeks

gp.kernel_ Matern(length_scale=1.99, nu=1.5)
gp.log_marginal_likelihood: -5.131637070524745
-------------------------------------

코드는 kernel_ 목록에 나열된 다양한 커널 함수를 반복하는 것으로 시작됩니다. Gaussian Process Regressor(gp)는 모든 커널에 대해 특정 커널을 사용하여 만들어집니다. 가우스 프로세스의 경우 이는 공분산 구조를 설정합니다. 이전 분포를 평가하기 위해 x_test라는 테스트 입력 지점 집합이 -5에서 5 사이의 값으로 설정됩니다. 이 지점 집합은 열 벡터로 변환됩니다.

gp.predict 메소드를 사용하여 각 테스트 포인트에서 사전 분포의 평균(mu_prior)과 표준 편차(sd_prior)가 결정됩니다. return_std=True 옵션을 사용하여 표준 편차 값을 요청합니다. gp.sample_y (x_test, 3)은 이전 분포에서 세 개의 함수 샘플을 얻는 데 사용됩니다.

첫 번째 서브플롯은 이전 분포의 평균을 표시하며, 표준 편차는 음영 영역으로 표시됩니다. 샘플은 점선으로 겹쳐지고 평균은 실선으로 표시됩니다. Prior라는 하위 플롯이 있습니다. 여기에는 정의된 훈련 데이터 포인트(x_train)와 목표 값(y_train) 세트가 있습니다. Gaussian Process 모델은 이러한 점(gp.fit(x_train, y_train))을 사용하여 피팅됩니다. 해당 사인 값이 있는 5개의 데이터 포인트가 이 코드의 훈련 데이터를 구성합니다.

훈련 데이터 피팅 단계에 이어 프로시저에서는 동일한 테스트 포인트(x_test)에 대한 사후 분포의 평균(mu_post)과 표준 편차(sd_post)를 계산합니다. gp.sample_y(x_test, 3)는 사후 분포에서 함수 샘플을 생성하는 데에도 사용됩니다. 두 번째 서브플롯은 샘플링된 함수를 점선으로 오버레이하고 표준 편차로 음영처리된 사후 분포의 평균을 표시합니다. 파란색으로 표시된 것은 훈련 데이터 포인트입니다. 서브플롯의 이름은 Posterior입니다.

현재 커널에 대한 이전 및 사후 플롯을 보고 모델의 동작을 시각적으로 이해하려면 Matplotlib의 plt.show() 함수를 호출하세요.

코드는 현재 사용 중인 커널을 나타내는 gp.kernel_과 같은 현재 커널에 대한 세부 정보를 표시합니다. gp.log_marginal_likelihood (gp.kernel_.theta)는 각 사전 및 사후 플롯 세트 후에 현재 커널을 사용하는 모델의 로그 한계 우도를 제공합니다.

가우스 과정 회귀(GPR)의 장점

GPR(가우스 과정 회귀)은 다양한 응용 분야에서 다음과 같은 여러 가지 이점을 제공합니다.

  • GPR은 회귀를 위한 확률적 프레임워크를 제공합니다. 즉, 점 추정치를 제공할 뿐만 아니라 예측에 대한 불확실성 추정도 제공합니다.
  • 이는 매우 유연하며 데이터의 복잡한 관계를 포착할 수 있습니다.
  • GPR은 시계열 예측, 최적화, 베이지안 최적화를 포함한 다양한 애플리케이션에 적용할 수 있습니다.

가우스 과정 회귀(GPR)의 과제

  • GPR은 공분산 행렬의 역전이 필요하므로 대규모 데이터 세트를 처리할 때 계산 비용이 많이 들 수 있습니다.
  • 커널 기능과 하이퍼파라미터의 선택은 모델 성능에 큰 영향을 미칠 수 있습니다.

GPR 적용의 좋은 예

  • 주가 예측: GPR은 금융 시장의 변동성과 불확실성을 고려하여 주가를 모델링하고 예측하는 데 사용될 수 있습니다.
  • 컴퓨터 실험: GPR은 입력-출력 관계를 모델링하고 가장 영향력 있는 매개변수를 식별하여 복잡한 시뮬레이션을 최적화하는 데 유용합니다.
  • 이상 탐지: GPR은 정규 데이터 분포를 캡처하여 시계열 데이터의 비정상적인 패턴을 식별하는 이상 탐지에 적용될 수 있습니다.

결론

결론적으로, Gaussian Process Regression은 예측의 불확실성을 이해하는 것이 필수적인 상황에서 데이터 분석 및 예측을 위한 유용한 도구입니다. GPR은 확률적 모델링과 커널 기능을 활용하여 정확하고 해석 가능한 결과를 제공할 수 있습니다. 그러나 실제로 GPR을 구현할 때는 계산 비용과 전문가 의견의 필요성을 고려하는 것이 중요합니다.