Answers:
像KNN这样的模型的问题在于它们没有考虑季节性(趋势随时间变化)。要考虑这些因素,您应该使用时间序列分析。
对于诸如您的计数数据,您可以使用广义线性自回归移动平均模型(GLARMA)。幸运的是,有一个实现它们的R包(glarma)。
该小品是该工具背后的理论一个很好的资源。
我认为上述克里斯托弗的答案是完全明智的。作为一种替代方法(或者可能只是在他所提供的建议之外),我可能首先要稍微可视化数据以大致了解正在发生的事情。
如果您尚未执行此操作,则可以尝试添加日期的月份和星期几作为功能-如果最终坚持使用KNN,这将有助于模型提高季节性。
作为进行此操作的另一种方式,您可以考虑从一个非常基础的模型(例如OLS)开始。这些模型在产生合理的预测时通常会走很长一段路。
最后,我们对您的数据了解得越多,我们就越容易帮助您生成建议-您正在观察什么时间范围?您目前正在使用哪些功能?等等
希望这可以帮助 -
您可以尝试神经网络。您可以在此处和此处找到有关如何在时间序列上应用NN的2个绝佳解释。
请注意,最佳做法是:
因为您要寻找的是回归问题,所以激活函数应该是linear
,而不应该是,sigmoid
或者,tanh
并且您的目标是最小化sum-of-squares error
(作为对negative log-likelihood
分类问题中最大化的反对)。
正如@Christopher Lauden前面提到的,时间序列分析最适合此类情况。但是,如果您希望采用更传统的“机器学习方法”,那么我过去所做的就是将您的数据作为功能重叠在重叠的时间窗口中,然后用它来预测未来几天(或几周) )的流量。
您的特征矩阵如下所示:
t1 | t2 | ... | tN
t2 | t3 | ... | tN+1
t3 | t4 | ... | tN+2
...
tW | tW+1 | ... |tN+W
tI
一天的交通在哪儿I
。您要预测的功能是最后一列之后的第二天的流量。本质上,使用流量窗口来预测第二天的流量。
任何种类的ML模型都可以做到这一点。
编辑
针对这个问题,“您能否详细说明如何使用此特征矩阵”:
特征矩阵的值指示一段时间内的过去流量(例如,超过1周的每小时流量),我们使用它来预测将来某个指定时间段的流量。我们获取历史数据,并建立历史流量的特征矩阵,并在将来的某个时间段(例如,特征窗口中的第二天后)用流量标记出来。使用某种回归机器学习模型,我们可以获取历史流量数据,并尝试建立一个模型来预测流量在历史数据集中的移动方式。前提是未来的流量将类似于过去的流量。
好吧,首先,如果没有深入的知识,我什至不会使用机器学习之类的东西。如果有这个时间序列,我会做的简单的事情是:
这两件事将帮助您了解数据集在告诉您什么。这样一来,您可能会处于使用机器学习算法的更好状态。
另外,我目前正在按时间序列构建一些东西,使用时间序列分析将比机器学习有更多帮助。例如,您可以使用模式识别算法,该算法每天使用数据显示模式,而算法则使用多达3到6个月的数据来捕获模式。
使该线程恢复活力,因为这对于在这里遇到类似问题的其他人可能很有用。
Facebook最近发布并开放了其内部预测工具之一,称为Prophet https://facebookincubator.github.io/prophet/
它既可以作为R&Python软件包提供,也被证明是对机器学习背景不甚了解的人的有趣解决方案。但是,一些其他ML知识可以调整和优化生成的模型。
我建议先尝试先知。此解决方案的快速优势是模型构建和测试的简便性和速度:您实际上可以在几分钟内获得下降的投影。它在时间序列上的表现非常好,“自然”地捕获了手头数据的季节性。
在幕后,它类似于通用加性模型(GAM)-有关专用纸的更多详细信息:https://facebookincubator.github.io/prophet/static/prophet_paper_20170113.pdf