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

代码:

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. 为 GPR 输入 3D 形状数据
  2. (由于上述原因)输入一个时间序列作为输入,一个值作为输出

我已经能够使用深度学习神经网络实现相同的功能,但由于我拥有的数据量很少,我想检查机器学习模型的相同之处。如果无法使用 GPR,任何有关使用其他 ML 模型(如支持和相关向量机)的建议也将非常有帮助。

编辑1:

根据回复,我将更详细地描述我的场景。我有 124 种材料,每种材料的前 50 次试运行。因此,我有以下数据框:

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”、“试验”和“应变比”列是我拥有的 3 个特征。因此,124 种材料、每种材料的 50 次试验和 3 个特征构成了所需的 3D 形状(124、50、3)。输出是材料的断裂点,我需要使用前 50 次试验的可用特征来预测断裂点发生在哪个试验(可能是第 100 次试验或第 100 次)。我希望将输入的这种 3D 形状传递给 GPR 和 SVM/RVM,但它不被接受,因为只允许对此类模型进行 2D 输入。我需要将每种材料的 50 次试验作为一个列表传递(基本上是一个时间序列,在此基础上预测未来某个时间点的断点)。

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

代码:

# 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)

输入和输出的形状:

X_train : (124, 50)
y       : (124, 1)

正如从形状中更好地解释的那样,时间序列中的 50 个先前点预测未来某处的一个点。

GPR 代码很简单:

kernel = RBF(0.1, (10,10))
gp = gpr(kernel=kernel, n_restarts_optimizer=100, alpha = 0.04)
gp.fit(X_train, y)

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

X_train : (124, 50, 3)

不会被 GPR 接受。

未来我还会添加更多功能,为了便于理解,我在这里使用了 3 个功能。我已经多次阅读文档以获取线索,以及其他网站和教程,但没有一个有答案。

4

1 回答 1

0

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

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

再看一遍文档永远不会有坏处。

考虑到所有因素,您应该使您的问题更清楚:

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

附加说明:神经网络也属于机器学习领域。

于 2020-12-29T11:13:30.797 回答