算法-根据最相似的首选项对用户进行分组

时间:2018-10-01 19:52:05

标签: algorithm grouping similarity

我正在开发一个应用程序,其中根据用户回答的一系列问题将用户分组为“ n”个团队。问题集是基本的多项选择,每个用户必须回答每个问题。

这些是严格的标准:

  • 每个组最多可以有'n'个用户
  • 每个用户只能分配给1个团队
  • 每个团队都由具有高度相似性的用户组成

我正在使用的数据集如下所示(我可以更改此值)

{
 1: { 1: 'a', 2: 'b', 3: 'a', 4: 'c' },
 2: { 1: 'b', 2: 'c', 3: 'b', 4: 'd' },
 3: { 1: 'b', 2: 'a', 3: 'c', 4: 'd' },
 ...
}

第一次尝试:我创建了一个函数,当给定初始用户时,该函数将按照相似性顺序返回一组用户。效果很好,但不能提供固定的组。

第二次尝试:我试图定义一个较低和较高的精度。 然后,我递归地遍历所有用户,并将他们推到团队中,成员的加入相似度比精度更高。如果没有,我将在下一次迭代中调整精度。这给了我可靠的分组,但是每个分组中的用户都不如应该/可能的那样准确?是。

我现在正在研究实际算法,特别是Gale-Shapely算法 为了解决我的问题。但是鉴于我是开发人员而不是数据科学家的事实,细节对我来说是消失的。

对于我的问题的任何建议或解决方案都将受到赞赏。

1 个答案:

答案 0 :(得分:0)

这是一个非常棘手的问题,但这是可以帮助您的形式化。

假设您有N个用户。您可以将它们视为N个节点的完整图,其中边(i,j)的权重是用户i和j的“相似性”(例如,常见答案的数量)。然后,您正在寻找将顶点划分为大小为n的组,以使分区内边缘权重最大化,即使分区P最大化

objective function

这可以证明与最小化分区间权重相同。

此转换使您的问题归结为找到(k,nu)平衡的图分区。这是一个难题,但是 Balanced Graph partitionning,Andreev和Räcke,ACM 2004 提供了一种近似算法及其详细的复杂性分析。

您可以使用带有nu松散值的算法,获得近似答案,然后重新平衡用户以在每个组中获得n。希望这会带来接近最佳的结果,但是最优性将很难实现。