问题标签 [gaussian-process]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - 高斯过程预测置信区间奇数
我正在做一些粒子物理分析,希望有人能给我一些关于我试图用来推断一些数据的高斯过程拟合的见解。
我有不确定的数据,我正在输入 scikit-learn GaussianProcess 算法。我通过“nugget”参数包含不确定性(我的实现与此处的标准示例相匹配,其中我的“corr”是指数平方,“nugget”值设置为(dy/y)**2)。主要关注点是:我在分布边缘的绝对不确定性较低(但部分不确定性较高),这导致预测的置信区间比我在该区域的预期大得多(见下图)。
不确定性以这种方式表现的原因是我正在处理粒子物理数据,它是用不同特征 (x) 值观察到的粒子计数的直方图。这些计数遵循泊松分布,因此具有 sqrt(N) 的不确定性(标准偏差)。因此,分布的较高计数区域具有较高的绝对不确定性,但分数不确定性较低,反之亦然。
正如我所提到的,我理解,在使用平方指数内核时,此函数中的“金块”参数应该具有 (分数不确定性)**2 的值。因此,如果预测的不确定性基于输入的分数不确定性,那么它在边缘上可能很大,这是有道理的。但是我不完全理解这在数学中是如何发挥作用的,而且预测的不确定性的大小比边缘上的数据点不确定性大得多,这对我来说似乎是错误的。
任何人都可以评论这里发生的事情吗?这是否符合预期?如果是这样,为什么?任何关于该主题的进一步阅读的想法或参考将不胜感激!
我会给你一些重要的警告:
1) 在分布的边缘有几个计数为零的数据点。这会在“金块”的分数不确定性中产生一个扭结,因为 (sqrt(0)/0)**2 不是一个非常令人满意的值。我在这里进行了调整,只是将这些点的块金值设置为 1.0,如果这是 1 的计数,这对应于你得到的值。我相信这是一个常见的近似值,它确实会影响手头的问题,但我不'认为它不会从根本上改变问题。
2)我正在使用的数据实际上是一个二维直方图(即,一个自变量(比如说x),另一个(y)和计数作为因变量(z))。显示的图是 2d 数据和预测的 1d 切片(即 z 与 x 在 y 的小范围内积分)。我不认为这真的会影响手头的问题,但我想我会提到它。
python - scikit-learn 中的多输出高斯过程回归
我正在使用scikit learn进行高斯过程回归 (GPR) 操作来预测数据。我的训练数据如下:
需要预测均值和方差/标准差的测试点 (2-D) 是:
现在,在运行 GPR ( GausianProcessRegressor
) 拟合后(这里,ConstantKernel 和 RBF 的乘积用作 中的 Kernel GaussianProcessRegressor
),可以通过以下代码行预测均值和方差/标准差:
在打印预测均值 ( y_pred_test
) 和方差 ( sigma
) 时,我会在控制台中打印以下输出:
在预测值(平均值)中,打印内部数组内具有三个对象的“嵌套数组”。可以假设内部数组是每个数据源在每个二维测试点位置的预测平均值。但是,打印的方差仅包含一个包含 16 个对象的数组(可能是 16 个测试位置点)。我知道方差提供了估计不确定性的指示。因此,我期待每个测试点的每个数据源的预测方差。我的期望错了吗?如何在每个测试点获得每个数据源的预测方差?是不是因为代码错误?
python - 以 2D 特征数组为输入的高斯过程 - scikit-learn
我需要使用 scikit-learn 库在 Python 中实现 GPR(高斯过程回归)。
我的输入 X 有两个特征。前任。X=[x1, x2]。并且输出是一维 y=[y1]
我想使用两个内核;RBF 和 Matern,这样 RBF 使用“x1”功能,而 Matern 使用“x2”功能。我尝试了以下方法:
但这给出了一个错误
ValueError:发现样本数量不一致的输入变量:[2, 18]
我尝试了几种方法,但找不到解决方案。如果有人可以提供帮助,我真的很感激。
python - 高斯过程的对数边际似然的sklearn计算是正的?
我正在检查sklearn对高斯过程 (GP) 的对数边际似然的实现。该实现基于Rasmussen 的机器学习高斯过程中的算法 2.1 ,为方便起见,我还附上了它的快照:
然而,我经常遇到一些用这个公式计算的对数似然为正的情况。一个具体示例是以下示例代码:
我相信 GP 的对数边际可能性log Pr(y|x, M)
应该始终为非正数。为什么上面的代码会产生正的对数边际可能性?
谢谢!
machine-learning - 使用gridsearch优化scikit中的自定义高斯过程内核
我正在使用高斯过程,当我使用 scikit-learn GP 模块时,我很难使用gridsearchcv
. 描述这个问题的最好方法是使用经典的 Mauna Loa 示例,其中适当的内核是使用已定义的内核(例如RBF
和)的组合构建的RationalQuadratic
。在那个例子中,自定义内核的参数没有被优化,而是被视为给定的。如果我想运行一个更一般的情况,我想使用交叉验证来估计这些超参数怎么办?我应该如何构建自定义内核,然后构建param_grid
网格搜索的相应对象?
以一种非常天真的方式,我可以使用以下方式构建自定义内核:
但是,当然不能gridsearchcv
使用 eg调用此函数GaussianProcessRegressor(kernel=custom_kernel(a,ls,l,alpha,nl))
。
在这个 SO question中提出了一个可能的前进路径但是我想知道是否有比从头开始编写内核(连同它的超参数)更简单的方法来解决这个问题,因为我希望使用标准内核的组合并且有还有我想把它们混在一起的可能性。
python - 高斯过程回归增量学习
我想更多地了解高斯过程回归:我在这里使用 scikit-learn 实现,我想拟合单点而不是拟合一整套点。但是得到的 alpha 系数应该保持不变,例如
应该是一样的
但是当访问gpr2.alpha_
and时gpr.alpha_
,它们是不一样的。这是为什么?
事实上,我正在从事一个出现新数据点的项目。我不想附加 x、y 数组并再次适合整个数据集,因为它非常耗时。让 x 的大小为 n,那么我有:
n+(n-1)+(n-2)+...+1 € O(n^2) 配件
当考虑到拟合本身是二次的(如果我错了,请纠正我),运行时间复杂度应该在 O(n^3) 中。如果我对 n 个点进行一次拟合,那将是更理想的:
1+1+...+1 = n € O(n)
python - 为什么 GaussianProcessRegressor 在每次运行后给出不同的解决方案?
我正在编写一个 python 代码来预测来自提供的训练集中的数据以适应GaussianProcessRegressor
. 每次我运行代码时,都会对相同的测试数据产生不同的预测值。我想知道这种行为的原因以及防止这种情况的解决方案。
python - 如何更改 sklearn 高斯过程回归使用的优化函数中的 max_iter?
我正在使用 sklearn 的 GPR 库,但偶尔会遇到这个烦人的警告:
我不仅几乎找不到有关此警告的文档,而且 max_iter 根本不是 sklearn 的 GPR 模型中的参数。我尝试按照建议重新调整数据,但没有奏效,坦率地说我不明白(我是否还需要调整输出?同样,很少有文档)。
在优化过程中增加最大迭代次数是有道理的,但 sklearn 似乎没有办法做到这一点,这令人沮丧,因为他们建议这样做是为了响应这个警告。
查看 GPR源代码,这是 sklearn 调用优化器的方式,
哪里scipy.optimize.minimize()
有默认值
根据 scipy文档。
我想完全使用 GPR 源代码中显示的优化器,但将 maxiter 更改为更高的数字。换句话说,我不想改变优化器的行为,而不是通过增加最大迭代次数所做的改变。
挑战在于其他参数,如obj_func, initial_theta, bounds
在 GPR 源代码中设置,并且无法从 GPR 对象访问。
这就是我调用 GPR 的方式,请注意,除了 n_restarts_optimizer 和内核之外,这些大多是默认参数。
python - 如何使用 GPflow 从多个链中采样?
我最近开始使用 gpflow 来构建 GP 模型。我使用 Hamiltonian Monte Carlo 用一条链对后部进行采样。
我的目标是运行多个链并执行收敛诊断。
这是我为一条链设置的:
我找不到任何关于如何为多个链修改它的示例。这是我能找到的最接近的例子,它做同样的事情。Initial_state 更改为具有 10 个链。要对我的示例执行相同操作,我需要更改 hmc_helper.current_state 但无法找出正确的方法。
任何建议将不胜感激。
我是堆栈溢出的新手,如果我的问题不清楚,我深表歉意。
谢谢!
python-3.x - 高斯过程回归器 scikit learn 无法识别“eval_MSE=True”
我正在使用 Gaussian Process Regressor scikit learn 来预测模型的数据。在使用 gp 时,我还需要找出数据集中存在的每个值的不确定性。文档建议使用“gp.predict(self, X, eval_MSE=True)”。我在可在线测试的代码中使用了相同的“eval_MSE”,但它给了我这个错误。
我用于测试的代码:
任何人都可以为此提供解决方案吗?