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

标签 python machine-learning scikit-learn data-science

我正在尝试使用 GaussianProcessRegressor as part of scikit-learn 0.18.1

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

我已经尝试将参数 n_restarts_optimizer 增加到 50,虽然这需要相当长的运行时间,但它并没有消除明显的随机性因素。似乎可以更改优化器本身,尽管我没有运气。从快速扫描来看,语法上最相似的似乎是 scipy 的 fmin_tncfmin_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_

最佳答案

这使用随机值 initialize optimization :

As the LML may have multiple local optima, the optimizer can be started repeatedly by specifying n_restarts_optimizer.

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

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

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

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

关于python - sklearn 高斯过程回归器中的优化器调整,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44932469/

相关文章:

python - ipython 笔记本中的中心对齐输出

python - Docker,错误 :zygote_host_impl_linux. cc(89)] 不支持在没有 --no-sandbox 的情况下以 root 身份运行

tensorflow - keras 中预训练的目标检测模型

python - 使用 scikit-learn 的多类文本分类包时,predict() 和 Predict_proba() 之间的结果不一致

python - Scikit-learn 随机森林拟合方法中的值误差

Python TfidfVectorizer : Is conditional re-initialization possible?

python - groupby 后合并

python - 在 Python 中分组并查找连续时间并创建一个标志

插入符中基于重采样的性能度量

python - Scikit-learn 随机森林占用内存过多