繁体   English   中英

使用 scikit learn 训练机器学习模型以进行时间序列预测

[英]Train machine learning model with scikit learn for time-series prediction

我需要用 scikit-learn 训练一个模型来预测房间里更少人的可能时间。

这是我的数据集的样子:

Time                          PeopleCount
---------------------------------------------
2019-12-29 12:40:10               50
2019-12-29 12:42:10               30
2019-12-29 12:44:10               10
2019-12-29 12:46:10               10
2019-12-29 12:48:10               80
and so on...

此数据将可用 30 天。

模型训练完成后,我将查询模型以获取上午 10 点到晚上 8 点之间房间内人数较少的可能时间。 我希望机器学习模型能够以 30 分钟的准确度做出响应,即。 “下午 3 点到 3 点 30 分”

我可以使用什么算法来解决这个问题以及如何实现目标? 或者除了 SciKit-Learn 之外还有其他 Python 库可以用于此目的吗?

我是机器学习的新手,很抱歉提出了一个天真的问题。

SciKitLearn 模型不识别时间戳,因此您必须将时间戳列分解为多个功能,即。 星期几、小时等。如果您需要 30 分钟的准确性,那么您将不得不以某种方式从 PeopleCount 列聚合数据,即。 记录每 30 分钟时间间隔内的平均、最小或最大人数。 创建滞后特征可能是个好主意,即。 前一个时间段甚至 2、3 或 n 个时间段前的人数是多少。

准备好时间特征和标签(相应的人数)后,您就可以开始以标准方式训练模型:

  • 将您的数据分成训练集和验证集,
  • 训练您想要尝试的每个模型并比较结果。

任何回归器都应该适合这项任务,即。 Ridge、Lasso、DecisionTreeRegressor、SVR 等。但是请注意,如果您需要从给定范围内获得最佳时间段,则需要对该范围内的每个时间段进行预测并选择符合条件的时间段,尽管可能有最小预测值不小于您与之比较的值的情况。

如果你没有得到令人满意的回归结果,即。 每次均方误差或中位数误差太高时,您都可以提出一个分类案例,即。 您可以训练分类器来预测人数是否大于 50,而不是训练回归器来预测人数。

有很多方法可以解决这个问题。 一旦尝试了不同的模型并检查了结果,您将想出优化参数、设计特征、预处理输入等的方法。

首先,时间序列预测是基于当前值或多或少取决于过去值的理论。 例如,2019-12-29 12:48:10 的 80 人对 12:46:10、12:44:20 或之前的人数有很大影响,与过去相关值。 如果没有,您最好使用其他算法进行预测。

虽然 scikit 包包含各种模块作为机器学习算法,但其中大多数专门用于分类算法。 如果你的日期没有被识别为时间序列的类型,我想分类算法肯定能满足你的需求。 实际上,scikit 也有一些回归模块,尽管我认为这似乎不太适合时间序列数据的预测。

在时间序列数据的预测方面,RNN或LSTM算法(深度学习)已经被广泛使用,但scikit没有提供其内置算法。 因此,您最好学习 Tensorflow 或 Pytorch 框架,它们是使您能够构建 RNN 或 LSTM 模型的常用工具。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM