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