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

Python sklearn高斯过程回归器中的优化器调整,python,machine-learning,scikit-learn,data-science,Python,Machine Learning,Scikit Learn,Data Science,我正在尝试使用 我正在对200个数据点进行训练,并为我的内核使用13个输入特性——一个常数乘以12个元素的径向基函数。模型运行时没有抱怨,但是如果我多次运行同一个脚本,我会注意到有时会得到不同的解决方案。可能值得注意的是,一些优化的参数已经达到了我提供的范围(我目前正在研究哪些特性很重要) 我已经尝试将参数n\u restarts\u optimizer增加到50,虽然这需要相当长的时间来运行,但并没有消除明显的随机性。似乎可以更改优化器本身,尽管我运气不好。从快速扫描来看,最相似的语法似乎是s

我正在尝试使用

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

我已经尝试将参数
n\u restarts\u optimizer
增加到50,虽然这需要相当长的时间来运行,但并没有消除明显的随机性。似乎可以更改优化器本身,尽管我运气不好。从快速扫描来看,最相似的语法似乎是scipy的
fmin_tnc
fmin_slsqp
(其他优化器不包括边界)。但是,使用这两种方法都会导致其他问题:例如,
fmin\u 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_

这将使用随机值来:

由于LML可能有多个局部最优解,因此优化器可以 通过指定n\u重新启动\u优化器重复启动

据我所知,总有一个随机因素。有时它会找到局部极小值,这就是你提到的边界

若你们的数据允许(可逆X矩阵),你们可以使用正态方程,若它适合你们的需要,并没有随机因素

您可以在此基础上进行(类似于随机森林的)采样,在此基础上运行此算法数次,然后选择最佳拟合或公共值:您必须权衡一致性与准确性


希望我正确理解了您的问题。

您可以尝试编辑您的问题,以减少基于意见的问题。有没有一种方法可以表达你的问题,使其有一个(大部分)客观正确的答案?我不确定我是否理解你的意思,@Ares。检查你在代码中使用的所有方法或类的文档,看看它们是否包含“random_state”参数。如果是,将其设置为固定值Hi@Andrew,我只能使用优化器“fmin_l_bfgs_b”。你知道如何使用“fmin_tnc”和“fmin_slsqp”吗?然而,我看过他们的文档,仍然无法找到正确的方法。所以,要清楚地说,你将如何使用正态方程作为高斯过程的一部分?我只熟悉线性回归中的这种技术。我提供切换方法。例如,如果使用高斯过程作为建模和预测的方法,则可以在200个数据点上运行非线性变换和线性回归的迭代。对于线性回归,可以使用正态方程(MLS)。这是一致性与预测值的不确定性信息损失之间的权衡。