针对人群的聚类分析
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了针对人群的聚类分析相关的知识,希望对你有一定的参考价值。
我有大量用户的位置数据(数十万)。我存储当前位置和一些历史数据点(分钟数据返回一小时)。
如何检测聚集在生日派对等自然事件周围的人群?应检测到更小的人群(假设从5人开始)。算法需要几乎实时(或至少每分钟一次)工作,以便在发生时检测人群。
我已经研究过许多聚类分析算法,但大多数算法看起来都不错。它们要么花费太长时间(我已经看过O(n ^ 3)和O(2 ^ n))或者需要事先知道有多少簇。
有人能帮我吗?谢谢!
让每个用户成为自己的集群。当她进入距离R到另一个用户时形成一个新的群集,并在该人离开时再次分开。您有以下活动:
- 人数大于N.
- 对于大于T的计时器,它们处于相同的位置
- 派对不动(可能表示公共交通工具)
- 它不在公共服务大楼(医院,学校等)
- (其他条件很多)
一分钟即使在成千上万的人身上也有足够的时间来完成它。在幼稚的实施中,它将是O(n ^ 2),但是请注意,比较每个人的位置,只有那些在近邻的人。在第一次近似中,您可以将“世界”划分为扇区,这也使得任务平行变得容易 - 反过来又可以轻松扩展。更多用户?只需添加一些节点和缩减。
一个想法是根据“质量”和重心来思考。首先,在质量不大于例如质量之前,不要将某事物标记为事件。 15个单位。当然,位置是不精确的,但如果发生事件,它应该在事件的中心附近平均。如果你的集群在没有增加大量质量的情况下朝任何方向增长,那么很可能它是不对的。看看像DBSCAN(基于密度的聚类)这样的方法,也可以从物理系统中获取良好的灵感,甚至是Ising模型(在这里你考虑温度和“翻转”某人加入人群)在活动有限的时候。
如何避免作者在评论中提到的“单链接问题”?一个想法是根据“质量”和重心来思考。首先,在质量不大于例如质量之前,不要将某事物标记为事件。 15个单位。当然,位置是不精确的,但如果发生事件,它应该在事件的中心附近平均。如果你的集群在没有增加大量质量的情况下朝任何方向增长,那么很可能它是不对的。看看像DBSCAN这样的方法(基于密度的聚类),也可以从物理系统中获取良好的灵感,甚至是Ising模型(在这里你可以考虑温度和“翻转”某人加入人群)。这不是一个新颖的问题,我相信有一些文件可以覆盖(部分),例如: Is There a Crowd? Experiences in Using Density-Based Clustering and Outlier Detection。
完成群集几乎没有用处。
只需使用好的数据库索引。
保留当前位置的数据库。
每当您获得新坐标时,请使用所需的半径(例如50米)查询数据库。一个好的索引将在O(log n)中为小半径执行此操作。如果您获得足够的结果,这可能是一个事件,或者某个加入正在进行的事件的人。
以上是关于针对人群的聚类分析的主要内容,如果未能解决你的问题,请参考以下文章
R语言聚类分析之基于划分的聚类KMeans实战:基于菌株数据