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

Sha*_*ngh 7 python numpy machine-learning forecasting scikit-learn

我正在分析一些地理数据,并尝试预测/预测下次发生的事件的时间和地理位置.数据按以下顺序排列(带样本数据)

Timestamp Latitude     Longitude   Event 
13307266  102.86400972 70.64039541 "Event A"
13311695  102.8082912  70.47394645 "Event A"
13314940  102.82240522 70.6308513  "Event A"
13318949  102.83402128 70.64103035 "Event A"
13334397  102.84726242 70.66790352 "Event A"

第一步是将其分为100个区域,以减少尺寸和复杂性.

 
Timestamp Zone 
13307266  47
13311695  65
13314940  51
13318949  46
13334397  26

下一步是进行时间序列分析,然后我在这里停留了2个月,阅读了大量文献并认为这些是我的选择*ARIMA(自动回归方法)*机器学习

我想利用机器学习来预测使用python,但无法弄清楚如何.特别是有任何特定于用例的python库/开源代码,我可以构建它.

编辑1:为了澄清,数据松散地依赖于过去的数据,但在一段时间内均匀分布.可视化数据的最佳方式是,想象由算法控制的N个代理,它们分配从网格中挑选资源的任务.资源是社会经济结构的功能,也很大程度上依赖于地理.它的" 算法 " 感兴趣,能够预测需求区和时间.

ps:对于像ARIMA这样的自回归模型,Python已经有了一个库http://pypi.python.org/pypi/statsmodels.

Asi*_*san 18

没有示例数据或现有代码,我无法为您提供任何具体内容.

但是,通常在您想要探索的领域的术语中重新表达您的问题是有帮助的.在ML术语中:

  • 您的问题的功能:如何指定您的输入.时间戳是连续的,地理区域是离散的.
  • 您的问题的目标标签:事件,确切地说是否发生了特定事件.
  • 您的问题受到监督:以前数据的目标标签可用.您有(事件映射,地理区域)事件映射的先前实例.
  • 目标标签是离散的,因此这是一个分类问题(与回归问题相反,输出是连续的).

所以我说你有一个监督分类问题.另外,你可能想先做一些正规化的时间; 我猜这些事件的模式将取决于一天中的什么时间,一个月中的某天或一年中的某个月,并且您可能希望将其表示为附加功能.

看一下流行的Python ML库,scikit-learn,这里:

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

并在其中一位参与者的咨询报告中查阅最近在cheatsheet上发布的帖子:

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

你的第一个好赌注是尝试支持向量机(SVM),如果失败,也可以给k近邻(kNN)一个镜头.请注意,使用集合分类器通常优于仅使用给定SVM/kNN的一个实例.

如何确切地将SVM/kNN与时间一起应用作为一个特征可能需要更多的研究,因为AFAIK(以及其他人可能会纠正我)SVM/kNN需要平均值为零的有界输入(或归一化为平均值为零) .只需做一些随机谷歌搜索,您就可以找到某些SVM内核,例如傅立叶内核,它可以为您转换时间序列功能:

用于时间序列分析的SVM内核
http://www.stefan-rueping.de/publications/rueping-2001-a.pdf

scikit-learn handily允许您为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).例如,如果您正在模拟森林火灾随时间推移的传播方式.很明显,某个区域发生火灾的可能性取决于其邻居是否着火.AFAIK SVM和kNN假设数据是IID.在这一点上,我开始走出我的深度,但我认为你应该至少给出几个ML方法,看看会发生什么!记得交叉验证!(scikit-learn为你做这个).