我正在为一个黑客马拉松项目的约会应用程序工作。我们有一系列用户填写的问题,然后每隔几天我们就会发送建议的匹配项。如果有人有这些匹配算法的好教程,我们将非常感激。一个想法是为每个问题分配一个点值,然后做一个 def比较(person_a,person_b)函数,你迭代这些问题,并且有一个共同的答案,你添加一个点。所以得分越高,比赛越好。到目前为止我理解这一点,但我很难看到如何在数据库中保存这些数据。
在python中,我可以接受每个用户,然后使用此比较函数遍历所有其他用户,并为列出所有其他用户的每个人和他们的分数制作一个字典。然后建议匹配,我遍历字典列表,如果该人尚未与该人匹配,则进行匹配。
person1_dictionary_of_matches = {‘person2’: 3, ‘person3’: 5, ‘person4’: 10, ‘person5’: 12, ‘person6’: 2,……,‘person200’:10}
person_1_list_of_prior_matches = [‘person3’, 'person4']
我正在努力学习如何在django中表现这一点。我可以拥有一大堆用户并制作匹配模型,如:
class Match(Model):
person1 = models.ForeignKey(User)
person2 = models.ForeignKey(User)
score = models.PositiveIntegerField()
我在哪里进行迭代并保存所有成对分数。
然后再做 person_matches = Match.objectsfilter(person1 = sarah,person2!= sarah).order_by('得分')。exclude(list_of_past_matches中的person2)
但是我担心1000个用户,如果这样做,我的表中会有1000000行。为数据库中的每个用户保存所有这些成对分数,这是否是残酷的?或者,如果我在周日晚上凌晨1点运行它,或者只是缓存这些响应一次并使用比较几个月,这无关紧要吗?有没有更好的方法来做到这一点,而不是成对匹配每个人?我应该使用其他一些数据结构来捕获人员及其兼容性分数吗?非常感谢任何指导!
答案 0 :(得分:1)
有趣的问题。在机器学习的当前范例中,您使用稀疏矩阵,这意味着您不必执行每个匹配评估。稀疏性可能来自两个选择:
过滤后,您可以执行一项功能,以便为新用户估算适当的匹配项。基于用户选择的选择选择匹配到数据库中以供将来查询。但是,如果你认真对待这个问题我建议你试试Spark。这不是SQL数据库的问题,而是大数据引擎的问题。