首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >GaussianProcess回归结果correct...up到一个尺度因子?

GaussianProcess回归结果correct...up到一个尺度因子?
EN

Stack Overflow用户
提问于 2017-06-23 20:18:54
回答 1查看 334关注 0票数 2

我正在对一些非常嘈杂的数据进行GaussianProcess回归。当我将图预测(我知道,这是对均值的预测)和实际值相比较时,我得到了一条只有轻微噪音的y=x线。

只有一个问题:斜坡完全错了。有什么办法,我可以解决这个问题,而无需建立第二阶段线性回归?

我很遗憾我不能分享我的数据,但我的模型是相当基本的。X是10列的矩阵,y是1列的矩阵。我用1000个例子来训练和策划。

补充:下面的情节是绘图,预测和实际。考虑到我使用的是一个非线性核,我觉得奇怪的是,GP回归量能够找到一个精确到乘子(斜率)的关系。

代码语言:javascript
运行
复制
kernel = (
    GP.kernels.RationalQuadratic(
        length_scale=.8,
        length_scale_bounds=(1e-3,1e3),
        alpha=.8,
        alpha_bounds=(1e-3,1e3),
        )
    + GP.kernels.WhiteKernel()
    )

gp = Pipeline( [
    ('scale',preproc.StandardScaler()),
    ('gp',GP.GaussianProcessRegressor(kernel=kernel)),
    ] )
gp.fit( X, y )

补充:我有点尴尬,但我是新的GP世界,特别是,实际上,回归作为一个ML问题。我并没有在一套测试集上绘制模型的性能图,这显示出了一种强大的过度适应。此外,我还在代码中添加了一个成语来处理scikit-learn的默认GP行为,也就是说,当我对少量数据进行“预培训”,使用优化器为内核参数找到合理的值,然后“训练”大量的数据时,优化会让我很难过。这使我能够扩大参数搜索范围,并在优化器上使用多个重新启动,找到一个更具通用性的model...which几乎都是杂讯。这正是我所期望的,真的。

代码语言:javascript
运行
复制
kernel = (
    GP.kernels.RationalQuadratic(
        length_scale=1,
        alpha=.5,
        )
    + GP.kernels.WhiteKernel(
        noise_level=1,
        )
    )*GP.kernels.ConstantKernel()

gp = Pipeline( [
    ('scale',preproc.StandardScaler()),
    ('gp',GP.GaussianProcessRegressor(
        kernel=kernel,
        n_restarts_optimizer=3,
        alpha=0,
        )),
    ] )
print("pretraining model for target %s..." % c)
x_pre = X_s.values[:500,:]
y_pre = y_s_scl[:500,:]
gp.fit( x_pre, y_pre )

gp = Pipeline( [
    ('scale',preproc.StandardScaler()),
    ('gp',GP.GaussianProcessRegressor(
        kernel=kernel,
        optimizer=None,
        alpha=0,
        )),
    ] )
print("training model for target %s..." % c)
EN

回答 1

Stack Overflow用户

发布于 2017-06-24 02:47:22

编辑:在进行回归之前,您是否尝试过将数据对齐?(从每个输出中减去所有输出值的平均值)。我知道,在Matlab中的Gp工具箱不需要数据的中心,但我不确定GP在学习。请参阅:https://stats.stackexchange.com/questions/29781/when-conducting-multiple-regression-when-should-you-center-your-predictor-varia

老注释:内核函数(即长度、比例和alpha)中的超参数的初始值非常重要。在fit()过程中,对超参数进行优化,可以找到超调器的局部最大值,这反过来会影响您的结果。根据为这些超参数设置的界限,可以根据初始条件找到许多局部最大值。在sklearn站点上,它说:“由于LML可能有多个局部优化,所以可以通过指定n_restarts_optimizer来反复启动优化器。”您可以尝试使用RBF函数,因为它是GP的一个非常传统的内核函数。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44729373

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档