【发布时间】:2017-12-09 11:46:40
【问题描述】:
我正在尝试使用GaussianProcessRegressor as part of scikit-learn 0.18.1
我正在对 200 个数据点进行训练,并为我的内核使用 13 个输入特征 - 一个常数乘以具有十二个元素的径向基函数。该模型运行时没有任何抱怨,但如果我多次运行相同的脚本,我注意到有时会得到不同的解决方案。可能值得注意的是,一些优化的参数正在运行到我提供的范围内(我目前正在研究哪些功能很重要)。
我尝试将参数n_restarts_optimizer 增加到50,虽然这需要更长的时间来运行它并没有消除明显随机性的元素。尽管我没有运气,但似乎可以更改优化器本身。从快速扫描看来,语法上最相似的是 scipy 的 fmin_tnc 和 fmin_slsqp(其他优化器不包括边界)。但是,使用其中任何一个都会导致其他问题:例如,fmin_tnc 不会返回目标函数的最小值。
对于如何拥有更具确定性的脚本有什么建议吗?理想情况下,无论迭代如何,我都希望它打印相同的值,因为就目前而言,它感觉有点像彩票(因此得出任何结论都是值得怀疑的)。
我正在使用的代码的 sn-p:
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_
【问题讨论】:
-
您可以尝试编辑您的问题以减少基于意见的问题。有没有办法表达你的问题,它有一个(大部分)客观正确的答案?
-
我不确定我明白你的意思,@Ares。
-
检查您在代码中使用的所有方法或类的文档,看看它们是否包含“random_state”参数。如果是,将其设置为固定值
-
嗨@Andrew,我只能使用优化器'fmin_l_bfgs_b'。关于如何使用“fmin_tnc”和“fmin_slsqp”的任何想法?但是,我看过他们的文档,但仍然无法找出正确的方法。
标签: python machine-learning scikit-learn data-science