我一直在研究以下问题,我希望使用高斯过程回归器(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 内)的一个值,而不适用于作为输入的整个列表。
我尝试了各种表示,并且也能够实现多个特征的表示,但是这个问题已经困扰了我几个星期。我只需要知道如何克服下面的几个障碍。我无法执行以下操作:
- 为 GPR 输入 3D 形状数据
- (由于上述原因)输入一个时间序列作为输入,一个值作为输出
我已经能够使用深度学习神经网络实现相同的功能,但由于我拥有的数据量很少,我想检查机器学习模型的相同之处。如果无法使用 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 个功能。我已经多次阅读文档以获取线索,以及其他网站和教程,但没有一个有答案。