0

我需要根据时间预测输出将是什么。我想这样做,这样我就可以在前 20% 的数据上训练我的模型,然后制作一个模型,该模型将遵循行为,并预测剩余的 80%。我正在处理的数据如下所示: 我的数据

但是当我尝试进行回归来做到这一点时,我要么得到一些偏离目标的东西(或者一些非常接近的东西,但它是线性的),这是不被接受的。

我可能认为我的问题是我的内核的选择,或者我进行回归的方式。现在我正在使用 sklearn 包进行如下操作:

gpr=GaussianProcessRegressor(kernel=1.15**2*RBF(length_scale=41.4) + WhiteKernel(noise_level=1.32e-4),
  n_restarts_optimizer=10, 
  optimizer='fmin_l_bfgs_b',
  normalize_y=True,
  alpha=0.051)

gpr.fit(X_train, y_train)
y_gpr, y_std = gpr.predict(X_test, return_std=True)

但是经过几次预测后,预测只是变成了相同的稳定值,而不是数据中的曲线。此外,预测的标准变化变得非常大。 基于真实数据的 GPR 预测

在 python 中进行核岭回归时,我似乎也无法让曲线跟随数据。要么在几次预测中下降到 0,要么必须是线性预测。 KRR 模型,而是线性的 - 这还不够好

KRR 模型的制作如下(我知道内核=多项式,次数为 1,但我似乎无法找出/找到一个合适的内核来跟踪我的数据):

#The kernel ridge regression
krr = KernelRidge(alpha=0.051,kernel='polynomial',degree=1)
# krr = KernelRidge(alpha=0.051,kernel=RBF(0.5))
krr.fit(X_train,y_train)
list_y_pred=krr.predict(X_test)

因此,如果可能的话,我想获得一些输入,说明应该如何完成,或者如果采用不同的方法来解决问题会更好。但我真的希望我能得到 KRR 来拟合数据,以及高斯过程回归。

4

1 回答 1

0

您的代码没有任何问题。我相信你的参数是错误的,因此猜测不是最好的。

我的建议是使用网格搜索和管道来估计最佳参数。

它如何工作的一个例子是

param_grid = [
  {'alpha': [1, 10, 100, 1000], 'kernel': ['linear']}, ## test linear kernel with varying alpha
  {'alpha': [1, 10, 100, 1000], 'gamma': [0.001, 0.0001], 'kernel': ['rbf']}, # test rbf kernel while varying gamma and alpha
 ] 
   ## you can have as many dictionaries as you want inside this list, or just 1. Keep in 
   ## mind this takes O(n^n)*time_per_fit where n is the number of arguments you try to test, so 
   ## it can take a long time

estimator = KernelRidge()
clf = clf = GridSearchCV(estimator, param_grid)
clf.fit(X_train,y_train)
list_y_pred=clf.predict(X_test)

如需更全面的教程,请尝试查看此处此处的官方文档,或者甚至查看此处以获得更快但不太彻底的搜索

请记住,我的参数很差,我只是从文档中复制了示例

于 2021-03-11T10:48:09.620 回答