高斯过程自回归模型的实现

gpar的Python项目详细描述


gpar

buildcoverage status最新文档

高斯过程自回归模型的实现

请参阅文件,并参阅文件

安装

在安装软件包之前,请确保gccgfortran是 可用。 在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)$如果是正数据。这样的转变可以 通过设置gparregressortransform\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扩展到大型数据集。只需设置x\u ind 到gparregressor中诱导点的位置

示例(examples/paper/synthetic.py

预测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()

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java Android同步不同页面上的按钮   java评测每个类收集的垃圾对象实例数   java(Spring MVC+Hibernate 4+Test 4)自动连线DAO返回NULL   java Android编辑文本和虚拟键盘   java Selenium与BrowserMobProxy   JAVAlang.NoClassDefFoundError:com/sun/jersey/spi/inject/Errors$关闭原因?   java为什么在我成功登录后仍然会出现“不正确的帐户或密码或用户类型”   安卓应用程序在重新启动java时崩溃。网UnknownHostException:无法解析主机   多线程在Java中同步共享静态对象的正确方法是什么?   未调用自定义注释的java类验证(约束类)   java如何将指定目录的存档文件放入所需位置?   java如何识别Selenium中的每个编辑文本字段,如果它们的Xpath都相同   使用gwtmockito/mockito的java简单单选按钮单元测试?