这是我的情景。考虑一系列发生在不同地方和时间的事件 - 例如,考虑一个人在风暴期间记录城市中的雷击。为了我的目的,闪电是瞬间的,只能到达某些位置(如高层建筑)。还可以想象每次雷击都有一个唯一的ID,以便稍后可以参考罢工。这个城市大约有10万个这样的地方(正如你猜的那样,这是类比,因为我现在的雇主对实际问题很敏感。)
对于阶段1,我的输入是(攻击ID,打击时间,打击位置)元组的集合。期望的输出是在短时间内到达相同位置的多于1个事件的集群的集合。预先不知道簇的数量(因此k-means在这里没有用)。对于给定的群集尝试,可以预定义被视为“短”的内容。也就是说,我可以将其设置为3分钟,而不是运行算法;稍后尝试4分钟或10分钟。对于算法来说,确定聚类的“强度”可能是一个很好的接触,并建议对于给定的输入,通过使用“short”的特定值来实现最紧凑的聚类,但这不是最初所需的。
对于阶段2,我想考虑打击的幅度(即实数),并寻找在短时间内具有相似幅度的聚类。
我用谷歌搜索并检查了有关数据聚类的答案。这些信息有点令人困惑(下面是我发现有用的链接列表)。 AFAIK,k-means和相关算法没有用,因为它们需要先验地指定簇的数量。我不是要求有人来解决我的问题(我喜欢解决它),但是在数据聚类算法的大世界中的一些方向对于节省一些时间是有用的。具体而言,什么聚类算法适用于何时聚类数量未知。
编辑:我意识到这个位置是无关紧要的,因为虽然事件一直在发生,但我只需要将它们聚集在每个位置。因此,每个位置都有自己的事件时间序列,因此可以独立分析。
一些技术细节:
- 由于数据集不是那么大,它可以适合所有内存
- 并行处理是一件好事,但不是必需的。我只有一台4核机器,MapReduce和Hadoop太多了
- 我最熟悉的语言是Java。我还没有使用R,因为它的学习曲线可能在给我的时间太长了。无论如何,我会在业余时间看看它
- 目前,使用工具运行分析是可以的,我不必只生成代码。我之所以提到这一点,是因为可能会提出Weka
- 可视化将是有用的。由于数据集足够大以至于它不适合内存,因此可视化应该至少支持缩放和平移。并澄清:我不需要构建可视化GUI,它只是一个很好的功能,用于检查使用工具生成的结果。
谢谢。我觉得有用的问题有:How to find center of clusters of numbers? statistics problem?,Clustering Algorithm for Paper Boys,Java Clustering Library,How to cluster objects (without coordinates),Algorithm for detecting "clusters" of dots
答案 0 :(得分:2)
我建议你研究一下Mean Shift Clustering。均值移位聚类背后的基本思想是获取数据并执行kernel density estimation,然后在密度估计中找到模式,数据点向模式的收敛区域定义聚类。
平均移位聚类的好处是不必提前指定聚类的数量。
我没有使用过Weka,所以我不确定它是否具有均值移位聚类。但是,如果您使用MATLAB,则可以使用工具箱(KDE toolbox)来执行此操作。希望有所帮助。
答案 1 :(得分:1)
难道你不能仅仅使用hierarchical clustering作为距离指标的一部分,将罢工时间的差异用作?
答案 2 :(得分:0)
为时已晚,但我还是会添加它:
在R中,有一个包fpc
,它有一个方法pamk()
,为您提供群集。使用pamk()
,您无需提及最初的群集数量。它自己计算输入数据中的簇数。