在GPy库中找不到绘图函数(python)

时间:2016-07-13 09:12:01

标签: python python-2.7

我正在使用Python 2.7中的GPy库来执行高斯过程回归。我开始遵循GitHub页面中提供的教程笔记本。

示例代码:

import numpy as np
import matplotlib.pyplot as plt

f = lambda x : np.sin(x**2)

kernel = GPy.kern.RBF(input_dim=1, variance=1., lengthscale=1.)

X=np.random.rand(2,1)
Y=f(X)

m = GPy.models.GPRegression(X,Y,kernel)
m.optimize_restarts(num_restarts = 10,verbose=False)

fig=m.plot()
plt.show()

我目睹的奇怪的事情是 GPRegression 类中没有实现情节功能(好吧,它只是一个小的子 GP ),也不是超类( GP ),也不是超级超类(模型 >)...全部位于 GPy.core

当我调用 m.plot()时执行的绘图函数位于 GPy.plotting.gpy_plot (其中不包含任何类,但仍使用" self"关键字作为函数参数 - 但它可能只是一个"错误"函数参数的名称?)。

我无法看到 GPy.core.GP 对象如何访问此绘图函数(乍一看,两个python文件之间没有任何链接 - Ctrl + F" plot& #34;在 GPy / core / gp.py 中没有提供任何例子。)

当我打电话

vars(GPy.models.gp_regression.GP).keys()

,情节函数确实存在,但未在 GPy.core.GP 中直接实现。

同样的事情:(最小可重复的例子)

import GPy.core.gp
import GPy.likelihoods
import GPy.kern
import matplotlib.pyplot as plt

GPy.core.gp.GP.__dict__.keys()

如何 GP 的任何想法都会在 gpy_plot 中调用绘图函数,为什么以这种方式编码?

1 个答案:

答案 0 :(得分:2)

绘图库在GPy / GPy / plotting / __ init __。py的inject_plotting()中被“注入”。这里是plot()的行:

    from ..core import GP
    ...
    GP.plot = gpy_plot.gp_plots.plot

我认为这种设计的原因是它允许通过change_plotting_library()轻松更改绘图库即时