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

时间:2020-01-21 14:52:49

标签: python machine-learning scikit-learn

我需要使用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.AM和8.PM之间的房间中人数较少时的可能时间。我希望机器学习模型能够以30分钟的准确度做出回应。 “ 3.00 PM到3.30PM”

对于该问题,我可以使用哪种算法?如何实现目标?还是有除SciKit-Learn之外的其他Python库可用于此目的?

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

2 个答案:

答案 0 :(得分:1)

SciKitLearn模型无法识别时间戳,因此您必须将“时间戳”列分解为许多功能,例如。如果需要30分钟的准确性,则必须以某种方式(例如,从PeopleCount列中)汇总数据。记录每个30分钟时间间隔内的平均人数,最少人数或最大人数。也可以创建滞后特征,即。在前一个时隙甚至2、3或n个时隙之前的人数是多少?

一旦您准备好了时间功能和标签(相应的人员计数),就可以开始以标准方式训练模型了:

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

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

如果使用回归器无法获得令人满意的结果,即每当均值或中位数平方误差过高时,您都可以提出一个分类案例,即。您无需训练回归器来预测人数,而可以训练分类器来预测人数是否大于50。

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

答案 1 :(得分:1)

首先,时间序列预测是基于当前值或多或少取决于过去值的理论基础。例如,截至2019年12月29日12:48:10的80个人必须对12:46:10、12:44:20或之前的人数产生重大影响,与过去价值观。如果没有,您最好使用其他算法进行预测。

尽管scikit软件包包含各种模块作为机器学习算法,但大多数模块专门研究分类算法。我认为,如果您的日期未被标识为时间序列的类型,则分类算法肯定会满足您的需求。实际上,即使我认为scikit似乎不太适合预测时间序列数据,也可以使用scikit。

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