Algorithmen, um Dinge zu finden, die ein Benutzer basierend auf anderen Nutzern mag

8

Ich denke daran, eine App zu schreiben, um Filme in einem HTPC zu klassifizieren, basierend auf dem, was die Familienmitglieder mögen.

Ich kenne keine Statistiken oder KI, aber das Zeug hier sieht sehr saftig aus. Ich würde nicht wissen, wo ich anfangen soll.

Folgendes möchte ich erreichen:

  1. Erstellen Sie eine Reihe von Stichproben aus den Likern der Nutzer, und bewerten Sie jedes Stichprobenattribut separat. Zum Beispiel mag ein Benutzer westliche Filme sehr mögen, also würde das westliche Genre für diesen Benutzer ein bisschen mehr Gewicht haben (und so weiter für andere Attribute, wie Schauspieler, Regisseur, usw.).

  2. Ein Benutzer kann Vorschläge erhalten, die auf den Vorlieben der anderen Benutzer basieren. Zum Beispiel, wenn sowohl Benutzer A und B wie Spielberg (Verbindung zwischen den Benutzern), und Benutzer B liebt Batman Begins, aber Benutzer A Katie Holmes verabscheut, wiegen Sie den Film für Benutzer A entsprechend (wieder, zum Beispiel jedes Attribut separat, vielleicht Benutzer A mag Actionfilme nicht so sehr, also bring die Bewertung etwas herunter, und da Katie Holmes nicht der Hauptstar ist, berücksichtige das nicht so sehr wie die anderen Attribute.)

Grundsätzlich vergleicht man die Sätze von Benutzer A mit denen von Benutzer B und erstellt eine Bewertung für Benutzer A.

Ich habe eine grobe Vorstellung davon, wie ich das umsetzen soll, aber ich bin mir sicher, dass einige kluge Köpfe bereits an eine viel bessere Lösung gedacht haben, also ... irgendwelche Vorschläge?

Tatsächlich scheint nach einer kurzen Recherche ein Bayes-Filter zu funktionieren. Wenn ja, wäre dies der bessere Ansatz? Wäre es so einfach, nur Filmdaten zu "normalisieren", einen Klassifikator für jeden Benutzer zu trainieren und dann jeden Film einfach zu klassifizieren?

Wenn Ihr Vorschlag einige Gehirnschmelzkonzepte enthält (ich bin in diesen Fächern nicht besonders erfahren, besonders in KI), würde ich es begrüßen, wenn Sie auch eine Liste einiger Grundlagen für mich einbringen würden, bevor Sie in die fleischigen Sachen eintauchen .

Danke!

    
Ivan 21.10.2009, 17:25
quelle

5 Antworten

2

Es gibt ein paar Algorithmen, die gut dafür sind:

ARTMAP: Gruppen über Wahrscheinlichkeit gegeneinander (das ist nicht schnell, aber es ist das Beste für Ihr Problem IMO)

ARTMAP enthält eine Gruppe von gemeinsamen Attributen und bestimmt die Wahrscheinlichkeit der Ähnlichkeit durch Prozentsätze. ARTMAP

KMeans: Dies trennt die Vektoren durch die Entfernung, dass sie voneinander sind KMeans: Wikipedia

PCA: wird den Durchschnitt aller Werte von den variablen Bits trennen. Dies ist, was Sie verwenden würden, um Gesichtserkennung und Hintergrundsubtraktion in Computer Vision zu tun. PCA

    
monksy 21.10.2009, 19:01
quelle
4

Matthew Podwysocki hatte einige interessante Artikel zu diesem Thema

Ссылка

Ссылка

Ссылка

    
mcintyre321 21.10.2009 17:34
quelle
4

Dies ist ähnlich wie diese Frage wo das OP wollte ein Empfehlungssystem aufbauen. Kurz gesagt, wir haben eine Reihe von Trainingsdaten, bestehend aus Nutzerbewertungen zu Filmen (z. B. 1-5 Sterne) und einer Reihe von Attributen für jeden Film (Jahr, Genre, Schauspieler, ..). Wir möchten einen Empfehler erstellen, damit er für ungesehene Filme eine mögliche Bewertung ausgibt. Die eingegebenen Daten sehen also so aus:

%Vor%

und für einen nicht bewerteten Film X:

%Vor%

Wir wollen eine Bewertung vorhersagen. Wenn Sie dies für alle ungesehenen Filme tun, erhalten Sie nach der Sortierung nach vorhergesagter Filmbewertung und Ausgabe der Top 10 ein Empfehlungssystem.

Der einfachste Ansatz ist die Verwendung eines Algorithmus für den nächsten Nachbarn . Suchen Sie unter den bewerteten Filmen nach den "nächsten" Filmen von Film X und kombinieren Sie ihre Bewertungen, um eine Vorhersage zu erstellen. Dieser Ansatz hat den Vorteil, dass er von Grund auf sehr einfach zu implementieren ist.

Andere anspruchsvollere Ansätze existieren. Zum Beispiel können Sie einen Entscheidungsbaum erstellen, der eine Reihe von Regeln für die Trainingsdaten enthält. Sie können auch Bayes'sche Netzwerke , Künstliche neuronale Netze , Support-Vektor-Maschinen , unter vielen anderen ... Gehen durch jede dieser werden nicht leicht für jemanden ohne den richtigen Hintergrund. Trotzdem erwarte ich, dass Sie ein externes Tool / eine externe Bibliothek verwenden würden. Jetzt scheinen Sie mit Bayesian Networks vertraut zu sein, also könnte ein einfaches naives Bayes-Netzwerk tatsächlich sehr mächtig sein. Ein Vorteil ist, dass es Vorhersage unter fehlenden Daten ermöglicht.

Die Hauptidee wäre in etwa gleich; nimm die Eingabedaten, die du hast, trainiere ein Modell und verwende es dann, um die Klasse neuer Instanzen vorherzusagen.

Wenn Sie mit verschiedenen Algorithmen in einem einfachen intuitiven Paket herumspielen möchten, das keine Programmierung erfordert, rate ich Ihnen, sich Weka (meine erste Wahl), Orange , oder RapidMiner . Der schwierigste Teil wäre, den Datensatz auf das erforderliche Format vorzubereiten. Der Rest ist so einfach wie die Wahl des Algorithmus und die Anwendung (alles mit ein paar Klicks!)

Ich schätze, für jemanden, der nicht zu sehr ins Detail gehen möchte, würde ich empfehlen, mit der nächsten Nachbarmethode zu gehen, da diese intuitiv und einfach zu implementieren ist. Immer noch die Option Weka eines der anderen Tools) ist es wert, sich zu informieren.

    
Amro 22.10.2009 19:26
quelle
2

Der K-nearest-neighbour-Algorithmus liegt vielleicht direkt auf Ihrer Seite.

    
hythlodayr 22.10.2009 18:26
quelle
1

Sehen Sie sich einige der Arbeiten der Top-Teams für die netflix-Preis .

    
jilles de wit 28.10.2009 12:03
quelle