【问题标题】:Trend "Predictor" in Python?Python中的趋势“预测器”?
【发布时间】:2018-09-17 14:49:57
【问题描述】:

我目前正在处理具有 2 列的数据框(pandas):第一列是一些数字量化数据,例如体重、某天花费的金额、GPA 等,第二列是column 是日期值,即添加相应列 1 条目的日期。

我想知道,有没有办法“预测”在 Python 中时间 X 之后的下一个值是什么?例如。如果我在 2-3 个月内有 100 个体重条目(并非所有条目都具有相同的时差,因此 1 个条目可能在第 3 天、下一个第 5 天和下一个第 10 天),并且想“预测”什么1个月后我的下一个条目,有没有办法做到这一点?

我认为这与时间序列分析有关,但我的统计背景不是很强,所以我不知道这是否是正确的方法。如果是,我如何将它应用到我的数据框(即哪些包)?它可能返回的价值是否有任何意义,或者在我正在使用的环境中它是否毫无意义?谢谢。

【问题讨论】:

标签: python pandas statistics time-series prediction


【解决方案1】:

对于时间序列数据的预测,我觉得最好的选择是 LSTM,它是一种循环神经网络,非常适合时间序列回归。

如果你不想深入研究神经网络的后端,我建议使用 Keras 库,它是 Tensorflow 框架的包装器。

假设您有一个一维数组值,并且您想预测下一个值。 Keras 中的代码如下所示:

#start off by building the training data, let arr = the list of values
X = []
y = []
for i in range(len(arr)-100-1):
    X.append(arr[i:i+100]) #get prev 100 values for the X
    y.append(arr[i+100])   # predict next value for Y

由于 LSTM 采用 3-D 输入,我们希望将 X 数据重塑为具有 3 个维度:

import numpy as np
X = np.array(X)
X = X.reshape(len(X), len(X[0]), 1)

现在 X 的形式为(样本、时间步长、特征)

这里我们可以使用 keras 构建神经网络:

from keras.models import Sequential
from keras.layers import Dense, LSTM

model = Sequential()
model.add(LSTM(input_shape = (len(X[0], 1)) #input 3-D timeseries data
model.add(Dense(1)) #output 1-D vector of predicted values
model.compile(loss='mean_squared_error', optimizer='adam')
model.fit(X, y)

还有 viola,您可以使用您的模型来预测数据中的下一个值

【讨论】:

  • 我知道机器学习可能真的很混乱,所以如果您需要任何进一步的详细说明,请回复,我很乐意进一步解释或将您链接到相关资源。
  • 谢谢,我会自己尝试一下,我会告诉你的!
  • 你能用 100 个观察值训练 LSTM 吗?
  • @user333700 您可以根据需要训练具有任意数量的观察结果的 LSTM,以及任何观察结果中的任意数量的特征
  • @Axioms 这完全取决于您。确实没有固定的数字。我一般从 100 开始,但最佳数量因型号而异。
【解决方案2】:

Statsmodels 是一个 Python 模块,它提供了时间序列预测 (Arima) 中“最著名的”方法之一。

可以在以下链接中看到一个示例:https://machinelearningmastery.com/arima-for-time-series-forecasting-with-python/

一些库中提供了其他时间序列预测方法,例如支持向量回归、Holt-Winters 和简单指数平滑。

Spark-ts (https://github.com/sryza/spark-timeseries) 是一个支持 Python 的时间序列库,提供了 Arima、Holt-Winters 和指数加权移动平均等方法。

Libsvm (https://github.com/cjlin1/libsvm) 提供支持向量回归方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-07-25
    • 2016-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-11
    • 1970-01-01
    相关资源
    最近更新 更多