Wie die meisten relevanten Ergebnisse mit Multi-Faktor Gewichtete Sortierung

Brauche ich, um eine gewichtete Sortierung auf 2+ Faktoren, sortiert nach "Relevanz". Aber die Faktoren sind nicht völlig isoliert, in, ich möchte einen oder mehrere der Faktoren, die Einfluss auf die "Dringlichkeit" (Gewicht) des anderen.

Beispiel: beigetragenen Inhalte (Artikel) können die up-/down-gevotet, und damit eine Bewertung, Sie haben eine post-Datum, und Sie sind auch markiert mit Kategorien. Benutzer die Artikel schreiben und abstimmen kann, und kann oder kann nicht auch eine Art ranking selbst (expert, etc). Wahrscheinlich ähnlich wie bei StackOverflow, richtig?

Ich möchte, dass jeder Benutzer eine Liste mit Artikeln, gruppiert nach tag, aber sortiert nach "Relevanz", wo Relevanz wird berechnet basierend auf der Bewertung und dem Alter der Artikel, und potenziell betroffene durch das ranking des Autors. I. E. eine hoch bewertete Artikel, der geschrieben wurde, die vor einigen Jahren nicht unbedingt so relevant wie ein mittlerer Platz Artikel gestern geschrieben. Und vielleicht, wenn ein Artikel von einem Experten geschrieben, es würde so behandelt werden, als relevanter als ein geschrieben von "Joe Schmoe".

Weiteres gutes Beispiel wäre zuweisen hotels eine "meta-score", bestehend aus Preis, Bewertung und Sehenswürdigkeiten.

Meine Frage ist, was ist der beste Algorithmus für die Multi-Faktor Sortieren? Dies kann ein Duplikat diese Frage, aber ich bin daran interessiert, einen generischen Algorithmus für eine beliebige Anzahl von Faktoren (mehr zumutbar ist, 2 - 4 Faktoren), vorzugsweise eine "voll-Automatik" - Funktion, dass ich mich nicht zu zwicken oder Benutzereingaben erforderlich, und ich kann nicht analysieren, lineare algebra und Eigenvektor Verrücktheit.


Möglichkeiten, die ich bisher gefunden habe:

Hinweis: S ist der "Sortier-score"

  1. "Linear gewichtet" - eine Funktion wie: S = (w1 * F1) + (w2 * F2) + (w3 * F3), wo wx sind willkürlich zugeordneten GEWICHTE, und Fx sind die Werte der Faktoren. Sie würde auch wollen zu normalisieren F (d.h. Fx_n = Fx /Fmax). Ich denke, dies ist ein bisschen wie Lucene-Suche funktioniert.
  2. "Base-N gewichtet" mehr wie Gruppierung als Gewichtung, es ist nur eine lineare Gewichtung, wobei die GEWICHTE erhöhen Vielfache von Basis-10 (einem ähnlichen Prinzip wie CSS-Selektor-Spezifität), so dass weitere wichtige Faktoren sind erheblich höher: S = 1000 * F1 + 100 * F2 + 10 * F3 ....
  3. Geschätzte Wert True (ETV) - dies ist offenbar das, was Google Analytics vorgestellt in Ihrer Berichterstattung, wo der Wert von einem Faktor beeinflusst (GEWICHTE) ein weiterer Faktor - die Folge wird zum Sortieren auf mehr "statistisch signifikante" Werte. Der link erklärt es ziemlich gut, so dass hier nur die Gleichung: S = (F2 /F2_max * F1) + ((1 - (F2 /F2_max)) * F1_avg), wo F1 ist das "wichtiger" Faktor ("bounce rate" in den Artikel), und F2 ist die "Bedeutung ändern" - Faktor ("Besuche" im Artikel).
  4. Bayes-Schätzung - sieht wirklich ähnlich, ETV, das ist wie IMDb berechnet Ihre Bewertung. Sehen in diesem StackOverflow post für die Erklärung; Gleichung: S = (F2 /(F2+F2_lim)) * F1 + (F2_lim /(F2+F2_lim)) × F1_avg, wo Fx sind die selben wie #3, und F2_lim ist der minimale Grenzwert für die "Bedeutung" - Faktor (d.h. ein Wert kleiner als X sollte nicht in Betracht gezogen werden).

Optionen #3 und #4 sehen wirklich vielversprechend, da Sie nicht wirklich wählen eine beliebige Gewichtung Regelung, wie Sie in #1 und #2, aber das problem ist, wie wollen Sie tun dies für mehr als zwei Faktoren?

Stieß ich auch auf die SQL-Implementierung für eine zwei-Faktor-Gewichtung Algorithmus, das ist im Grunde das, was ich schreiben müssen, irgendwann.

  • Nur für die Klarheit, die ein Faktor, die Sie haben, ändern Sie die GEWICHTE, welche anderen Faktoren in deinem Beispiel? Einer von Ihnen ist viel wichtiger als die anderen, oder willst du einfach nur vermeiden Sie manuell die Festlegung der GEWICHTE?
  • Ich weiß es ehrlich gesagt nicht erinnern (2+ Jahre her); ich wohl gerade vermeiden wollte manuell die Festlegung der GEWICHTE, da jeder Zeit änderten wir unsere Meinung hinsichtlich der Bedeutung, die wir haben würden, zum bereitstellen von code, sowie die Auswahl der richtigen GEWICHTE in den ersten Platz.
  • Sorry, ich erkannte, es war eine 2-jährige post-nach dem Kommentar. Ich wollte vorschlagen, die Sie verwenden, was heißt eine "Kompromiss-Lösung" Optimierung von lingo. Im Grunde wählen Sie die absoluten ideale "Punkt" im "solution space" (höchster Rang Plakat, neustes Datum, etc.) und dann die inverse der euklidischen Distanz von diesem Punkt aus wäre die Punktzahl. d.h. S = 1/(sqrt((Rang - rank_ideal)^2 + (Alter - age_ideal)^2 ... (xn - xn_ideal)^2); wie auch immer, hoffe, Sie haben es herausgefunden.
  • keine sorgen; Sie sollten die post, dass suggestion als eine Antwort, so werde es leichter gefunden werden
  • Für den Linear gewichteten Algorithmus, machen die GEWICHTE bis zu 1? Was passiert, wenn ich so etwas wie S = (f1 * .80) + (f2 * .80)?
  • das internet explodiert, und Sie bekommen etwas, was wie SO ist April Fools redesign (Comic Sans Kommentare!!!)...aber wahrscheinlicher wäre es nur willkürlich Blasen Sie Ihre endgültige Wert, der vielleicht nicht gleich, wenn es nur für die Sortierung.

InformationsquelleAutor drzaus | 2012-01-06
Schreibe einen Kommentar