私はライブラリscikit-learnでGaussian Process回帰をテストしており、私に与えられた信頼区間に不満です。 これは、これらがスケール不変ではないことを認識させました。関数が(各軸に比例して)スケールアップすると、信頼区間はさらに大きくなります。scikit-learn/Gaussian Processはスケール不変ではありません
たぶん写真は、より良い、それを説明します: (青い点でサンプリングされた点、真の機能が緑色で、近似は青で、信頼区間= +/- 2SD =灰色の領域を意味する)×1スケーリング
、これらの信頼区間は、スケール不変右すべきですか?私たちは他のライブラリと同じことをしていますか?
ありがとうございます!
PS:コード
# -*- coding: utf-8 -*-
"""
Created on Thu May 12 16:12:38 2016
@author: pierre
"""
import numpy as np
from sklearn import gaussian_process
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
pi=3.14
#Figure
fig = plt.figure()
ax = fig.add_subplot(111)
#Function definition
def f(x):
return 3*((x-0.5)**2)*((np.cos(pi*x))**2)+0.2*np.sin(5*x)
# Coefficient of scale
nn=100
#Real function points
x_real=np.linspace(0,nn,100)
y_real=nn*f(x_real/nn).ravel()
#Four points sampled
X = nn*np.atleast_2d([0.,.2,.5,1.]).T
y = nn*f(X/nn).ravel()
#For the approximation
x = np.atleast_2d(np.linspace(0, nn, 200)).T
#GP call
gp = gaussian_process.GaussianProcess()
gp.fit(X, y)
y_pred, sigma2_pred = gp.predict(x, eval_MSE=True)
#Plots
ax.scatter(X,y,s=400) #Sampled points
ax.plot(x,y_pred) #Approximation
ax.fill_between(x.ravel(),y_pred-10*sigma2_pred,y_pred+10*sigma2_pred,color='black',alpha=0.1) #Confidence intervals
ax.plot(x_real,y_real) #True function
結果を得るために使用しているコードを含めてください。グラフをプロットするために使用しているコードも含めてください。 –
ちょうどでした – hyperc54
'sigma2_pred'の平方根を取る必要があります。これは平均*二乗*誤差ですので、直接使用すると線形にスケーリングされません。私は以下の答えを投稿します。 –