时间序列回归 - 尝试使用 KRR 和高斯过程回归进行预测时遇到问题

如何解决时间序列回归 - 尝试使用 KRR 和高斯过程回归进行预测时遇到问题

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

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

我可能认为我的问题是内核的选择,或者我进行回归的方式。现在我正在使用 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)

但是经过几次预测后,预测值只是变成了相同的稳定值,而不是像数据中那样具有曲线。此外,预测的标准变化变得非常大。 The GPR prediction on the real data

在 python 中进行内核岭回归时,我似乎无法得到曲线来跟随数据。要么在几次预测中下降到 0,要么必须是线性预测。 The KRR model,but linear instead - which is not good enough

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 来拟合数据,以及高斯过程回归。

解决方法

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

我的建议是使用 grid search and pipelines 来估计最佳参数。

它如何工作的一个例子是

param_grid = [
  {'alpha': [1,10,100,1000],'kernel': ['linear']},## test linear kernel with varying alpha
  {'alpha': [1,'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)

要获得更全面的教程,请尝试查看官方文档 herehere,甚至 here for a faster,but less thorough search

请记住我的参数有问题,我只是从文档中复制了示例

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?