我正在开发一个应用程序,其中根据用户回答的一系列问题将用户分组为“ n”个团队。问题集是基本的多项选择,每个用户必须回答每个问题。
这些是严格的标准:
我正在使用的数据集如下所示(我可以更改此值)
{
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算法 为了解决我的问题。但是鉴于我是开发人员而不是数据科学家的事实,细节对我来说是消失的。
对于我的问题的任何建议或解决方案都将受到赞赏。
答案 0 :(得分:0)
这是一个非常棘手的问题,但这是可以帮助您的形式化。
假设您有N个用户。您可以将它们视为N个节点的完整图,其中边(i,j)的权重是用户i和j的“相似性”(例如,常见答案的数量)。然后,您正在寻找将顶点划分为大小为n的组,以使分区内边缘权重最大化,即使分区P最大化
这可以证明与最小化分区间权重相同。
此转换使您的问题归结为找到(k,nu)平衡的图分区。这是一个难题,但是 Balanced Graph partitionning,Andreev和Räcke,ACM 2004 提供了一种近似算法及其详细的复杂性分析。
您可以使用带有nu松散值的算法,获得近似答案,然后重新平衡用户以在每个组中获得n。希望这会带来接近最佳的结果,但是最优性将很难实现。