如何根据标签对用户进行聚类

我想根据用户观看的节目的类别或标签对用户进行聚类。有什么最简单/最好的算法可以做到这一点吗?

假设我有大约20,000个标签和数百万个观看事件可以用作信号,是否有我可以使用pig/hadoop/mortar或在neo4j上实现的算法?

就数据而言,我有用户、他们观看的节目以及节目的标签(通常每个节目有大约10个标签)。

我希望最终得到k个聚类(可能是十几个?)或广泛的分类,我可以用这些分类来对用户进行分类和分组,并从中获得一些关于他们如何被划分的见解 – 每个聚类都有一组代表性的标签。

我看到一些帖子建议使用层次算法,但不确定在这种情况下如何计算“距离”。那将是两个用户之间的距离,还是用户与一组标签之间的距离,等等?


回答:

你基本上是想根据他们的标签来聚类用户

为了简单起见,假设你只有10个标签(而不是20,000个)。假设一个用户,比如user_34,拥有第2个和第7个标签。对于这个聚类任务,user_34可以被表示为10维空间中,他的相应坐标是:[0,1,0,0,0,0,1,0,0,0]。

在你自己的情况下,每个用户同样可以被表示为20,000维空间中的一个点。你可以使用Apache Mahout,它包含许多有效的聚类算法,比如K-means。

由于一切都在数学坐标系统中得到了很好的定义,计算任意两个用户之间的距离很容易!可以使用任何距离函数来计算,但欧几里得距离是事实上的标准。

注意: Mahout和许多其他数据挖掘程序支持许多适合稀疏特征的格式,即你不需要在文件中插入…,0,0,0,0,…,只需指定哪些标签被选中即可。(参见Mahout中的RandomAccessSparseVector

注意: 我假设你只想聚类你的用户。从聚类中提取代表性信息有些棘手。例如,对于每个聚类,你可以选择在聚类用户之间更常见的标签。或者,你可以使用来自信息论的概念,比如信息增益,来找出哪些标签包含更多关于聚类的信息。

Related Posts

Keras Dense层输入未被展平

这是我的测试代码: from keras import…

无法将分类变量输入随机森林

我有10个分类变量和3个数值变量。我在分割后直接将它们…

如何在Keras中对每个输出应用Sigmoid函数?

这是我代码的一部分。 model = Sequenti…

如何选择类概率的最佳阈值?

我的神经网络输出是一个用于多标签分类的预测类概率表: …

在Keras中使用深度学习得到不同的结果

我按照一个教程使用Keras中的深度神经网络进行文本分…

‘MatMul’操作的输入’b’类型为float32,与参数’a’的类型float64不匹配

我写了一个简单的TensorFlow代码,但不断遇到T…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注