首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将高斯过程回归应用于级数问题?

如何将高斯过程回归应用于级数问题?
EN

Stack Overflow用户
提问于 2020-12-26 22:14:40
回答 1查看 454关注 0票数 2

我一直在研究以下问题,希望对使用高斯过程回归(GPR)进行回归:

Input (X): [list1, list2, list3, ....] # All the lists (or arrays) may not be of the same size

Output(y): [value1, value2, value3, ....] # Equal and corresponding to the number of input lists

代码:

代码语言:javascript
复制
X = np.atleast_2d(X)
# X = X.reshape(124, 50, 3)   # 3D representation does not work for GPR
y = np.atleast_2d(y).reshape(-1,1)

# Gaussian process regressor
kernel = RBF(0.1, (10,10))
gp = gpr(kernel=kernel, n_restarts_optimizer=100, alpha = 0.04)
gp.fit(X,y)

但这段代码一次只适用于一个列表的一个值(在X中),而不是作为输入的整个列表。

我尝试过各种不同的表达方式,也能够实现多种功能的表达,但这个问题已经困扰了我几个星期。我只需要知道如何克服下面的几个障碍。我不能执行下列操作:

  1. 为探地雷达输入三维形状数据
  2. (由于上述原因)输入时间序列作为输入,输入值作为输出。

我已经能够使用深度学习神经网络实现同样的功能,但是由于我拥有的数据量很小,所以我想对机器学习模型进行检查。如果不可能使用GPR,对于使用其他ML模型(如支持和相关性向量机)的任何建议也将是非常有用的。

编辑1:

根据答复,我将更详细地描述我的场景。我有124种材料,每种材料都有50种试验。因此,我有以下数据:

代码语言:javascript
复制
index material_id   trials    strain_ratio
    0       0          2           1.070689
    1       0          3           1.071900
    2       0          4           1.072510
    3       0          5           1.073174
    4       0          6           1.073576
    ...    ...         ...           ...
    6195    123       47           1.071866
    6196    123       48           1.072039
    6197    123       49           1.072053
    6198    123       50           1.072145
    6199    123       51           1.072000

列“材料id”、“试验”和“应变比”是我所拥有的三个特点。因此,124种材料,每种材料的50种试验和这3种特征构成了所需的3D形状(124,50,3)。输出是材料的断点,我需要在预测哪个试验发生(可能是第100次试验,也可能是第1000次试验),并提供前50次试验的可用特性。这是输入的三维形状,我希望传递给GPR和SVM/RVM,但这是不被接受的,因为只允许对这些模型的2D输入。我需要把每种材料的50次试验作为一个清单通过(基本上是一个时间序列,在此基础上预测将来某个时间点的断点)。

在过去的几天里,我实现了这个结构,其中任何一个特性都可以作为输入list传递给模型,以便预测模型的目标--点断裂。因此,输入列表是形状(124,50),因为我只能传递一个特性。

代码:

代码语言:javascript
复制
# Inputs to RVM/GPR
X_train = nature_first_50['strain_ratio'].to_numpy()
X_train = np.atleast_2d(X_train)
X_train = X_train.reshape(124, 50)

# Targets
y = breaking_points.copy()
y = np.atleast_2d(y).reshape(-1,1)

输入和输出的形状:

代码语言:javascript
复制
X_train : (124, 50)
y       : (124, 1)

从形状上可以更好地解释,时间序列中的前50个点预测了未来某个点。

探地雷达代码是直接向前的:

代码语言:javascript
复制
kernel = RBF(0.1, (10,10))
gp = gpr(kernel=kernel, n_restarts_optimizer=100, alpha = 0.04)
gp.fit(X_train, y)

但是,我希望找到一种方法,将所有三个功能一起作为输入来预测断点,是我实际的也是唯一的查询。但形状

代码语言:javascript
复制
X_train : (124, 50, 3)

不会被探地雷达接受。

我还将在未来的中添加更多的特性,为了便于理解,我在这里使用了3个特性。我已经阅读了很多次文档,以获得线索,以及其他网站和教程,但这些都没有答案。

EN

回答 1

Stack Overflow用户

发布于 2020-12-29 11:13:30

你的目标似乎是对时间序列进行回归。它将有助于描述您的时间序列数据的形状。在我看来,你似乎有50个多元(三维)时间序列,长度为124。据我所知,您使用的是sklearn.gaussian_process.GaussianProcessRegressor,它的fit函数采用特征向量数组(时间序列)(三维),而对于每个特征向量,则使用目标值(y数组)。

您需要确保数据的形状是正确的。在我看来,如果您希望预测多个目标变量,则需要X.shape == (tsLength, tsDim)y.shape == (tsLength,)y.shape == (tsLength,nTargets)。请注意,以这种方式只能生成每个时间序列的单个模型。

文档再看一眼也没什么坏处。

综上所述,你应该把你的问题说得更清楚:

  • 添加一个工作示例
  • 解释一下你想要达到的目标
  • 解释一下你试过的

附加注意:神经网络也属于机器学习的范畴。

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

https://stackoverflow.com/questions/65461166

复制
相关文章

相似问题

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