我一直在研究以下问题,希望对使用高斯过程回归(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,对于使用其他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”、“试验”和“应变比”是我所拥有的三个特点。因此,124种材料,每种材料的50种试验和这3种特征构成了所需的3D形状(124,50,3)。输出是材料的断点,我需要在预测哪个试验发生(可能是第100次试验,也可能是第1000次试验),并提供前50次试验的可用特性。这是输入的三维形状,我希望传递给GPR和SVM/RVM,但这是不被接受的,因为只允许对这些模型的2D输入。我需要把每种材料的50次试验作为一个清单通过(基本上是一个时间序列,在此基础上预测将来某个时间点的断点)。
在过去的几天里,我实现了这个结构,其中任何一个特性都可以作为输入list传递给模型,以便预测模型的目标--点断裂。因此,输入列表是形状(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个点预测了未来某个点。
探地雷达代码是直接向前的:
kernel = RBF(0.1, (10,10))
gp = gpr(kernel=kernel, n_restarts_optimizer=100, alpha = 0.04)
gp.fit(X_train, y)但是,我希望找到一种方法,将所有三个功能一起作为输入来预测断点,是我实际的也是唯一的查询。但形状
X_train : (124, 50, 3)不会被探地雷达接受。
我还将在未来的中添加更多的特性,为了便于理解,我在这里使用了3个特性。我已经阅读了很多次文档,以获得线索,以及其他网站和教程,但这些都没有答案。
发布于 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)。请注意,以这种方式只能生成每个时间序列的单个模型。
给文档再看一眼也没什么坏处。
综上所述,你应该把你的问题说得更清楚:
附加注意:神经网络也属于机器学习的范畴。
https://stackoverflow.com/questions/65461166
复制相似问题