这是我的场景。考虑在不同地点和时间发生的一组事件 - 例如,考虑有人在高空记录暴风雨期间城市中的雷击。就我的目的而言,闪电是瞬时的,只能击中某些位置(例如高层建筑)。还可以想象每次雷击都有一个唯一的 ID,以便以后可以参考该雷击。这个城市大约有100,000个这样的地点(正如你猜的那样,这是一个类比,因为我现在的雇主对实际问题很敏感)。
对于第 1 阶段,我的输入是(罢工 ID、罢工时间、罢工位置)元组的集合。所需的输出是短时间内击中同一位置的 1 个以上事件的集群集合。簇的数量事先是未知的(因此 k 均值在这里没那么有用)。可以针对给定的聚类尝试预定义被视为“短”的内容。也就是说,我可以将其设置为 3 分钟,然后运行算法;稍后尝试 4 分钟或 10 分钟。也许算法可以确定聚类的“强度”,并建议对于给定的输入,通过使用“短”的特定值来实现最紧凑的聚类,但这最初不是必需的。
对于第二阶段,我想考虑罢工的幅度(即实数)并寻找在短时间内且具有相似幅度的集群。
我用谷歌搜索并检查了这里有关数据聚类的答案。这些信息有点令人困惑(下面是我发现有用的链接列表)。 AFAIK,k-means 和相关算法不会有用,因为它们需要先验指定簇的数量。我并不是要求有人来解决我的问题(我喜欢解决它),但为了节省一些时间,数据聚类算法的大世界中的一些方向将是有用的。具体来说,当聚类数量未知时,什么聚类算法适合。
编辑:我意识到位置是无关紧要的,因为虽然事件一直在发生,但我只需要按位置对它们进行聚类。因此,每个位置都有自己的事件时间序列,因此可以独立分析。
一些技术细节:
- 由于数据集不是那么大,它可以容纳所有内存。
- 并行处理是一个很好的选择,但不是必需的。我只有一台 4 核机器,MapReduce 和 Hadoop 就太多了。
- 我最熟悉的语言是Java。我还没有使用过 R,对于我所给的时间来说,它的学习曲线可能会太多。无论如何,我会在空闲时间看一下。
- 目前,使用工具来运行分析是可以的,我不必只生成代码。我提到这一点可能是因为Weka http://www.cs.waikato.ac.nz/ml/weka/将会被建议。
- 可视化会很有用。由于数据集足够大,因此无法容纳在内存中,因此可视化至少应该支持缩放和平移。需要澄清的是:我不需要构建可视化 GUI,它只是一个很好的功能,可用于检查工具生成的结果。
谢谢。我发现有用的问题是:如何找到数字簇的中心?统计问题? https://stackoverflow.com/questions/2027252, 报童的聚类算法 https://stackoverflow.com/questions/562904, Java集群库 https://stackoverflow.com/questions/2129269, 如何对对象进行聚类(没有坐标) https://stackoverflow.com/questions/691922, 检测点“簇”的算法 https://stackoverflow.com/questions/356035