sklearn 高斯过程回归器中的优化器调优

And*_*rew 5 python machine-learning scikit-learn data-science

我正在尝试使用GaussianProcessRegressor 作为 scikit-learn 0.18.1 的一部分

我正在训练 200 个数据点,并为我的内核使用 13 个输入特征 - 一个常数乘以具有十二个元素的径向基函数。该模型运行时没有任何抱怨,但如果我多次运行相同的脚本,我会注意到有时会得到不同的解决方案。可能值得注意的是,一些优化的参数正在运行到我提供的范围内(我目前正在研究哪些功能很重要)。

我尝试将参数n_restarts_optimizer增加到 50,虽然这需要更长的时间来运行,但并没有消除明显的随机性元素。虽然我没有运气,但似乎可以更改优化器本身。从快速扫描来看,语法上最相似的是 scipy's fmin_tncand fmin_slsqp(其他优化器不包括边界)。但是,使用其中任何一个都会导致其他问题:例如,fmin_tnc不会返回目标函数的最小值。

关于如何拥有更具确定性的脚本有什么建议吗?理想情况下,无论迭代如何,我都希望它打印相同的值,因为就目前而言,它感觉有点像彩票(因此得出任何结论都是有问题的)。

我正在使用的代码片段:

from sklearn.gaussian_process import GaussianProcessRegressor as GPR
from sklearn.gaussian_process.kernels import RBF, ConstantKernel as C

lbound = 1e-2
rbound = 1e1
n_restarts = 50
n_features = 12 # Actually determined elsewhere in the code
kernel = C(1.0, (lbound,rbound)) * RBF(n_features*[10], (lbound,rbound))
gp = GPR(kernel=kernel, n_restarts_optimizer=n_restarts)
gp.fit(train_input, train_outputs)
test_model, sigma2_pred = gp.predict(test_input, return_std=True)
print gp.kernel_
Run Code Online (Sandbox Code Playgroud)

ACh*_*ony 0

这使用随机值来初始化优化

由于LML可能有多个局部最优值,因此可以通过指定n_restarts_optimizer来重复启动优化器。

据我了解,总会有一个随机因素。有时它会找到局部最小值,这就是您提到的界限。

如果您的数据允许(可逆 X 矩阵),您可以使用正规方程(如果它适合您的需要),那里没有随机因素。

您可以在此基础上进行采样(类似于随机森林),多次运行该算法并选择最佳拟合或通用值:您必须权衡一致性与准确性。

希望我正确理解你的问题。