Scikit-learn利用基于fit
和predict
方法的非常方便的方法。我有适合fit
和格式的时间序列数据predict
。
例如,我有以下内容Xs
:
[[1.0, 2.3, 4.5], [6.7, 2.7, 1.2], ..., [3.2, 4.7, 1.1]]
和相应的ys
:
[[1.0], [2.3], ..., [7.7]]
这些数据具有以下含义。这些值ys
以时间序列形式存储。中的值Xs
是相应的时间相关的“因数”,已知会对它们的值产生一些影响ys
(例如:温度,湿度和大气压)。
现在,我当然可以使用了fit(Xs,ys)
。但是随后我得到一个模型,其中将来的值ys
仅取决于因素,而不取决于Y
(至少直接地)先前的值,这是模型的局限性。我想有其中一个模型Y_n
还取决于Y_{n-1}
和Y_{n-2}
等。例如,我可能要使用指数移动平均线作为模型。scikit-learn中最优雅的方法是什么
添加
正如评论中提到的,我可以Xs
通过添加来扩展ys
。但是这种方式有一些局限性。例如,如果我将的最后5个值添加y
为5个新列到X
,则有关的时间顺序的信息ys
将会丢失。例如,没有指示X
第5列中的值跟随第4列中的值,依此类推。作为模型,我可能希望对最后五个进行线性拟合,ys
然后使用找到的线性函数进行预测。但是,如果我在5列中有5个值,那就不是那么简单了。
加了2
为了使我的问题更加清楚,我想举一个具体的例子。我想要一个“线性”模型y_n = c + k1*x1 + k2*x2 + k3*x3 + k4*EMOV_n
,其中EMOV_n只是指数移动平均值。如何在scikit-learn中实现此简单模型?
关于指数加权移动平均线,这可能是您要寻找的:
import pandas, numpy
ewma = pandas.stats.moments.ewma
EMOV_n = ewma( ys, com=2 )
这里com
是一个您可以在此处阅读的参数。然后,您可以使用结合EMOV_n
到Xs
,例如:
Xs = numpy.vstack((Xs,EMOV_n))
然后,您可以在此处查看各种线性模型,并执行类似的操作:
from sklearn import linear_model
clf = linear_model.LinearRegression()
clf.fit ( Xs, ys )
print clf.coef_
祝你好运!
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句