2009-07-17 12 views
5

Ich muss einige Produkte basierend auf Benutzerbewertungen sortieren.Ein Ranking-Algorithmus

Angenommen, wir haben 3 Produkte {ein, b, c} und wir haben Feed Rücken des Benutzers zu diesen Produkten. Es ist nicht wichtig, welcher Benutzer gibt wir zu (diese Frage geht es nicht um Korrelat Filterung, wenn Sie mit ihm vertraut sind - Nutzerinteresse ist hier nicht der Fall ist)

unten Linien davon sind jeweils füttern Rücken von den Benutzern als sie versuchten, zum Vergleich der 3 Produkte:

eine 150 Punkte-b 0 Punkte (dieser Benutzer gerade erzählt uns, was er von 2 Produkten eine denkt und b und im Vergleich von a und b er aber, dass, wenn er eine gibt 150 Punkt dann b wert 0 Punkt)

ein 150 Punkte - c 20 Punkte

c 200 Punkte - ein 10 Punkte (trotz der vorherigen dieser Benutzer denkt, dass c besser ist, dass a)

ein 200 Punkte - b 40 Punkte - c 100 Punkte

ein 150 Punkte - b 50 Punkte

ein 150 Punkte-b 20 Punkte

(Diese Bewertungen sind nur ein Beispiel und in der realen Welt Reihe von Produkten und Bewertungen sind viel größer als diese)

Jetzt Ich brauche einen Algorithmus, um die Produkt-Rankings basierend auf User-Votes zu finden. Aus meiner Sicht ist es am besten, dieses Problem mit einem Korrelationsdiagramm zu beschreiben und alle Produkte miteinander zu verbinden.

Jede Art von Hilfe oder Tipps wird geschätzt.

/******************************************** ****************************************

können Sie nicht nur die Punkte hinzufügen und berechnen der Mittelwert der Punkte des Produktes Ursache ist es wichtig, wie es bekam seine Punkte annehmen ein 800 Punkte gegen b bekommen hat - dann c erhalten 10 Punkte gegen einem wie folgt aus:

200 - b 0

a 200 - b 0

a 200 - b 0

a 200 - b 0

C 10 - a 0 (dies bedeutet, dass c besser ist als a)

also auf jeden Fall ein ist besser als b aber mit einem kleinen 10 Punkten c bekam einen besseren Rang von ein

/******************************************** ************************************/

Antwort

5

Sie haben einige Herausforderungen. Fügen Sie ein Ranking c 0 - b 20 und Sie haben einen Kreis, wo c < b < ein < c.

Und natürlich Ihre Bestellung transitif nicht nur nicht (aus einem c < b < ist ein < c nicht folgen), ist es auch nicht total ist (möglicherweise gibt es Elemente, die Sie sich nicht entscheiden können, welche da kein Benutzer besser ist Abstimmung wurde durch andere Elemente getan, auch.

Was Sie bekommen ein disconnected, directed, finite graph ist. (die Richtung der Kanten verwenden zu sagen, welches Element (Knoten besser ist).

an einem bestimmten Knoten Starten Sie finden können bessere Knoten, die durch das Diagramm marschieren, möglicherweise mehrere nicht vergleichbare Lösungen finden Starten Sie den Startknoten erneut, um diesen Pfad zu verarbeiten.

Vielleicht Ordnung Theorie in Mathematik kann Ihnen helfen: Suche nach order theory, Teilauftrag, Hasse diagram.

Um dies praktische:

eine zweidimensionale Matrix mit einer Zeile und eine Spalte pro Element verwendet werden. Ermitteln Sie in der Zelle (a, b) die Summe der Bewertungen. Beginnen Sie an einem bestimmten Element a und folgen Sie allen positiven (> 0) Verbindungen, bis Sie entweder einen Knoten erreichen, der keine positiven Verbindungen hat, oder zu einem Knoten zurückkehren, den Sie bereits besucht haben. Diese Knoten sind Ihre Lösungen.

3

A baysean rating system könnte Ihre beste Wette - es sein berücksichtigt die Stimmen und die relative Anzahl der Stimmen, die ein Gegenstand hat, um ihm eine gewichtete Punktzahl zu geben.

+1

Die baysean Das Bewertungssystem funktioniert, wenn Elemente bewertet werden, aber nicht, wenn sie in Bezug auf andere Elemente bewertet werden. –

1

Ich glaube, Sie beziehen müssen, wie jede Person für jedes Produkt abgestimmt - zum Beispiel: Person 1 gestimmt: 100 für a, 50 für b und 0 für c Person 2 0 für ein gestimmt, 200 für b und 80
Person 1 3 stimmten für eine für b und -1 für c
Person 2 gestimmt -1 für a, 3 b für 2 und für c, 2

: für c

sollte dies in übersetzt werden wo ich benutze:
3 für die höchste Stimme
2 für die zweithöchste
1 für die niedrigste
und -1, wenn sie 0 (Hinweis darauf, dass sie nicht mochte/tat-nicht-betrachten das Produkt) stimmten

mein erster Gedanke auf es trotzdem