我正在使用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 中调用绘图函数,为什么以这种方式编码?
答案 0 :(得分:2)
绘图库在GPy / GPy / plotting / __ init __。py的inject_plotting()
中被“注入”。这里是plot()
的行:
from ..core import GP
...
GP.plot = gpy_plot.gp_plots.plot
我认为这种设计的原因是它允许通过change_plotting_library()
轻松更改绘图库即时。