高斯过程自回归模型的实现
gpar的Python项目详细描述
gpar
高斯过程自回归模型的实现
安装
在安装软件包之前,请确保gcc
和gfortran
是
可用。
在OS X上,这两个程序都是用brew install gcc
安装的;
anaconda的用户可能会考虑安装gcc。
然后简单地
pip install gpar
基本用法
一个简单的gpar实例可以创建如下:
fromgparimportGPARRegressorgpar=GPARRegressor(replace=True,impute=True,scale=1.0,linear=True,linear_scale=100.0,nonlinear=True,nonlinear_scale=1.0,noise=0.1,normalise_y=True)
这里的关键字参数具有以下含义:
replace=true
:用前一个的后验平均值替换数据点 在把它们喂入下一层之前先分层。这有助于模型交易 有噪声的数据,但如果 身体不适。impute=true
:GPAR要求数据向下关闭。如果这是 如果不是这样,模型将无法使用部分数据。设置输入
到真
允许GPAR输入数据点以确保数据 向下关闭。比例=1.0
:初始化与输入有关的长度比例。linear=true
:在输出之间使用线性相关性。线性刻度=真
:线性长度刻度的初始化 输出之间的依赖关系。非线性=真
:也使用输出之间的非线性相关性。非线性比例=1.0
:非线性长度比例的初始化 输出之间的依赖关系。重要提示:此长度刻度适用 在输出可能正常化之后(见下文),在这种情况下非线性比例=1.0
对应一个简单但非线性的关系。噪声=0.1
:初始化观察噪声的方差。normalise_y=true
:在内部,使用 通过减去平均值并除以标准偏差输出。 预测将被适当地转换回来。
在上面,任何标量超参数都可以被一个值列表替换
分别初始化每个层,例如scale=[1.0,2.0]
。见
有关可能传递到的关键字的完整概述的文档
gparregressor
要安装GPAR,请调用gpar.fit(x_train,y_train)
其中x_train
是培训
输入和y_train
训练输出。输入x_train
必须具有形状
$N$或$N-乘以M$,其中$N$是数据点的数目,$M$是
输入特征数和输出y_train
必须具有$n$或$n形状
\乘以p$,其中$p$是输出数。
最后,要进行预测,请调用
means=gpar.predict(x_test,num_samples=100)
获得预测方法,或
means,lowers,uppers=gpar.predict(x_test,num_samples=100,credible_bounds=True)
同时得到95%的中心边缘可信下限和上限。如果你愿意
要预测潜在函数而不是观察值,请设置
潜伏=真
在对gparregressor.predict的调用中
功能
输入和输出相关性
使用关键字参数,gparregressor
可以配置为指定
与输入和输出之间的依赖关系。以下
可以指定依赖项:
线性输入相关性:设置
线性输入=true
并指定 长度刻度与线性输入刻度
非线性输入依赖项:默认情况下启用。长度 可以使用
scale
指定比例。把这些长度刻度系在一起 图层,设置scale\u tie=true
本地周期性输入依赖项:设置
per=true
并指定周期 对于每个周期,长度刻度为每个周期
,长度刻度为 周期性随每次衰变而变化的比例
线性输出依赖项:设置
linear=true
并指定长度 用线性比例缩放
非线性输出依赖项:设置
非线性=真
并指定 长度标度与非线性标度
所有非线性核都是指数二次核。如果你愿意
相反,使用有理二次核,设置rq=true
所有参数都可以设置为值列表,以初始化 每层单独。
要使每个层仅依赖于前几层,请设置markov=k
输出转换
在拟合模型之前,可能需要对数据应用转换,
例如,$y\mapsto\log(y)$如果是正数据。这样的转变可以
通过设置gparregressor
的transform\y
关键字参数来指定。
以下转换可用:
日志转换
:$y\mapsto\log(y)$。挤压变换
:$y\mapsto\operatorname{sign}(y)log(1+y)$。
采样
可以使用gparregressor.sample
从模型中进行采样。关键词
参数num_samples
指定样本数,并且潜在的
指定是从基础潜在函数还是
观测值。从前和后采样(模型必须适合
首先)可以执行以下操作:
sample=gpar.sample(x,p=2)# Sample two outputs from the prior.sample=gpar.sample(x,posterior=True)# Sample from the posterior.
logpdf计算
数据的logpdf可以使用gparregressor.logpdf
计算。计算
logpdf在后部下面,设置后部=真
。将丢失的数据采样到
计算pdf,而不是logpdf的无偏估计,集合
sample_missing=true
诱导点
诱导点ts可用于将gpar扩展到大型数据集。只需设置 importmatplotlib.pyplotaspltimportnumpyasnpfromgpar.regressionimportGPARRegressor# Create toy data set.n=200x=np.linspace(0,1,n)noise=0.1# Draw functions depending on each other in complicated ways.f1=-np.sin(10*np.pi*(x+1))/(2*x+1)-x**4f2=np.cos(f1)**2+np.sin(3*x)f3=f2*f1**2+3*xf=np.stack((f1,f2,f3),axis=0).T# Add noise and subsample.y=f+noise*np.random.randn(n,3)x_obs,y_obs=x[::8],y[::8]# Fit and predict GPAR.model=GPARRegressor(scale=0.1,linear=True,linear_scale=10.,nonlinear=True,nonlinear_scale=0.1,noise=0.1,impute=True,replace=True,normalise_y=False)model.fit(x_obs,y_obs)means,lowers,uppers= \
model.predict(x,num_samples=200,credible_bounds=True,latent=True)# Fit and predict independent GPs: set markov=0.igp=GPARRegressor(scale=0.1,linear=True,linear_scale=10.,nonlinear=True,nonlinear_scale=0.1,noise=0.1,markov=0,normalise_y=False)igp.fit(x_obs,y_obs)igp_means,igp_lowers,igp_uppers= \
igp.predict(x,num_samples=200,credible_bounds=True,latent=True)# Plot the result.plt.figure(figsize=(12,2.5))plt.rcParams['font.family']='serif'plt.rcParams['mathtext.fontset']='dejavuserif'foriinrange(3):ax=plt.subplot(1,3,i+1)ax.spines['right'].set_visible(False)ax.spines['top'].set_visible(False)ax.yaxis.set_ticks_position('left')ax.xaxis.set_ticks_position('bottom')plt.scatter(x_obs,y_obs[:,i],label='Observations',c='black',s=15)plt.plot(x,f[:,i],label='Truth',c='tab:orange')plt.plot(x,means[:,i],label='GPAR',c='tab:blue')plt.fill_between(x,lowers[:,i],uppers[:,i],facecolor='tab:blue',alpha=.25)plt.plot(x,igp_means[:,i],label='IGP',c='tab:green')plt.fill_between(x,igp_lowers[:,i],igp_uppers[:,i],facecolor='tab:green',alpha=.25)plt.xlabel('$t$')plt.ylabel('$y_{}$'.format(i+1))ifi==2:leg=plt.legend(facecolor='#eeeeee')leg.get_frame().set_linewidth(0)plt.tight_layout()plt.savefig('examples/paper/synthetic_prediction.pdf')plt.show()x\u ind
到
gparregressor
中诱导点的位置
示例(
examples/paper/synthetic.py
)推荐PyPI第三方库