2017-12-23 2 views
1

Ich arbeite an einer Dating-App für ein Hackathon-Projekt. Wir haben eine Reihe von Fragen, die Benutzer ausfüllen, und dann werden wir alle paar Tage Vorschläge für Übereinstimmungen senden. Wenn jemand ein gutes Tutorial für diese Art von Matching-Algorithmen hat, wäre es sehr geschätzt. Eine Idee ist, einen Punktwert für jede Frage zuzuweisen und dann eine Def-Vergleichsfunktion (person_a, person_b) auszuführen, in der Sie diese Fragen durchgehen, und wo es eine gemeinsame Antwort gibt, fügen Sie einen Punkt hinzu. Je höher die Punktzahl, desto besser das Match. Ich verstehe das bisher, aber ich habe Mühe zu sehen, wie ich diese Daten in der Datenbank speichern kann.Django Entwerfen von Models für Dating-App Spiele

In Python konnte ich jeden Benutzer nehmen und dann alle anderen Benutzer mit dieser Vergleichsfunktion durchlaufen und ein Wörterbuch für jede Person erstellen, die alle anderen Benutzer und eine Punktzahl für sie auflistet. Und dann, um Übereinstimmungen vorzuschlagen, iteriere ich durch die Wörterbuchliste und wenn diese Person nicht bereits mit dieser Person abgeglichen wurde, dann mache eine Übereinstimmung.

person1_dictionary_of_matches = {‘person2’: 3, ‘person3’: 5, ‘person4’: 10, ‘person5’: 12, ‘person6’: 2,……,‘person200’:10} 
person_1_list_of_prior_matches = [‘person3’, 'person4'] 

Ich bin zu kämpfen, wie dies in django darzustellen. Ich könnte eine Reihe von Benutzern und ein Spiel-Modell machen, wie:

class Match(Model): 
    person1 = models.ForeignKey(User) 
    person2 = models.ForeignKey(User) 
    score = models.PositiveIntegerField() 

Wo ich die Iteration tun und all paarweise Partituren speichern.

und dann tun
person_matches = Match.objectsfilter (person1 = sarah, person2! = Sarah) .order_by ('Score'). Auszuschließen sind (person2 in list_of_past_matches)

Aber ich mache mir Sorgen, mit 1000 Benutzer Ich werde 1000000 Zeilen in meiner Tabelle haben, wenn dies geschieht. Wird das brutal sein, all diese paarweisen Bewertungen für jeden Benutzer in der Datenbank speichern zu müssen? Oder spielt es keine Rolle, ob ich es am Sonntagabend um 1 Uhr nachts betreibe oder diese Antworten nur einmal zwischenspeichern und die Vergleiche für einen Zeitraum von Monaten verwenden? Gibt es einen besseren Weg dies zu tun, als alle paarweise zusammenzubringen? Sollte ich eine andere Datenstruktur verwenden, um die Personen und ihren Kompatibilitätswert zu erfassen? Vielen Dank für jede Anleitung!

Antwort

1

Interessante Frage. Im aktuellen Paradigma des maschinellen Lernens arbeiten Sie mit dünn besetzten Matrizen, dh Sie müssen nicht jede einzelne Spielauswertung durchführen. Die Seltenheit kann von zwei Alternativen kommen:

  1. Erstellen Sie eine Batch-Offline-Analyse Ihrer Daten, um einige Clustering durchzuführen (ausgefallene Lösung).
  2. Filtern Sie die Personen, die von einigen Schlüsselattributen: a) Geschlecht/sexuelle Präferenz, b) geografische Lage, c) Datierung Status usw. (einfache Lösung)

Nach der Filterung Sie eine Funktion zum Schätzen geeigneten führen könnte passt für den neuen Benutzer. Basierend auf den ausgewählten Auswahlen des Benutzers können ausgewählte Treffer in der Datenbank für zukünftige Abfragen geschildert werden. Wenn Sie dieses Problem jedoch ernst nehmen, schlage ich vor, dass Sie Spark einen Versuch geben. Dies ist kein Problem für eine SQL-Datenbank, sondern für eine Big Data Engine.