我正在尝试使用GaussianProcessRegressor as part of scikit-learn 0.18.1
我正在训练200个数据点,并为我的内核使用13个输入特征 - 一个常数乘以具有十二个元素的径向基函数。该模型运行没有抱怨,但如果我多次运行相同的脚本,我注意到我有时会得到不同的解决方案。值得注意的是,有几个优化参数正在运行到我提供的范围内(我目前正在研究哪些特性很重要)。
我已经尝试将参数n_restarts_optimizer
增加到50,虽然这需要相当长的时间才能运行,但它并没有消除明显随机性的因素。似乎有可能改变优化器本身,虽然我没有运气。从快速扫描来看,似乎最相似的语法是scipy的fmin_tnc
和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_
答案 0 :(得分:0)
这使用随机值initialize optimization:
由于LML可能有多个局部最优,因此优化器可以 通过指定n_restarts_optimizer重复启动。
据我了解,总有一个随机因素。有时它会找到当地的最小值,这是你提到的界限。
如果您的数据允许(可逆X矩阵)您可以使用正规方程,如果它符合您的需要,那里没有随机因素。
您可以在此基础上进行(类似随机森林)采样,您可以多次运行此算法并选择最佳拟合值或常用值:您必须权衡一致性与准确性。
希望我能正确理解你的问题。