高斯过程在python中的实现
stheno的Python项目详细描述
编号
sno是高斯过程建模在python中的一个实现。见 此外,还sedno.jl
- 20秒内非线性回归
- 安装
- 手册
- 示例
- 简单回归
- 预测分解
- 学习一个函数,包含关于其形式的先验知识
- 多输出回归
- 近似积分
- 贝叶斯线性回归
- gpar
- GP–RNN型号
- GPS之间的近似乘法
- 稀疏回归
- 用非参数基函数进行平滑
20秒内非线性回归
>>>importnumpyasnp>>>fromsthenoimportGP,EQ>>>x=np.linspace(0,2,10)# Points to predict at>>>y=x**2# Observations>>>(GP(EQ())|(x,y))(3).mean# Go GP!array([[8.48258669]])<莫尔?!那就继续读下去!
安装
在安装软件包之前,请确保gcc
并且gfortran
是
可用。
在OS X上,这两个程序都是用brew install gcc
安装的;
anaconda的用户可能会考虑安装gcc。
然后简单地
pip install stheno
手动
注意:这里的渲染得很好 文档的可读版本。
核心和平均设计
内核、平均值和GPS的输入,以下简称为输入, 必须是以下三种形式之一:
如果输入
x
是秩为0的张量,即标量,则x
指 单一输入位置。例如,0
只是指唯一的输入 位置0
如果输入
x
是秩1张量,则x的每个元素都是 解释为一个单独的输入位置。例如,
np.linspace(0,1,10)
生成10个不同的输入位置,范围从0
到1
如果输入
x
是一个秩2张量,则x
的每个行都是 解释为一个单独的输入位置。在这种情况下,输入是 多维,列对应于各种输入维度。
如果k
是内核,比如说k=eq()
,那么k(x,y)
构造内核
矩阵用于x
和y
之间的所有点对。k(x)
是
k(x,x)
。此外,k.elwise(x,y)
构造了核向量对
x
和y
元素中的点,这将是一个秩2列向量
示例:
>>>EQ()(np.linspace(0,1,3))array([[1.,0.8824969,0.60653066],[0.8824969,1.,0.8824969],[0.60653066,0.8824969,1.]])>>>EQ().elwise(np.linspace(0,1,3),0)array([[1.],[0.8824969],[0.60653066]])
最后,平均值函数输出a秩2列向量
可用内核
常数作为常数核函数。除此之外,下面的内核是 可用:
eq()
,指数二次型:$$K(x,y)=\exp\left(-\frac{1}{2}x-y{^2\right);$$
rq(alpha)
,有理二次型:$$K(x,y)=左(1+\frac{x-y{^2}{2\alpha}\right)^{-\alpha};$$
exp()
或matern12()
,指数内核:$$K(x,y)=\exp\left(x-y right);$$
matern32()
,matern–3/2内核:$$K(x,y)=左( 1+\sqrt{3}x-y| \右)exp\left(-\sqrt{3}x-y右);$$
matern52()
,matern–5/2内核:$$K(x,y)=左( 1+\sqrt{5}x-y+\frac{5}{3}x-y ^2 \右)exp\left(-\sqrt{3}x-y右);$$
delta()
,kronecker delta内核:$$K(x,y)=\开始{cases} 1&;\text{if}x=y,,\ 0&;\text{否则}; \结束{cases}$$
衰变内核(alpha,beta)
:$$K(x,y)=\frac{\beta ^\alpha}{x+y+\beta ^\alpha};$
tensorproductkernel(f)
:$$K(x,y)=f(x)f(y)。$/p>
将
函数类型
f
添加到内核或与内核相乘将 自动将f
转换为tensorproductkernel(f)
。例如,f*k
将转换为tensorproductkernel(f)*k
,并且f+k
将 转换为tensorproductkernel(f)+k
可用手段
常数作为常数的函数。除此之外,以下方法是 可用:
tensorproductmean(f)
:$$m(x)=f(x)。$/p>
将a
函数类型
f
添加或乘以平均意志 自动将f
转换为tensorproductmean(f)
。例如,f*m
将转换为tensorproductmean(f)*m
,并且f+m
将 转体ate到tensorproductmean(f)+m
组合设计
加减内核和平均值
示例:
啊!
乘以内核,表示
示例:
啊!
移位内核和平均值:
定义:
啊!
示例:
啊!
拉伸内核,表示
定义:
AAAAAAAAA 8
示例:
啊!
>;
运算符用于提供拉伸的速记:
啊!
选择内核的特定输入维度,表示
定义:
YYY11
示例:
是啊。
转换内核和means的输入
定义:
啊!13!
示例:
AAAAAAA H14
在数值上,但有效地,取核和平均值的导数。
这目前只适用于TensorFlow。
定义:
是啊。
示例:
啊!
使内核周期性,但并不意味着
定义:
啊!
示例:
AAAAAAA 18
反转内核的参数,但不表示
定义:
啊!
示例:
AAAAAAA H20
分别从核和乘积中提取项和因子
意思是
示例:
AAAAAAAAA 21
内核和意味着"包装"其他的可以通过索引"展开"k[0]
或m[0]
示例:
啊!
显示内核和意味着
加减内核和平均值
示例:
啊!乘以内核,表示
示例:
啊!移位内核和平均值:
定义:
啊!示例:
啊!拉伸内核,表示
定义:
AAAAAAAAA 8示例:
啊!>;
运算符用于提供拉伸的速记:
选择内核的特定输入维度,表示
定义:
YYY11示例:
是啊。转换内核和means的输入
定义:
啊!13!示例:
AAAAAAA H14在数值上,但有效地,取核和平均值的导数。 这目前只适用于TensorFlow。
定义:
是啊。示例:
啊!使内核周期性,但并不意味着
定义:
啊!示例:
AAAAAAA 18反转内核的参数,但不表示
定义:
啊!示例:
AAAAAAA H20分别从核和乘积中提取项和因子 意思是
示例:
AAAAAAAAA 21内核和意味着"包装"其他的可以通过索引"展开"k[0]
或m[0]
示例:
啊!内核和means有一个display
方法。
display
方法接受在打印任何值之前应用的可调用格式化程序。
当漂亮的打印内核或内核包含TensorFlow对象时,这非常有用。
示例:
AAAAAAAAA 23内核的属性
内核的平稳性可以通过查询来确定
k.静止的
。在许多情况下,方差k.var
,长度标度
k.length/u scale
和periodk.period
也可以确定。
查询文具的示例:
啊!查询差异的示例:
大花查询长度刻度的示例:
啊!查询时段的示例:
是啊。车型设计
模型的基本构造块是agp(kernel,mean=0,graph=model)
,
它需要一个内核,还可以选择一个mean和一个图。
GPS可以组合成新的GPS,而图形是保持
所有这些物体的轨迹。
如果未指定图形,则新GPS将附加到提供的默认值
Graph模型
,由编号导出:
下面是一个示例模型:
AAAAAAA 29组合设计
加减GPS和其他对象。
示例:
AAAAAAA 30
将GPS乘以其他物体。
示例:
啊!
移动GPS。
示例:
啊!
伸展GPS。
示例:
是啊。
>;
运算符用于提供拉伸的速记:
啊!
选择特定的输入尺寸。
示例:
啊!
实现索引是为了提供选择输入的速记
尺寸:
啊!
转换输入。
示例:
AAAAAAA 37
用数值方法求gp的导数。
参数指定要对哪个维度求导
到
示例:
AAAAAAAAA 38
构造gp导数的有限差分估计。
有关参数的说明,请参见"no.graph.graph.diff approx"。
示例:
啊!
构造GPS集合的笛卡尔积。
示例:
啊!
显示GPS
加减GPS和其他对象。
示例:
AAAAAAA 30将GPS乘以其他物体。
示例:
啊!移动GPS。
示例:
啊!伸展GPS。
示例:
是啊。>;
运算符用于提供拉伸的速记:
选择特定的输入尺寸。
示例:
啊!实现索引是为了提供选择输入的速记 尺寸:
啊!转换输入。
示例:
AAAAAAA 37用数值方法求gp的导数。 参数指定要对哪个维度求导 到
示例:
AAAAAAAAA 38构造gp导数的有限差分估计。 有关参数的说明,请参见"no.graph.graph.diff approx"。
示例:
啊!构造GPS集合的笛卡尔积。
示例:
啊!像内核和means一样,gps也有一个接受格式化程序的显示方法。
示例:
>>>EQ()+Exp()EQ()+Exp()>>>EQ()+EQ()2*EQ()>>>EQ()+1EQ()+1>>>EQ()+0EQ()>>>EQ()-Exp()EQ()-Exp()>>>EQ()-EQ()01
GPS的特性
内核的属性可以直接在GPS上查询。
示例:
>>>EQ()+Exp()EQ()+Exp()>>>EQ()+EQ()2*EQ()>>>EQ()+1EQ()+1>>>EQ()+0EQ()>>>EQ()-Exp()EQ()-Exp()>>>EQ()-EQ()02
命名GPS
给全球定位系统起个名字是可能的。 名称必须是字符串。 然后,图形的行为就像GPS与其名称之间的双向字典。
示例:
>>>EQ()+Exp()EQ()+Exp()>>>EQ()+EQ()2*EQ()>>>EQ()+1EQ()+1>>>EQ()+0EQ()>>>EQ()-Exp()EQ()-Exp()>>>EQ()-EQ()03
有限维分布、推断和采样
只需调用gp来构造其有限维分布:
>>>EQ()+Exp()EQ()+Exp()>>>EQ()+EQ()2*EQ()>>>EQ()+1EQ()+1>>>EQ()+0EQ()>>>EQ()-Exp()EQ()-Exp()>>>EQ()-EQ()04
如果你想计算多次观察的证据, 然后可以使用graph.logpdf。
定义:
>>>EQ()+Exp()EQ()+Exp()>>>EQ()+EQ()2*EQ()>>>EQ()+1EQ()+1>>>EQ()+0EQ()>>>EQ()-Exp()EQ()-Exp()>>>EQ()-EQ()05
此外,使用f(x).marginals()
有效地计算平均值和
95%中心可信域的上下界:
>>>EQ()+Exp()EQ()+Exp()>>>EQ()+EQ()2*EQ()>>>EQ()+1EQ()+1>>>EQ()+0EQ()>>>EQ()-Exp()EQ()-Exp()>>>EQ()-EQ()06
要根据观察结果设置条件,请使用graph.condition
或gp.condition
。
语法很像数学:
比较f1_reposteral=f1(f2(x),y)
与$f_1,,f_2(x)=y$。
定义,其中f*
和g*
是g p
s:
>>>EQ()+Exp()EQ()+Exp()>>>EQ()+EQ()2*EQ()>>>EQ()+1EQ()+1>>>EQ()+0EQ()>>>EQ()-Exp()EQ()-Exp()>>>EQ()-EQ()07
最后,graph.sample
可用于从多个进程获取样本
联合:
>>>EQ()+Exp()EQ()+Exp()>>>EQ()+EQ()2*EQ()>>>EQ()+1EQ()+1>>>EQ()+0EQ()>>>EQ()-Exp()EQ()-Exp()>>>EQ()-EQ()08
诱导点
该算法支持后验分布的稀疏逼近。构建
稀疏近似,使用sparse obs
而不是obs
定义:
>>>EQ()+Exp()EQ()+Exp()>>>EQ()+EQ()2*EQ()>>>EQ()+1EQ()+1>>>EQ()+0EQ()>>>EQ()-Exp()EQ()-Exp()>>>EQ()-EQ()09
sparseobs
还将计算obs.elbo
中elbo的值,可以是
优化以选择超参数和诱导点的位置。
纽比,张力流,还是火把?
你的选择!
>>>EQ()*Exp()EQ()*Exp()>>>2*EQ()2*EQ()>>>0*EQ()00
>>>EQ()*Exp()EQ()*Exp()>>>2*EQ()2*EQ()>>>0*EQ()01
>>>EQ()*Exp()EQ()*Exp()>>>2*EQ()2*EQ()>>>0*EQ()02
未讨论的功能
sNo.mokernel
和sNo.moman
提供多输出内核和方法。示例:
>>>EQ()*Exp()EQ()*Exp()>>>2*EQ()2*EQ()>>>0*EQ()0
3seno.eis
在扩展的输入空间上提供内核,允许 以另一种灵活的方式设计内核。示例:
>>>EQ()*Exp()EQ()*Exp()>>>2*EQ()2*EQ()>>>0*EQ()0
4sno.normal
提供了对normal的有效实现 分布和一个方便的构造函数normal1d
用于一维normal 分配。sno.matrix
提供矩阵的结构化表示和高效 相关操作。实现了gps之间的近似乘法。这是一个 实验功能。
示例:
>>>EQ()*Exp()EQ()*Exp()>>>2*EQ()2*EQ()>>>0*EQ()0
5
示例
简单回归
>>>EQ()*Exp()EQ()*Exp()>>>2*EQ()2*EQ()>>>0*EQ()06
预测分解
>>>EQ()*Exp()EQ()*Exp()>>>2*EQ()2*EQ()>>>0*EQ()07
学习一个函数,结合有关其形式的先验知识
>>>EQ()*Exp()EQ()*Exp()>>>2*EQ()2*EQ()>>>0*EQ()08
多输出回归
>>>EQ()*Exp()EQ()*Exp()>>>2*EQ()2*EQ()>>>0*EQ()09
近似积分
k.shift(c)(x,y)==k(x-c,y-c)k.shift(c1,c2)(x,y)==k(x-c1,y-c2)0
贝叶斯线性回归
k.shift(c)(x,y)==k(x-c,y-c)k.shift(c1,c2)(x,y)==k(x-c1,y-c2)1
gpar
k.shift(c)(x,y)==k(x-c,y-c)k.shift(c1,c2)(x,y)==k(x-c1,y-c2)2
GP–RNN型号
k.shift(c)(x,y)==k(x-c,y-c)k.shift(c1,c2)(x,y)==k(x-c1,y-c2)3
GPS之间的近似乘法
k.shift(c)(x,y)==k(x-c,y-c)k.shift(c1,c2)(x,y)==k(x-c1,y-c2)4
稀疏回归
k.shift(c)(x,y)==k(x-c,y-c)k.shift(c1,c2)(x,y)==k(x-c1,y-c2)5
用非参数基函数进行平滑
k.shift(c)(x,y)==k(x-c,y-c)k.shift(c1,c2)(x,y)==k(x-c1,y-c2)6