如何使用机器学习在Python中预测给定一组地理数据?

7
我正在分析一些地理数据,并试图基于时间和地理位置预测/预报下一个事件的发生。数据按以下顺序排列(带有示例数据):
时间戳 纬度 经度 事件 
13307266 102.86400972 70.64039541 "事件A"
13311695 102.8082912 70.47394645 "事件A"
13314940 102.82240522 70.6308513 "事件A"
13318949 102.83402128 70.64103035 "事件A"
13334397 102.84726242 70.66790352 "事件A"
首先,我将其分类为100个区域,以减少维度和复杂性。
 
时间戳 区域 
13307266 47
13311695 65
13314940 51
13318949 46
13334397 26
接下来,我进行了时间序列分析,然后在这里卡了两个月,阅读了很多文献并找到了以下解决方案: * ARIMA(自回归模型) * 机器学习
我想利用Python进行机器学习来进行预测,但真的搞不清楚该怎么做。具体来说,是否有特定于此用例的Python库/开源代码,我可以构建它们。
编辑1: 为了澄清,数据在某种程度上依赖于过去的数据,但随着时间的推移是均匀分布的。 最好的方法是将数据视为由一个算法控制的N个代理人,他们的任务是从网格中选择资源。资源是社会经济结构的函数,并且也强烈依赖于地理位置。" 算法 " 能够预测需求区域和时间是有利的。
附:对于像ARIMA这样的自回归模型,Python已经有了一个库 http://pypi.python.org/pypi/statsmodels

请上传一些示例数据和您已经完成的代码?如果您有大量数据,可以考虑上传到Amazon S3。 - Asim Ihsan
为了提供更多背景信息,我已经添加了前5个数据。如果您需要更多信息,我可以将其匿名上传到某个地方。 - Shashank Singh
1个回答

18

如果没有示例数据或现有代码,我无法为您提供具体帮助。

然而,通常将问题重新用您想要探索的领域的术语表达会很有帮助。以机器学习术语来说:

  • 您问题的特征:输入如何指定。时间戳是连续的,地理区域是离散的。
  • 您问题的目标标签:一个事件,精确地说是某个给定事件是否发生。
  • 您的问题是监督式的:之前数据的目标标签是可用的。您有以前(时间戳、地理区域)到事件映射的实例。
  • 目标标签是离散的,所以这是一个分类问题(与回归问题相反,回归问题输出是连续的)。

因此,我会说您有一个监督式分类问题。顺便说一下,您可能需要先进行某种形式的时间规范化;我猜测事件的出现会根据时间的不同,例如一天中的时间、月份等,存在模式,并且您可能希望将其表示为附加特征。

看一下其中一个流行的Python机器学习库,scikit-learn,在这里:

http://scikit-learn.org/stable/supervised_learning.html

我看到一位scikit-learn贡献者最近发布了一个cheatsheet,需要咨询:

http://peekaboo-vision.blogspot.de/2013/01/machine-learning-cheat-sheet-for-scikit.html

你的第一选择应该尝试支持向量机Support Vector Machines (SVM),如果失败了,也许可以尝试k最近邻算法(kNN)。请注意,使用一个集成分类器通常比仅使用给定SVM / kNN的一个实例更优越。
如何将时间作为特征应用于SVM/kNN可能需要更多研究,因为据我所知(其他人可能会纠正我),SVM/kNN要求有界输入,均值为零(或规范化为均值为零)。只需进行一些随意搜索,您就可以找到某些SVM内核(例如傅里叶内核),可以为您转换时间序列特征:
时间序列分析的SVM内核
http://www.stefan-rueping.de/publications/rueping-2001-a.pdf

scikit-learn方便地允许您为SVM指定自定义内核。请参见:
http://scikit-learn.org/stable/auto_examples/svm/plot_custom_kernel.html#example-svm-plot-custom-kernel-py

有了您对ML术语的了解和示例数据,您可能希望考虑将问题发布到Cross Validated,即统计学Stack Exchange。

编辑1:对于这个问题的思考更多,您需要真正理解您的特征和相应标签是否独立且分布相同(IID)。例如,如果您正在模拟森林火灾如何随时间传播,显然给定区域发生火灾的可能性取决于其邻居是否着火。据我所知,SVM和kNN假设数据是IID的。此时,我开始超出我的能力范围,但我认为你应该至少尝试几种ML方法并查看结果!记得交叉验证! (scikit-learn可以为您执行此操作)。


lhsan:在我的情况下,时间戳不是连续的。我只有在事件A发生时才有读数。谢谢,我会看一下的。这将比我最初想象的更加涉及研究。 - Shashank Singh
lhsan:据我所知,这些数据是马尔可夫/非独立同分布的。 - Shashank Singh
+1 这是一个老问题,但感谢您对scikit-learn的良好介绍。 - RedRaven

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接