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