在 scikit-learn 中,如果 ConstantKernel 的值对于高斯过程回归是固定的,它是否有影响?

问题描述

在 scikit-learn 中,GaussianProcessRegressor model 在其参数中包含一个内核和用于其超参数的优化器。 我了解,如果优化器设置为 None 或内核的超参数设置为 'fixed',则它们无法更改。

scikit-learn 中 GPR 的认内核是 ConstantKernel(1.0,constant_value_bounds="fixed") * RBF(1.0,length_scale_bounds="fixed")。我假设常量内核在这里一个目的,但根据我的理解,它只能是 1,因此没有任何作用。

我的问题是:认内核和简单的 RBF(1.0,length_scale_bounds="fixed") 内核之间有什么实际区别吗?

解决方法

ConstantKernel(1.0,constant_value_bounds="fixed") * RBF(1.0,length_scale_bounds="fixed") 不是 scikit-learn 或任何其他库中的默认内核,但它被广泛使用,因此我们可以将其视为默认内核。在 GP 中,我们不将任何内核视为默认内核(来源:kernel cookbook)。

谈到你的问题,RBF核的方程如下,

    part1 = sigma^2
    part2 = exp(((x1-x2)^2)/l^2)
    RBF(x1,x2) =  part1 * part2

这里,l 是长度尺度,sigma^2 是方差超参数。其他实现如 GPy,直接将 sigmal 视为内核的参数。但是,scikit-learn 选择了不同的方式。

在 sklearn 中,ConstantKernel() 正在建模 part1RBF() 正在建模 part2

因此,如果我们在两个部分都使用“固定”参数,则没有实际区别,但是如果它们是可变的,那么它们就不同了,正如我上面试图描述的那样。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...