配对算法的建议

数据挖掘 机器学习 算法 优化
2022-02-19 14:15:18

我经营异性配对服务。我有我的男性客户和我的女性客户。我需要根据几个属性(年龄、兴趣、性格类型、种族、身高、星座等)将我的每个客户与他们的“灵魂伴侣”配对。

在我创建完所有配对后,会有某种分数来评估我的比赛质量。

我无法将一个男人与多个女人相匹配,反之亦然。我还想尽量减少不匹配的客户数量。

根据客户的属性想出一种方法来匹配我的客户的最佳算法是什么?

同样,这是一个玩具示例。我的实际用例完全不同。

编辑:

分数是在配对级别计算的,然后求和。通过查看两对的新分数,我可以计算出当我交换伙伴时分数的变化情况。我确实可以访问指标的内部,但它很复杂。我没有任何限制,除了为了我自己的理智,我更希望它快速简单。

2个回答

尽管您可能会找到一种将机器学习 (ML) 应用于此优化问题的方法,但它看起来没有必要,而且可能会分散注意力。如果评分系统很复杂,或者大多数匹配的数据不完整,并且需要从一些更有限的属性集计算匹配分数估计,ML 可能会有所帮助。

相反,您似乎有一个组合优化问题一个众所周知的例子是旅行推销员问题

有许多可能的算法来解决这类问题。选择哪一个可能取决于数据的其他特征,例如计算分数的速度 - 无论是针对整个数据集还是针对单个更改。如果计算更改的速度足够快,您可以使用从完整(但尚未优化)解决方案中工作的优化器并进行更改。

有一本名为Clever Algorithms (Nature-Inspired Programming Recipes)的免费 PDF/书,涵盖了所有不同优化器中的选择。这可以让您在算法的速度和可靠性方面找到最佳的东西。

这是一个你可以尝试的简单的事情

  • 创建一个“贪婪”的解决方案

    • 随机播放一组需要配对的物品
    • 依次对每个项目,将其与得分最高的伙伴配对
    • 计算此解决方案的分数
  • 细化解决方案

    • 对某些对子集进行采样(例如 2、3、4、5 对)。您可以为足够小的数据集确定性地执行此操作,或者随机地执行此操作,或者使用某种算法进行过滤以“至少有一些改进的机会”。
    • 在这个小子集中的所有排列中找到最好的分数(即暴力破解 4 对中的所有 24 对)
    • 将最佳子集放回解决方案
    • 重复,直到经过一些测试后没有发现任何改进

可以通过各种方式更改此例程,以利用您的问题的各个方面。在您的情况下,一件好事,使旅行推销员问题更容易,是您对有效配对没有任何限制。在 TSP 中,您关心的是制作单个电路,而不是多个单独的循环,这会限制您进行更改的方式,而在您的情况下,您的每一对都是完全独立的。

可能的算法改进的一个示例:您可以预先计算每个人的前 N ​​个匹配的分数,并且在考虑局部变化时仅在这些匹配中搜索。

Gale-Shapley 算法,也称为 SMP稳定匹配问题

当只有一种物品而不是两组物品时,另请参阅 SRP Stable Roommates Problem 。