打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
九道门丨如何使用随机森林进行时间序列预测?

传统的时间序列预测模型,如 ARIMA、SARIMA 和 VAR ,都是基于回归过程,因为这些模型需要处理连续变量。随机森林也是常用的机器学习模型之一,在分类和回归任务中具有非常好的性能。随机森林回归模型也可用于时间序列建模和预测,以获得更好的结果。在本文中,我们将讨论如何使用随机森林回归器进行时间序列建模和预测。

关于随机森林回归器:

随机森林模型是许多决策树的集合,其中决策树被称为弱学习器。它可以应用于分类和回归问题。使用随机森林的回归过程可以通过以下步骤完成:

  • 数据拆分:该过程通过特征拆分,每一行负责创建决策树。
  • 决策:每棵树都根据数据做出自己的决策。
  • 决策聚合:在这一步中,树的平均值预测成为最终结果。

这种来自树的平均决策使得随机森林回归比任何其他算法都强。让我们看看如何在时间序列建模中使用随机森林模型。

流程 :

在开始前,我们可以使用从此处获得的每日女性出生总数数据集。

由于我们使用的模块旨在处理监督学习数据集,因此我们需要将时间序列转换为监督学习数据集,转换后,再对单变量数据进行验证。在将数据拟合到模型中后,我们根据平均绝对误差交叉检查准确性。下面从导入库开始。

1.导入库-

在正常中只需要使用 pandas、NumPy、matplotlib 和 sklearn 库。

import numpy as npimport pandas as pdimport matplotlib.pyplot as pltfrom sklearn.ensemble import RandomForestRegressor

从 sklearn 集成导入随机森林回归器

2.数据转换-

这部分实现了一个函数,可以将时间序列转换为监督学习数据。

def series_to_supervised(data, n_in=1, n_out=1, dropnan=True):    n_vars = 1 if type(data) is list else data.shape[1]    df = pd.DataFrame(data)    cols = list()    for i in range(n_in, 0, -1):        cols.append(df.shift(i))    for i in range(0, n_out):        cols.append(df.shift(-i))    agg = pd.concat(cols, axis=1)    if dropnan:        agg.dropna(inplace=True)    return agg.values

在上面的函数中,我定义了输入序列和预测序列并将它们连接起来,并且删除了所有的 NaN 值。

3.数据拆分-

本节定义了一个可以拆分数据集的函数。

def train_test_split(data, n_test): return data[:-n_test, :], data[-n_test:, :]

4.模型拟合-

在本节中,我们将定义一个函数,它可以帮助通过随机森林回归模型拟合转换后的数据。

# fit an random forest model and make a one step predictiondef random_forest_forecast(train, testX):    train = np.asarray(train)    trainX, trainy = train[:, :-1], train[:, -1]    model = RandomForestRegressor(n_estimators=1000)    model.fit(trainX, trainy)    yhat = model.predict([testX])    return yhat[0]

这个函数将列表转换为数组,然后拆分数据并拟合模型。训练模型后,它将帮助我们进行下一步预测。

5.单变量数据的验证-

本节将利用上述所有函数,并将测试数据与模型拟合,以预测和检查模型的准确性。

from sklearn.metrics import mean_absolute_errordef walk_forward_validation(data, n_test): predictions = list() train, test = train_test_split(data, n_test) history = [x for x in train] for i in range(len(test)): testX, testy = test[i, :-1], test[i, -1] yhat = random_forest_forecast(history, testX) predictions.append(yhat) history.append(test[i]) print('>expected=%.1f, predicted=%.1f' % (testy, yhat)) error = mean_absolute_error(test[:, -1], predictions) return error, test[:, -1], predictions

6.加载数据中-

加载数据并使用上述函数将数据转换为监督学习数据。

series = pd.read_csv('/content/drive/MyDrive/Yugesh/times series with random forest/daily-total-female-births.csv’, header=0, index_col=0)values = series.valuesdata = series_to_supervised(values, n_in=6)

7.模型评估-

根据均方误差评估模型。

series = pd.read_csv('/content/drive/MyDrive/Yugesh/times series with random forest/daily-total-female-births.csv', header=0, index_col=0)values = series.valuesdata = series_to_supervised(values, n_in=6)

输出:

在上面的输出中,我们可以看到 MAE 为 5.999。这是一个很好的迹象。下面我们用测试数据绘制这些预测。

plt.plot(y, label='Expected')plt.plot(yhat, label='Predicted')plt.legend()plt.show()

输出:

在这里我们可以看到拟合随机森林回归模型的预测值。为了获得更好的性能,我们可以改变随机森林回归模型的参数。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
在Keras中使用LSTM模型进行多变量时间序列预测
R语言独立成分分析fastICA、谱聚类、支持向量回归SVR模型预测商店销量时间序列可视化
基于SARIMA、XGBoost和CNN-LSTM的时间序列预测对比
员工一言不合就离职怎么办?我用Python写了个员工流失预测模型
什么是时间序列(time series)
前沿: 从随机方法到软计算的时间序列预测最全综述
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服