集群数量未知的集群
Posted
技术标签:
【中文标题】集群数量未知的集群【英文标题】:Clustering with unknown number of clusters 【发布时间】:2019-11-26 09:12:31 【问题描述】:我需要找到属于同一个人的登录信息。该任务应在python环境中解决。 我有一个包含用户操作的数据集。通过这些操作,我创建了 N 个特征:
- login
- timestamp
- feature 1
- feature 2
...
- feature N
此外,还有一个包含成对登录的训练数据集,很可能属于同一个人。
- login_A
- login_B
- person_id
如何实现一种算法来破坏我的同一个人的登录数据集。因此,我需要获取登录列表和一些生成的 person_Ids。 请帮助找到解决问题的正确方法并链接到 Python 中的实现示例。
谢谢!
【问题讨论】:
试试 DBSCAN 方法。它不需要了解数据集中的集群数量。 如果您只是想遍历这组对以查找可能属于同一个人的所有登录名,那么您不妨使用BFS,重复直到覆盖所有登录名。另一方面,如果您想要一个实际的聚类算法,请尝试DBSCAN 或Agglomerative clustering 【参考方案1】:我对这类事情并不是非常精通,但我的想法是,您将集群中心分配为每个人的两次登录之间的中点,并为每个集群提供 person_id 登录的标签它是从创建的。然后,当您进行分类时,您会找到最近的集群中心并将该登录名指定为该人员 ID。
【讨论】:
【参考方案2】:我建议您尝试sk-learn 聚类模块sklearn.cluster
的一些算法。在市场上最常见的聚类算法中,有许多可用的算法。而且它真的很容易使用,你可以用几行代码运行相当复杂的聚类算法。
其中一些需要预先确定集群的数量,但并非所有情况都如此。
例如,层次聚类可用于获得任意数量的聚类(this page 上有很好的解释)。 如果不属于任何集群的孤独点不会打扰您,您也可以使用 DBSCAN。
编辑:根据您对问题的描述,我不确定集群是您想要做的。对于一个大的用户社区,我们会使用集群来构建一些具有一些共同点并且彼此相似的人的社区(集群)。
【讨论】:
【参考方案3】:你有训练数据。
然后,监督方法将始终优于无监督方法,例如聚类。这是解决您问题的错误工具。
学习区分两个动作是否属于同一个用户。
【讨论】:
以上是关于集群数量未知的集群的主要内容,如果未能解决你的问题,请参考以下文章