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

Cannot find plot function in GPy library (python)

我正在使用 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()

我目睹的奇怪的事情是 plot 函数在 GPRegression class 中实现(ok,它只是GP.的一个小子class,也不在其超class(GP), 也不是在它的超超-class (Model)...都位于GPy.core

调用m.plot()时执行的plot函数在GPy.plotting.gpy_plot(不包含任何 class,但仍然使用 "self" 关键字作为函数参数 - 但也许它只是函数参数的 "bad" 名称?)。

我看不出 GPy.core.GP 对象如何访问这个绘图函数(乍一看,两者之间没有任何 link python 文件 - GPy/core/gp.py 中的 Ctrl+F "plot" 例如没有给出任何内容。

当我打电话时

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

,plot函数确实有,虽然在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中的绘图函数, 为什么 是这样编码的?

绘图库在 GPy/GPy/plotting/__init__.py 的 inject_plotting() 中得到 "injected"。这是 plot():

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

我认为这种设计的原因是它允许通过 change_plotting_library().

轻松更改绘图库 即时