如何使用机器学习从给定的地理数据集在 python 中进行预测?
Posted
技术标签:
【中文标题】如何使用机器学习从给定的地理数据集在 python 中进行预测?【英文标题】:How to forecast in python using machine learning , from a given set of geographical data? 【发布时间】:2013-01-11 19:49:55 【问题描述】:我正在分析一些地理数据,并尝试根据时间和地理位置来预测/预测下一次事件的发生。数据顺序如下(带样本数据)
时间戳纬度经度事件 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下一步是进行时间序列分析,然后我被困在这里 2 个月,阅读了大量文献并认为这些是我的选择 * ARIMA(自回归方法) * 机器学习
我想利用机器学习来使用 python 进行预测,但无法真正弄清楚如何进行。具体来说,是否有任何特定于用例的 python 库/开源代码,我可以在此基础上进行构建。
编辑 1: 澄清一下,数据松散地依赖于过去的数据,但在一段时间内是均匀分布的。 可视化数据的最佳方式是,想象由一个算法控制的 N 个代理,该算法分配给它们从网格中挑选资源的任务。资源是社会经济结构的功能,也强烈依赖于地理。它对“算法”的兴趣在于能够预测需求区域和时间。
附注: 对于像 ARIMA 这样的自回归模型,Python 已经有一个库 http://pypi.python.org/pypi/statsmodels。
【问题讨论】:
您能否上传一些示例数据以及您已经完成的工作的代码?如果您有大量数据,则可能会上传到 Amazon S3。 为了提供更多上下文,我添加了前 5 个数据,如果您需要更多数据,我可以匿名并上传到某个地方。 【参考方案1】:没有示例数据或现有代码,我无法为您提供任何具体的信息。
但是,用您想探索的领域的命名法重新表述您的问题通常会有所帮助。在机器学习方面:
您的问题的特征:如何指定您的输入。时间戳是连续的,地理区域是离散的。 您的问题的目标标签:一个事件,无论给定事件是否已经发生。 您的问题是监督:以前数据的目标标签可用。您有(时间戳、地理区域)到事件映射的先前实例。 目标标签是离散的,所以这是一个分类问题(与回归问题相反,输出是连续的) .所以我会说你有一个监督分类问题。顺便说一句,您可能想先进行某种时间正则化;我猜事件的模式取决于一天中的什么时间、一个月中的一天或一年中的一个月,您可能希望将其表示为附加功能。
在此处查看可用的流行 Python ML 库之一,即 scikit-learn:
http://scikit-learn.org/stable/supervised_learning.html
并查阅其中一位贡献者最近在 scikit-learn 备忘单上发布的帖子:
http://peekaboo-vision.blogspot.de/2013/01/machine-learning-cheat-sheet-for-scikit.html
您的第一个不错的选择是尝试Support Vector Machines (SVM),如果失败,也可以试试k Nearest Neighbours (kNN)。请注意,使用ensemble classifier 通常比仅使用给定 SVM/kNN 的一个实例要好。
确切地说,如何将 SVM/kNN 与时间一起作为特征应用可能需要更多研究,因为 AFAIK(以及其他人可能会纠正我)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)。例如,如果您模拟森林火灾如何随时间蔓延。很明显,给定区域着火的可能性取决于其邻居是否着火。 AFAIK SVM 和 kNN 假设数据是 IID。在这一点上,我开始超出我的深度,但我认为您至少应该尝试几种 ML 方法,看看会发生什么!记得交叉验证! (scikit-learn 会为你做这件事)。
【讨论】:
lhsan :在我的情况下,时间戳不是连续的。我只有事件 A 发生的读数。谢谢,我会看看。这将比我最初想象的涉及更多的研究。 lhsan :据我所知,数据是马尔可夫/非 IID。 +1 这是一个老问题,但感谢 scikit-learn 的精彩介绍以上是关于如何使用机器学习从给定的地理数据集在 python 中进行预测?的主要内容,如果未能解决你的问题,请参考以下文章